Spec-Zone.ru › Java Language Specification 17

Глава 19. Синтаксис

В этой главе повторяется синтаксическая грамматика, изложенная в главах 4, 6-10, 14 и 15, а также ключевые части лексической грамматики из главы 3, используя обозначения из §2.4.

Производства из §3 (Лексическая структура)

Идентификатор:
IdentifierChars но не Ключевое слово или Булево значение или Значение null
IdentifierChars:
JavaБуква {JavaБукваИлиЦифра}
JavaБуква:
любой символ Юникода, являющийся "буквой Java"
JavaБукваИлиЦифра:
любой символ Юникода, являющийся "буквой или цифрой Java"
TypeIdentifier:
Идентификатор но не permits, record, sealed, var, или yield
UnqualifiedMethodIdentifier:
Идентификатор но не yield
Литтерал:
Целочисленный литтерал
Дробный литтерал
Булево значение
Символьный литтерал
Строковый литтерал
Блок-строковый литтерал
Значение null

Производства из §4 (Типы, значения и переменные)

Тип:
Примитивный тип
Тип ссылки
Примитивный тип:
{Аннотация} Числовой тип
{Аннотация} boolean
Числовой тип:
Целочисленный тип
Тип с плавающей точкой
Целочисленный тип:
(один из)
byte short int long char
Тип с плавающей точкой:
(один из)
float double
Тип ссылки:
Тип класса или интерфейса
Переменная типа
Массивы
Тип класса или интерфейса:
Тип класса
Тип интерфейса
Тип класса:
{Аннотация} Идентификатор типа [Аргументы типа]
Имя пакета . {Аннотация} Идентификатор типа [Аргументы типа]
Тип класса или интерфейса . {Аннотация} Идентификатор типа [Аргументы типа]
Тип интерфейса:
Тип класса
Переменная типа:
{Аннотация} Идентификатор типа
Массив:
Примитивный тип Размеры
Тип класса или интерфейса Размеры
Переменная типа Размеры
Размеры:
{Аннотация} [ ] {{Аннотация} [ ]}
Параметр типа:
{Модификатор параметра типа} Идентификатор типа [Граница типа]
Модификатор параметра типа:
Аннотация
Граница типа:
extends Переменная типа
extends Тип класса или интерфейса {Дополнительная граница}
Дополнительная граница:
& Тип интерфейса
Аргументы типа:
< Список аргументов типа >
Список аргументов типа:
Аргумент типа {, Аргумент типа}
Аргумент типа:
Тип ссылки
Подстановочный символ
Подстановочный символ:
{Аннотация} ? [Границы подстановочного символа]
Границы подстановочного символа:
extends Тип ссылки
super Тип ссылки

Производные из §6 (Имена)

Имя модуля:
Идентификатор
Имя модуля . Идентификатор
Имя пакета:
Идентификатор
Имя пакета . Идентификатор
Имя типа:
Идентификатор типа
Имя пакета или типа . Идентификатор типа
Имя выражения:
Идентификатор
Неоднозначное имя . Идентификатор
Имя метода:
Идентификатор метода без квалификатора
Имя пакета или типа:
Идентификатор
Имя пакета или типа . Идентификатор
Неоднозначное имя:
Идентификатор
Неоднозначное имя . Идентификатор

Производные из §7 (Пакеты и модули)

Единица компиляции:
Единица обычной компиляции
Единица модульной компиляции
Единица обычной компиляции:
[Декларация пакета] {Декларация импорта} {Декларация класса или интерфейса верхнего уровня}
Единица модульной компиляции:
{Декларация импорта} Декларация модуля
Декларация пакета:
{Модификатор пакета} package Идентификатор {. Идентификатор} ;
Модификатор пакета:
Аннотация
Декларация импорта:
Декларация импорта одного типа
Декларация импорта всех типов из пакета
Декларация статического импорта одного члена
Декларация статического импорта всех членов
Декларация импорта одного типа:
import Имя типа ;
Декларация импорта всех типов из пакета:
import Имя пакета или типа . * ;
Декларация статического импорта одного члена:
import static Имя типа . Идентификатор ;
Декларация статического импорта всех членов:
import static Имя типа . * ;
Декларация класса или интерфейса верхнего уровня:
Декларация класса
Декларация интерфейса
;
Декларация модуля:
{Аннотация} [open] module Идентификатор {. Идентификатор} { {Директива модуля} }
Директива модуля:
requires {Модификатор Requires} Имя модуля ;
exports Имя пакета [to Имя модуля {, Имя модуля}] ;
opens Имя пакета [to Имя модуля {, Имя модуля}] ;
uses Имя типа ;
provides Имя типа with Имя типа {, Имя типа} ;
Модификатор Requires:
(one of)
transitive static

Производные из §8 (Классы)

ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
RecordDeclaration
NormalClassDeclaration:
{МодификаторКласса} class ИдентификаторТипа [ПараметрыТипа] [Наследует] [Реализует] [Разрешает] ТелоКласса
ClassModifier:
(один из)
Аннотация public protected private
abstract static final sealed non-sealed strictfp
TypeParameters:
< СписокПараметровТипа >
TypeParameterList:
ПараметрТипа {, ПараметрТипа}
ClassExtends:
extends ТипКласса
ClassImplements:
implements СписокИнтерфейсов
InterfaceTypeList:
ТипИнтерфейса {, ТипИнтерфейса}
ClassPermits:
permits ИмяТипа {, ИмяТипа}
ClassBody:
{ {ОбъявлениеТелаКласса} }
ClassBodyDeclaration:
ОбъявлениеЧленаКласса
ИнициализаторЭкземпляра
СтатическийИнициализатор
ОбъявлениеКонструктора
ClassMemberDeclaration:
ОбъявлениеПоля
ОбъявлениеМетода
ОбъявлениеКласса
ОбъявлениеИнтерфейса
;
FieldDeclaration:
{МодификаторПоля} ТипБезАннотаций СписокОбъявленийПеременных ;
FieldModifier:
(один из)
Аннотация public protected private
static final transient volatile
VariableDeclaratorList:
ОбъявлениеПеременной {, ОбъявлениеПеременной}
VariableDeclarator:
ИдентификаторОбъявленияПеременной [= ИнициализацияПеременной]
VariableDeclaratorId:
Идентификатор [Размеры]
VariableInitializer:
Выражение
ИнициализаторМассива
UnannType:
ПримитивныйТипБезАннотаций
СсылочныйТипБезАннотаций
UnannPrimitiveType:
ЧисловойТип
boolean
UnannReferenceType:
ТипКлассаИлиИнтерфейсаБезАннотаций
ПеременнаяТипаБезАннотаций
МассивТипБезАннотаций
UnannClassOrInterfaceType:
ТипКлассаБезАннотаций
ТипИнтерфейсаБезАннотаций
UnannClassType:
ИдентификаторТипа [АргументыТипа]
ИмяПакет . {Аннотация} ИдентификаторТипа [АргументыТипа]
ТипКлассаИлиИнтерфейсаБезАннотаций . {Аннотация} ИдентификаторТипа [АргументыТипа]
UnannInterfaceType:
ТипКлассаБезАннотаций
UnannTypeVariable:
ИдентификаторТипа
UnannArrayType:
ПримитивныйТипБезАннотаций Размеры
ТипКлассаИлиИнтерфейсаБезАннотаций Размеры
ПеременнаяТипаБезАннотаций Размеры
MethodDeclaration:
{МодификаторМетода} ЗаголовокМетода ТелоМетода
MethodModifier:
(один из)
Аннотация public protected private
abstract static final synchronized native strictfp
MethodHeader:
ТипВозвращаемогоЗначения ДеклараторМетода [Исключения]
ПараметрыТипа {Аннотация} ТипВозвращаемогоЗначения ДеклараторМетода [Исключения]
Result:
ТипБезАннотаций
void
МетодДекларатор:
Идентификатор ( [ПараметрПолучателя ,] [СписокФормальныхПараметров] ) [Размеры]
ПараметрПолучателя:
{Аннотация} ТипБезАннотаций [Идентификатор .] this
СписокФормальныхПараметров:
ФормальныйПараметр {, ФормальныйПараметр}
ФормальныйПараметр:
{МодификаторПеременной} ТипБезАннотаций ИдентификаторДекларатораПеременной
ПараметрПеременнойАрности
ПараметрПеременнойАрности:
{МодификаторПеременной} ТипБезАннотаций {Аннотация} ... Идентификатор
МодификаторПеременной:
Аннотация
final
Исключения:
throws СписокТиповИсключений
СписокТиповИсключений:
ТипИсключения {, ТипИсключения}
ТипИсключения:
ТипКласса
ПеременнаяТипа
ТелоМетода:
Блок
;
ИнициализаторОбъекта:
Блок
СтатическийИнициализатор:
static Блок
ДекларацияКонструктора:
{МодификаторКонструктора} ДеклараторКонструктора [Исключения] ТелоКонструктора
МодификаторКонструктора:
(одно из)
Аннотация public protected private
ДеклараторКонструктора:
[ПараметрыТипов] ПростоеИмяТипа ( [ПараметрПолучателя ,] [СписокФормальныхПараметров] )
ПростоеИмяТипа:
ИдентификаторТипа
ТелоКонструктора:
{ [ЯвноеВызовКонструктора] [ОператорыБлока] }
ЯвноеВызовКонструктора:
[АргументыТипов] this ( [СписокАргументов] ) ;
[АргументыТипов] super ( [СписокАргументов] ) ;
ИмяВыражения . [АргументыТипов] super ( [СписокАргументов] ) ;
Основной . [АргументыТипов] super ( [СписокАргументов] ) ;
ДекларацияПеречисления:
{МодификаторКласса} enum ИдентификаторТипа [РеализуетКласс] ТелоПеречисления
ТелоПеречисления:
{ [СписокКонстантПеречисления] [,] [ДекларацииТелаПеречисления] }
СписокКонстантПеречисления:
КонстантаПеречисления {, КонстантаПеречисления}
КонстантаПеречисления:
{МодификаторКонстантыПеречисления} Идентификатор [( [СписокАргументов] )] [ТелоКласса]
МодификаторКонстантыПеречисления:
Аннотация
ДекларацииТелаПеречисления:
; {ДекларацияТелаКласса}
ДекларацияЗаписи:
{МодификаторКласса} record ИдентификаторТипа [ПараметрыТипов] ЗаголовокЗаписи [РеализуетКласс] ТелоЗаписи
ЗаголовокЗаписи:
( [СписокКомпонентовЗаписи] )
СписокКомпонентовЗаписи:
КомпонентЗаписи {, КомпонентЗаписи}
КомпонентЗаписи:
{МодификаторКомпонентаЗаписи} ТипБезАннотаций Идентификатор
КомпонентЗаписиПеременнойАрности
КомпонентЗаписиПеременнойАрности:
{МодификаторКомпонентаЗаписи} ТипБезАннотаций {Аннотация} ... Идентификатор
МодификаторКомпонентаЗаписи:
Аннотация
ТелоЗаписи:
{ {ДекларацияТелаЗаписи} }
RecordBodyDeclaration:
Объявление тела класса
Компактное объявление конструктора
CompactConstructorDeclaration:
{Модификатор конструктора} Простое имя типа Тело конструктора

Производные из §9 (Интерфейсы)

InterfaceDeclaration:
Нормальное объявление интерфейса
Объявление аннотационного интерфейса
NormalInterfaceDeclaration:
{Модификатор интерфейса} interface Идентификатор типа [Параметры типа] [Интерфейс расширяет] [Интерфейс разрешает] Тело интерфейса
InterfaceModifier:
(одно из)
Аннотация public protected private
abstract static sealed non-sealed strictfp
InterfaceExtends:
extends Список типов интерфейса
InterfacePermits:
permits Имя типа {, Имя типа}
InterfaceBody:
{ {Объявление члена интерфейса} }
InterfaceMemberDeclaration:
Объявление константы
Объявление метода интерфейса
Объявление класса
Объявление интерфейса
;
ConstantDeclaration:
{Модификатор константы} Тип без аннотаций Список объявляемых переменных ;
ConstantModifier:
(одно из)
Аннотация public
static final
InterfaceMethodDeclaration:
{Модификатор метода интерфейса} Заголовок метода Тело метода
InterfaceMethodModifier:
(одно из)
Аннотация public private
abstract default static strictfp
AnnotationInterfaceDeclaration:
{Модификатор интерфейса} @ interface Идентификатор типа Тело аннотационного интерфейса
AnnotationInterfaceBody:
{ {Объявление члена аннотационного интерфейса} }
AnnotationInterfaceMemberDeclaration:
Объявление элемента аннотационного интерфейса
Объявление константы
Объявление класса
Объявление интерфейса
;
AnnotationInterfaceElementDeclaration:
{Модификатор элемента аннотационного интерфейса} Тип без аннотаций Идентификатор ( ) [Размеры] [Значение по умолчанию] ;
AnnotationInterfaceElementModifier:
(одно из)
Аннотация public
abstract
DefaultValue:
default Значение элемента
Annotation:
Нормальная аннотация
Аннотация-метка
Аннотация с единственным элементом
NormalAnnotation:
@ Имя типа ( [Список пар имя-значение элемента] )
ElementValuePairList:
Пара имя-значение элемента {, Пара имя-значение элемента}
ElementValuePair:
Идентификатор = Значение элемента
ElementValue:
Условное выражение
Инициализатор массива значений элементов
Аннотация
ElementValueArrayInitializer:
{ [Список значений элементов] [,] }
ElementValueList:
Значение элемента {, Значение элемента}
MarkerAnnotation:
@ Имя типа
SingleElementAnnotation:
@ Имя типа ( Значение элемента )

Производные из §10 (Массивы)

ArrayInitializer:
{ [Список инициализаторов переменных] [,] }
VariableInitializerList:
Инициализатор переменной {, Инициализатор переменной}

Productions from §14 (Blocks, Statements, and Patterns)

Block:
{ [BlockStatements] }
BlockStatements:
BlockStatement {BlockStatement}
BlockStatement:
LocalClassOrInterfaceDeclaration
LocalVariableDeclarationStatement
Statement
LocalClassOrInterfaceDeclaration:
ClassDeclaration
NormalInterfaceDeclaration
LocalVariableDeclarationStatement:
LocalVariableDeclaration ;
LocalVariableDeclaration:
{VariableModifier} LocalVariableType VariableDeclaratorList
LocalVariableType:
UnannType
var
Statement:
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementNoShortIf:
StatementWithoutTrailingSubstatement
LabeledStatementNoShortIf
IfThenElseStatementNoShortIf
WhileStatementNoShortIf
ForStatementNoShortIf
StatementWithoutTrailingSubstatement:
Block
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
YieldStatement
EmptyStatement:
;
LabeledStatement:
Identifier : Statement
LabeledStatementNoShortIf:
Identifier : StatementNoShortIf
ExpressionStatement:
StatementExpression ;
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf:
if ( Expression ) StatementNoShortIf else StatementNoShortIf
AssertStatement:
assert Expression ;
assert Expression : Expression ;
SwitchStatement:
switch ( Expression ) SwitchBlock
SwitchBlock:
{ SwitchRule {SwitchRule} }
{ {SwitchBlockStatementGroup} {SwitchLabel :} }
SwitchRule:
SwitchLabel -> Expression ;
SwitchLabel -> Block
SwitchLabel -> ThrowStatement
SwitchBlockStatementGroup:
SwitchLabel : {SwitchLabel :} BlockStatements
SwitchLabel:
case CaseConstant {, CaseConstant}
default
CaseConstant:
ConditionalExpression
WhileStatement:
while ( Expression ) Statement
WhileStatementNoShortIf:
while ( Выражение ) ОператорБезКороткогоIf
DoStatement:
do Оператор while ( Выражение ) ;
ForStatement:
ОсновнойОператорFor
РасширенныйОператорFor
ForStatementNoShortIf:
ОсновнойОператорForБезКороткогоIf
РасширенныйОператорForБезКороткогоIf
BasicForStatement:
for ( [ForInit] ; [Выражение] ; [ForUpdate] ) Оператор
BasicForStatementNoShortIf:
for ( [ForInit] ; [Выражение] ; [ForUpdate] ) ОператорБезКороткогоIf
ForInit:
СписокВыраженийОператора
ОбъявлениеЛокальнойПеременной
ForUpdate:
СписокВыраженийОператора
StatementExpressionList:
ВыражениеОператора {, ВыражениеОператора}
EnhancedForStatement:
for ( ОбъявлениеЛокальнойПеременной : Выражение ) Оператор
EnhancedForStatementNoShortIf:
for ( ОбъявлениеЛокальнойПеременной : Выражение ) ОператорБезКороткогоIf
BreakStatement:
break [Идентификатор] ;
YieldStatement:
yield Выражение ;
ContinueStatement:
continue [Идентификатор] ;
ReturnStatement:
return [Выражение] ;
ThrowStatement:
throw Выражение ;
SynchronizedStatement:
synchronized ( Выражение ) Блок
TryStatement:
try Блок ОбработчикиИсключений
try Блок [ОбработчикиИсключений] Finally
TryWithResourcesStatement
Catches:
ОбработчикИсключения {ОбработчикИсключения}
CatchClause:
catch ( ПараметрОбработчикаИсключения ) Блок
CatchFormalParameter:
{МодификаторПеременной} ТипОбработчикаИсключения ИдентификаторПеременной
CatchType:
ТипБезАннотаций {| ТипКласса}
Finally:
finally Блок
TryWithResourcesStatement:
try СпецификацияРесурсов Блок [ОбработчикиИсключений] [Finally]
ResourceSpecification:
( СписокРесурсов [;] )
ResourceList:
Ресурс {; Ресурс}
Resource:
ОбъявлениеЛокальнойПеременной
ДоступКПеременной
Pattern:
ШаблонТипа
TypePattern:
ОбъявлениеЛокальнойПеременной

Производства из §15 (Выражения)

Первичное выражение:
PrimaryNoNewArray
Выражение создания массива
Первичное выражение (без создания массива):
Литерал
Литерал класса
this
Имя типа . this
( Выражение )
Выражение создания экземпляра класса
Доступ к полю
Доступ к элементу массива
Вызов метода
Ссылка на метод
Литерал класса:
Имя типа {[ ]} . class
Числовой тип {[ ]} . class
boolean {[ ]} . class
void . class
Выражение создания экземпляра класса:
Неквалифицированное выражение создания экземпляра класса
Имя выражения . Неквалифицированное выражение создания экземпляра класса
Первичное выражение . Неквалифицированное выражение создания экземпляра класса
Неквалифицированное выражение создания экземпляра класса:
new [Аргументы типа] Тип класса или интерфейса для создания ( [Список аргументов] ) [Тело класса]
Тип класса или интерфейса для создания:
{Аннотация} Идентификатор {. {Аннотация} Идентификатор} [Аргументы типа или алмаз]
Аргументы типа или алмаз:
Аргументы типа
<>
Доступ к полю:
Первичное выражение . Идентификатор
super . Идентификатор
Имя типа . super . Идентификатор
Доступ к элементу массива:
Имя выражения [ Выражение ]
Первичное выражение (без создания массива) [ Выражение ]
Вызов метода:
Имя метода ( [Список аргументов] )
Имя типа . [Аргументы типа] Идентификатор ( [Список аргументов] )
Имя выражения . [Аргументы типа] Идентификатор ( [Список аргументов] )
Первичное выражение . [Аргументы типа] Идентификатор ( [Список аргументов] )
super . [Аргументы типа] Идентификатор ( [Список аргументов] )
Имя типа . super . [Аргументы типа] Идентификатор ( [Список аргументов] )
Список аргументов:
Выражение {, Выражение}
Ссылка на метод:
Имя выражения :: [Аргументы типа] Идентификатор
Первичное выражение :: [Аргументы типа] Идентификатор
Тип ссылки :: [Аргументы типа] Идентификатор
super :: [Аргументы типа] Идентификатор
Имя типа . super :: [Аргументы типа] Идентификатор
Тип класса :: [Аргументы типа] new
Тип массива :: new
Выражение создания массива:
new Примитивный тип Выражения размеров [Размеры]
new Тип класса или интерфейса Выражения размеров [Размеры]
new Примитивный тип Размеры Инициализатор массива
new Тип класса или интерфейса Размеры Инициализатор массива
Выражения размеров:
Выражение размера {Выражение размера}
Выражение размера:
{Аннотация} [ Выражение ]
Выражение:
Лямбда-выражение
Выражение присваивания
LambdaExpression:
LambdaParameters -> LambdaBody
LambdaParameters:
( [LambdaParameterList] )
Identifier
LambdaParameterList:
LambdaParameter {, LambdaParameter}
Identifier {, Identifier}
LambdaParameter:
{VariableModifier} LambdaParameterType VariableDeclaratorId
VariableArityParameter
LambdaParameterType:
UnannType
var
LambdaBody:
Expression
Block
AssignmentExpression:
ConditionalExpression
Assignment
Assignment:
LeftHandSide AssignmentOperator Expression
LeftHandSide:
ExpressionName
FieldAccess
ArrayAccess
AssignmentOperator:
(one of)
=  *=  /=  %=  +=  -=  <<=  >>=  >>>=  &=  ^=  |=
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
ConditionalOrExpression ? Expression : LambdaExpression
ConditionalOrExpression:
ConditionalAndExpression
ConditionalOrExpression || ConditionalAndExpression
ConditionalAndExpression:
InclusiveOrExpression
ConditionalAndExpression && InclusiveOrExpression
InclusiveOrExpression:
ExclusiveOrExpression
InclusiveOrExpression | ExclusiveOrExpression
ExclusiveOrExpression:
AndExpression
ExclusiveOrExpression ^ AndExpression
AndExpression:
EqualityExpression
AndExpression & EqualityExpression
EqualityExpression:
RelationalExpression
EqualityExpression == RelationalExpression
EqualityExpression != RelationalExpression
RelationalExpression:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
InstanceofExpression
InstanceofExpression:
RelationalExpression instanceof ReferenceType
RelationalExpression instanceof Pattern
ShiftExpression:
AdditiveExpression
ShiftExpression << AdditiveExpression
ShiftExpression >> AdditiveExpression
ShiftExpression >>> AdditiveExpression
AdditiveExpression:
MultiplicativeExpression
AdditiveExpression + MultiplicativeExpression
AdditiveExpression - MultiplicativeExpression
MultiplicativeExpression:
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
UnaryExpression:
Префиксный инкремент
Префиксный декремент
+ Унарное выражение
- Унарное выражение
Унарное выражение без "+" и "-"
PreIncrementExpression:
++ Унарное выражение
PreDecrementExpression:
-- Унарное выражение
UnaryExpressionNotPlusMinus:
Постфиксное выражение
~ Унарное выражение
! Унарное выражение
Выражение приведения типов
Выражение выбора
PostfixExpression:
Основное
Имя выражения
Постфиксный инкремент
Постфиксный декремент
PostIncrementExpression:
Постфиксное выражение ++
PostDecrementExpression:
Постфиксное выражение --
CastExpression:
( Примитивный тип ) Унарное выражение
( Тип ссылки {Дополнительное ограничение} ) Унарное выражение без "+" и "-"
( Тип ссылки {Дополнительное ограничение} ) Лямбда-выражение
SwitchExpression:
switch ( Выражение ) Блок выбора
ConstantExpression:
Выражение

© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API