![]() |
Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация языка Java Третий Выпуск |
ГЛАВА 2
Эта глава описывает бесконтекстные грамматики, используемые в этой спецификации, чтобы определить лексическую и синтаксическую структуру программы.
Запуск с предложения, состоящего из сингла, различал нетерминальный, названный целевым символом, данная бесконтекстная грамматика определяет язык, а именно, набор возможных последовательностей терминальных символов, которые могут следовать из повторной замены любого нетерминального в последовательности с правой стороной производства, для которого нетерминальной является левая сторона.
Эти входные элементы, с пробелом (§3.6) и комментарии (§3.7) отброшенный, формируют терминальные символы для синтаксической грамматики для языка программирования Java и вызываются маркерами (§3.5). Эти маркеры являются идентификаторами (§3.8), ключевые слова (§3.9), литералы (§3.10), разделители (§3.11), и операторы (§3.12) языка программирования Java.
fixed
width
шрифт в производстве лексических и синтаксических грамматик, и всюду по этой спецификации всякий раз, когда текст непосредственно относится к такому терминальному символу. Они должны появиться в программе точно как записано. Нетерминальные символы показывают в курсиве. Определение нетерминального представляется именем нетерминального, определяемого сопровождаемый двоеточием. Одна или более альтернативных правых сторон для нетерминального тогда следуют последующие строки. Например, синтаксическое определение:
состояния, что нетерминальный IfThenStatement представляет маркерIfThenStatement: if ( Expression ) Statement
if
, сопровождаемый маркером левой круглой скобки, сопровождаемым Выражением, сопровождаемым маркером правой круглой скобки, сопровождаемым Оператором. Как другой пример, синтаксическое определение:
состояния, что ArgumentList может представить или единственный Параметр или ArgumentList, сопровождаемый запятой, сопровождаемой Параметром. Это определение ArgumentList является рекурсивным, то есть это определяется с точки зрения себя. Результат состоит в том, что ArgumentList может содержать любое положительное число параметров. Такие рекурсивные определения нетерминалов распространены.ArgumentList: Argument ArgumentList , Argument
Преобразованный в нижний индекс суффикс "выбирает", который может появиться после терминального или нетерминального, указывает на дополнительный символ. Альтернатива, содержащая дополнительный символ фактически, определяет две правых стороны, тот, который опускает дополнительный элемент и тот, который включает это.
удобное сокращение для:BreakStatement: break Identifieropt ;
и это:BreakStatement: break ; break Identifier ;
удобное сокращение для:BasicForStatement: for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
который поочередно является сокращением для:BasicForStatement: for ( ; Expressionopt ; ForUpdateopt ) Statement for ( ForInit ; Expressionopt ; ForUpdateopt ) Statement
который поочередно является сокращением для:BasicForStatement: for ( ; ; ForUpdateopt ) Statement for ( ; Expression ; ForUpdateopt ) Statement for ( ForInit ; ; ForUpdateopt ) Statement for ( ForInit ; Expression ; ForUpdateopt ) Statement
таким образом, у нетерминального BasicForStatement фактически есть восемь альтернативных правых сторон.BasicForStatement: for ( ; ; ) Statement for ( ; ; ForUpdate ) Statement for ( ; Expression ; ) Statement for ( ; Expression ; ForUpdate ) Statement for ( ForInit ; ; ) Statement for ( ForInit ; ; ForUpdate ) Statement for ( ForInit ; Expression ; ) Statement for ( ForInit ; Expression ; ForUpdate ) Statement
Очень длинная правая сторона может продолжаться на второй строке, существенно располагая эту вторую строку с отступом, как в:
который определяет одну правую сторону для нетерминального ConstructorDeclaration.ConstructorDeclaration: ConstructorModifiersopt ConstructorDeclarator Throwsopt ConstructorBody
Когда слова "один из" следуют за двоеточием в определении грамматики, они показывают, что каждый из терминальных символов на следующей строке или строках является альтернативным определением. Например, лексическая грамматика содержит производство:
который является просто удобным сокращением для:ZeroToThree: one of 0 1 2 3
Когда альтернатива в лексическом производстве, кажется, маркер, она представляет последовательность символов, которые составили бы такой маркер. Таким образом, определение:ZeroToThree: 0 1 2 3
в лексической грамматике производство является сокращением для:BooleanLiteral: one of true false
Правая сторона лексического производства может определить, что определенные расширения не разрешаются при использовании фразы, "но не" и затем указание на расширения, которые будут исключены, как в производстве для InputCharacter (§3.4) и Идентификатор (§3.8):BooleanLiteral: t r u e f a l s e
Наконец, несколько нетерминальных символов описываются дескриптивной фразой в римлянине, вводят случаи, где это было бы непрактично, чтобы перечислить все альтернативы:InputCharacter: UnicodeInputCharacter but not CR or LF Identifier: IdentifierName but not a Keyword or BooleanLiteral or NullLiteral
RawInputCharacter: any Unicode character
Содержание | Предыдущий | Следующий | Индекс | Спецификация языка Java Третий Выпуск |
Авторское право © 1996-2005 Sun Microsystems, Inc. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления через нашу