Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | Индекс

ГЛАВА 2

Грамматики


Эта глава описывает бесконтекстные грамматики, используемые в этой спецификации, чтобы определить лексическую и синтаксическую структуру программы Java.

2.1 Бесконтекстные грамматики

Бесконтекстная грамматика состоит из многого производства. У каждого производства есть абстрактный символ, названный нетерминальным как его левая сторона, и последовательность одного или более нетерминальных и терминальных символов как ее правая сторона. Для каждой грамматики терминальные символы оттягиваются из указанного алфавита.

Запуск с предложения, состоящего из сингла, различал нетерминальный, названный целевым символом, данная бесконтекстная грамматика определяет язык, а именно, бесконечное множество возможных последовательностей терминальных символов, которые могут следовать из повторной замены любого нетерминального в последовательности с правой стороной производства, для которого нетерминальной является левая сторона.

2.2 Лексическая Грамматика

Лексическая грамматика для Java дается в §3. Эта грамматика имеет как ее терминальные символы символы набора символов Unicode. Это определяет ряд производства, запускающегося с целевого Ввода символа (§3.5), которые описывают, как последовательности символов Unicode (§3.1) преобразовываются в последовательность входных элементов (§3.5).

Эти входные элементы, с пробелом (§3.6) и комментарии (§3.7) отброшенный, формируют терминальные символы для синтаксической грамматики для Java и вызываются маркерами Java (§3.5). Эти маркеры являются идентификаторами (§3.8), ключевые слова (§3.9), литералы (§3.10), разделители (§3.11), и операторы (§3.11) языка Java.

2.3 Синтаксическая Грамматика

Синтаксическая грамматика для Java дается в Главах 4, 610-, 14, и 15. Этой грамматике определила маркеры Java лексическая грамматика как ее терминальные символы. Это определяет ряд производства, запускающегося с целевого символа CompilationUnit (§7.3), которые описывают, как последовательности маркеров могут сформировать синтаксически корректные программы Java.

LALR (1) версия синтаксической грамматики представляется в Главе 19. Грамматика в теле этой спецификации очень подобна LALR (1) грамматика, но более читаема.

2.4 Нотация грамматики

В терминальных символах показывают fixed width шрифт в производстве лексических и синтаксических грамматик, и всюду по этой спецификации всякий раз, когда текст непосредственно относится к такому терминальному символу. Они должны появиться в программе точно как записано.

Нетерминальные символы показывают в курсиве. Определение нетерминального представляется именем нетерминального, определяемого сопровождаемый двоеточием. Одна или более альтернативных правых сторон для нетерминального тогда следуют последующие строки. Например, синтаксическое определение:

состояния, что нетерминальный IfThenStatement представляет маркер if, сопровождаемый маркером левой круглой скобки, сопровождаемым Выражением, сопровождаемым маркером правой круглой скобки, сопровождаемым Оператором. Как другой пример, синтаксическое определение:

состояния, что ArgumentList может представить или единственный Параметр или ArgumentList, сопровождаемый запятой, сопровождаемой Параметром. Это определение ArgumentList является рекурсивным, то есть это определяется с точки зрения себя. Результат состоит в том, что ArgumentList может содержать любое положительное число параметров. Такие рекурсивные определения нетерминалов распространены.

Преобразованный в нижний индекс суффикс "выбирает", который может появиться после терминального или нетерминального, указывает на дополнительный символ. Альтернатива, содержащая дополнительный символ фактически, определяет две правых стороны, тот, который опускает дополнительный элемент и тот, который включает это. Это означает что:

удобное сокращение для:

и это:

удобное сокращение для:

который поочередно является сокращением для:

который поочередно является сокращением для:

таким образом, у нетерминального ForStatement фактически есть восемь альтернативных правых сторон.

Очень длинная правая сторона может продолжаться на второй строке, существенно располагая эту вторую строку с отступом, как в:

который определяет одну правую сторону для нетерминального ConstructorDeclaration. (Эта правая сторона является сокращением для четырех альтернативных правых сторон, из-за двух возникновений "выбирают".)

Когда слова "один из" следуют за двоеточием в определении грамматики, они показывают, что каждый из терминальных символов на следующей строке или строках является альтернативным определением. Например, лексическая грамматика для Java содержит производство:

который является просто удобным сокращением для:

Когда альтернатива в лексическом производстве, кажется, маркер, она представляет последовательность символов, которые составили бы такой маркер. Таким образом, определение:

в лексической грамматике производство является сокращением для:

Правая сторона лексического производства может определить, что определенные расширения не разрешаются при использовании фразы, "но не" и затем указание на расширения, которые будут исключены, как в производстве для InputCharacter (§3.4) и Идентификатор (§3.8):

Наконец, несколько нетерминальных символов описываются дескриптивной фразой в римлянине, вводят случаи, где это было бы непрактично, чтобы перечислить все альтернативы:


Содержание | Предыдущий | Следующий | Индекс

Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com

free hit counter