From 19005581a0d35233f862e57308734d3486569bb9 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Fri, 1 May 2026 18:45:23 +0200 Subject: WIP --- data/java-21/syntax.grammar | 963 ++++++++++++++++++++++++++++++++++++++++++++ data/java-8/syntax.grammar | 845 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1808 insertions(+) create mode 100644 data/java-21/syntax.grammar create mode 100644 data/java-8/syntax.grammar (limited to 'data') diff --git a/data/java-21/syntax.grammar b/data/java-21/syntax.grammar new file mode 100644 index 0000000..fd88d68 --- /dev/null +++ b/data/java-21/syntax.grammar @@ -0,0 +1,963 @@ +PrimitiveType: + {Annotation} NumericType + {Annotation} boolean + +NumericType: + IntegralType + FloatingPointType + +IntegralType: + byte + short + int + long + char + +FloatingPointType: + float + double + +ReferenceType: + ClassOrInterfaceType + ArrayType + +ClassOrInterfaceType: + ClassType + InterfaceType + +ClassType: + {Annotation} TypeIdentifier [TypeArguments] + PackageName . {Annotation} TypeIdentifier [TypeArguments] + ClassOrInterfaceType . {Annotation} TypeIdentifier [TypeArguments] + +InterfaceType: + ClassType + +ArrayType: + PrimitiveType Dims + ClassOrInterfaceType Dims + +Dims: + {Annotation} [ ] {{Annotation} [ ]} + +TypeParameter: + {TypeParameterModifier} TypeIdentifier [TypeBound] + +TypeParameterModifier: + Annotation + +TypeBound: + extends ClassOrInterfaceType {AdditionalBound} + +AdditionalBound: + & InterfaceType + +TypeArguments: + < TypeArgumentList > + +TypeArgumentList: + TypeArgument {, TypeArgument} + +TypeArgument: + ReferenceType + Wildcard + +Wildcard: + {Annotation} ? [WildcardBounds] + +WildcardBounds: + extends ReferenceType + super ReferenceType + +ModuleName: + Identifier + ModuleName . Identifier + +PackageName: + Identifier + PackageName . Identifier + +TypeName: + TypeIdentifier + PackageOrTypeName . TypeIdentifier + +ExpressionName: + Identifier + AmbiguousName . Identifier + +MethodName: + UnqualifiedMethodIdentifier + +PackageOrTypeName: + Identifier + PackageOrTypeName . Identifier + +AmbiguousName: + Identifier + AmbiguousName . Identifier + +CompilationUnit: + OrdinaryCompilationUnit + ModularCompilationUnit + +OrdinaryCompilationUnit: + [PackageDeclaration] {ImportDeclaration} {TopLevelClassOrInterfaceDeclaration} + +ModularCompilationUnit: + {ImportDeclaration} ModuleDeclaration + +PackageDeclaration: + {PackageModifier} package Identifier {. Identifier} ; + +PackageModifier: + Annotation + +ImportDeclaration: + SingleTypeImportDeclaration + TypeImportOnDemandDeclaration + SingleStaticImportDeclaration + StaticImportOnDemandDeclaration + +SingleTypeImportDeclaration: + import TypeName ; + +TypeImportOnDemandDeclaration: + import PackageOrTypeName . * ; + +SingleStaticImportDeclaration: + import static TypeName . Identifier ; + +StaticImportOnDemandDeclaration: + import static TypeName . * ; + +TopLevelClassOrInterfaceDeclaration: + ClassDeclaration + InterfaceDeclaration + ; + +ModuleDeclaration: + {Annotation} [open] module Identifier {. Identifier} { {ModuleDirective} } + +ModuleDirective: + requires {RequiresModifier} ModuleName ; + exports PackageName [to ModuleName {, ModuleName}] ; + opens PackageName [to ModuleName {, ModuleName}] ; + uses TypeName ; + provides TypeName with TypeName {, TypeName} ; + +RequiresModifier: + transitive + static + +ClassDeclaration: + NormalClassDeclaration + EnumDeclaration + RecordDeclaration + +NormalClassDeclaration: + {ClassModifier} class TypeIdentifier [TypeParameters] [ClassExtends] [ClassImplements] [ClassPermits] ClassBody + +ClassModifier: + Annotation + public + protected + private + abstract + static + final + sealed + non-sealed + strictfp + +TypeParameters: + < TypeParameterList > + +TypeParameterList: + TypeParameter {, TypeParameter} + +ClassExtends: + extends ClassType + +ClassImplements: + implements InterfaceTypeList + +InterfaceTypeList: + InterfaceType {, InterfaceType} + +ClassPermits: + permits TypeName {, TypeName} + +ClassBody: + { {ClassBodyDeclaration} } + +ClassBodyDeclaration: + ClassMemberDeclaration + InstanceInitializer + StaticInitializer + ConstructorDeclaration + +ClassMemberDeclaration: + FieldDeclaration + MethodDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +FieldDeclaration: + {FieldModifier} UnannType VariableDeclaratorList ; + +FieldModifier: + Annotation + public + protected + private + static + final + transient + volatile + +VariableDeclaratorList: + VariableDeclarator {, VariableDeclarator} + +VariableDeclarator: + VariableDeclaratorId [= VariableInitializer] + +VariableDeclaratorId: + Identifier [Dims] + +VariableInitializer: + Expression + ArrayInitializer + +UnannType: + UnannPrimitiveType + UnannReferenceType + +UnannPrimitiveType: + NumericType + boolean + +UnannReferenceType: + UnannClassOrInterfaceType + UnannArrayType + +UnannClassOrInterfaceType: + UnannClassType + UnannInterfaceType + +UnannClassType: + TypeIdentifier [TypeArguments] + PackageName . {Annotation} TypeIdentifier [TypeArguments] + UnannClassOrInterfaceType . {Annotation} TypeIdentifier [TypeArguments] + +UnannInterfaceType: + UnannClassType + +UnannArrayType: + UnannPrimitiveType Dims + UnannClassOrInterfaceType Dims + +MethodDeclaration: + {MethodModifier} MethodHeader MethodBody + +MethodModifier: + Annotation + public + protected + private + abstract + static + final + synchronized + native + strictfp + +MethodHeader: + Result MethodDeclarator [Throws] + TypeParameters {Annotation} Result MethodDeclarator [Throws] + +Result: + UnannType + void + +MethodDeclarator: + Identifier ( [ReceiverParameter ,] [FormalParameterList] ) [Dims] + +ReceiverParameter: + {Annotation} UnannType [Identifier .] this + +FormalParameterList: + FormalParameter {, FormalParameter} + +FormalParameter: + {VariableModifier} UnannType VariableDeclaratorId + VariableArityParameter + +VariableArityParameter: + {VariableModifier} UnannType {Annotation} ... Identifier + +VariableModifier: + Annotation + final + +Throws: + throws ExceptionTypeList + +ExceptionTypeList: + ExceptionType {, ExceptionType} + +ExceptionType: + ClassType + +MethodBody: + Block + ; + +InstanceInitializer: + Block + +StaticInitializer: + static Block + +ConstructorDeclaration: + {ConstructorModifier} ConstructorDeclarator [Throws] ConstructorBody + +ConstructorModifier: + Annotation + public + protected + private + +ConstructorDeclarator: + [TypeParameters] SimpleTypeName ( [ReceiverParameter ,] [FormalParameterList] ) + +SimpleTypeName: + TypeIdentifier + +ConstructorBody: + { [ExplicitConstructorInvocation] [BlockStatements] } + +ExplicitConstructorInvocation: + [TypeArguments] this ( [ArgumentList] ) ; + [TypeArguments] super ( [ArgumentList] ) ; + ExpressionName . [TypeArguments] super ( [ArgumentList] ) ; + Primary . [TypeArguments] super ( [ArgumentList] ) ; + +EnumDeclaration: + {ClassModifier} enum TypeIdentifier [ClassImplements] EnumBody + +EnumBody: + { [EnumConstantList] [,] [EnumBodyDeclarations] } + +EnumConstantList: + EnumConstant {, EnumConstant} + +EnumConstant: + {EnumConstantModifier} Identifier [( [ArgumentList] )] [ClassBody] + +EnumConstantModifier: + Annotation + +EnumBodyDeclarations: + ; {ClassBodyDeclaration} + +RecordDeclaration: + {ClassModifier} record TypeIdentifier [TypeParameters] RecordHeader [ClassImplements] RecordBody + +RecordHeader: + ( [RecordComponentList] ) + +RecordComponentList: + RecordComponent {, RecordComponent} + +RecordComponent: + {RecordComponentModifier} UnannType Identifier + VariableArityRecordComponent + +VariableArityRecordComponent: + {RecordComponentModifier} UnannType {Annotation} ... Identifier + +RecordComponentModifier: + Annotation + +RecordBody: + { {RecordBodyDeclaration} } + +RecordBodyDeclaration: + ClassBodyDeclaration + CompactConstructorDeclaration + +CompactConstructorDeclaration: + {ConstructorModifier} SimpleTypeName ConstructorBody + +InterfaceDeclaration: + NormalInterfaceDeclaration + AnnotationInterfaceDeclaration + +NormalInterfaceDeclaration: + {InterfaceModifier} interface TypeIdentifier [TypeParameters] [InterfaceExtends] [InterfacePermits] InterfaceBody + +InterfaceModifier: + Annotation + public + protected + private + abstract + static + sealed + non-sealed + strictfp + +InterfaceExtends: + extends InterfaceTypeList + +InterfacePermits: + permits TypeName {, TypeName} + +InterfaceBody: + { {InterfaceMemberDeclaration} } + +InterfaceMemberDeclaration: + ConstantDeclaration + InterfaceMethodDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +ConstantDeclaration: + {ConstantModifier} UnannType VariableDeclaratorList ; + +ConstantModifier: + Annotation + public + static + final + +InterfaceMethodDeclaration: + {InterfaceMethodModifier} MethodHeader MethodBody + +InterfaceMethodModifier: + Annotation + public + private + abstract + default + static + strictfp + +AnnotationInterfaceDeclaration: + {InterfaceModifier} @ interface TypeIdentifier AnnotationInterfaceBody + +AnnotationInterfaceBody: + { {AnnotationInterfaceMemberDeclaration} } + +AnnotationInterfaceMemberDeclaration: + AnnotationInterfaceElementDeclaration + ConstantDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +AnnotationInterfaceElementDeclaration: + {AnnotationInterfaceElementModifier} UnannType Identifier ( ) [Dims] [DefaultValue] ; + +AnnotationInterfaceElementModifier: + Annotation + public + abstract + +DefaultValue: + default ElementValue + +Annotation: + NormalAnnotation + MarkerAnnotation + SingleElementAnnotation + +NormalAnnotation: + @ TypeName ( [ElementValuePairList] ) + +ElementValuePairList: + ElementValuePair {, ElementValuePair} + +ElementValuePair: + Identifier = ElementValue + +ElementValue: + ConditionalExpression + ElementValueArrayInitializer + Annotation + +ElementValueArrayInitializer: + { [ElementValueList] [,] } + +ElementValueList: + ElementValue {, ElementValue} + +MarkerAnnotation: + @ TypeName + +SingleElementAnnotation: + @ TypeName ( ElementValue ) + +ArrayInitializer: + { [VariableInitializerList] [,] } + +VariableInitializerList: + VariableInitializer {, VariableInitializer} + +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} + case null [, default] + case CasePattern [Guard] + default + +CaseConstant: + ConditionalExpression + +CasePattern: + Pattern + +Guard: + when Expression + +WhileStatement: + while ( Expression ) Statement + +WhileStatementNoShortIf: + while ( Expression ) StatementNoShortIf + +DoStatement: + do Statement while ( Expression ) ; + +ForStatement: + BasicForStatement + EnhancedForStatement + +ForStatementNoShortIf: + BasicForStatementNoShortIf + EnhancedForStatementNoShortIf + +BasicForStatement: + for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement + +BasicForStatementNoShortIf: + for ( [ForInit] ; [Expression] ; [ForUpdate] ) StatementNoShortIf + +ForInit: + StatementExpressionList + LocalVariableDeclaration + +ForUpdate: + StatementExpressionList + +StatementExpressionList: + StatementExpression {, StatementExpression} + +EnhancedForStatement: + for ( LocalVariableDeclaration : Expression ) Statement + +EnhancedForStatementNoShortIf: + for ( LocalVariableDeclaration : Expression ) StatementNoShortIf + +BreakStatement: + break [Identifier] ; + +YieldStatement: + yield Expression ; + +ContinueStatement: + continue [Identifier] ; + +ReturnStatement: + return [Expression] ; + +ThrowStatement: + throw Expression ; + +SynchronizedStatement: + synchronized ( Expression ) Block + +TryStatement: + try Block Catches + try Block [Catches] Finally + TryWithResourcesStatement + +Catches: + CatchClause {CatchClause} + +CatchClause: + catch ( CatchFormalParameter ) Block + +CatchFormalParameter: + {VariableModifier} CatchType VariableDeclaratorId + +CatchType: + UnannClassType {| ClassType} + +Finally: + finally Block + +TryWithResourcesStatement: + try ResourceSpecification Block [Catches] [Finally] + +ResourceSpecification: + ( ResourceList [;] ) + +ResourceList: + Resource {; Resource} + +Resource: + LocalVariableDeclaration + VariableAccess + +Pattern: + TypePattern + RecordPattern + +TypePattern: + LocalVariableDeclaration + +RecordPattern: + ReferenceType ( [PatternList] ) + +PatternList: + Pattern {, Pattern } + +Primary: + PrimaryNoNewArray + ArrayCreationExpression + +PrimaryNoNewArray: + Literal + ClassLiteral + this + TypeName . this + ( Expression ) + ClassInstanceCreationExpression + FieldAccess + ArrayAccess + MethodInvocation + MethodReference + +ClassLiteral: + TypeName {[ ]} . class + NumericType {[ ]} . class + boolean {[ ]} . class + void . class + +ClassInstanceCreationExpression: + UnqualifiedClassInstanceCreationExpression + ExpressionName . UnqualifiedClassInstanceCreationExpression + Primary . UnqualifiedClassInstanceCreationExpression + +UnqualifiedClassInstanceCreationExpression: + new [TypeArguments] ClassOrInterfaceTypeToInstantiate ( [ArgumentList] ) [ClassBody] + +ClassOrInterfaceTypeToInstantiate: + {Annotation} Identifier {. {Annotation} Identifier} [TypeArgumentsOrDiamond] + +TypeArgumentsOrDiamond: + TypeArguments + <> + +ArrayCreationExpression: + ArrayCreationExpressionWithoutInitializer + ArrayCreationExpressionWithInitializer + +ArrayCreationExpressionWithoutInitializer: + new PrimitiveType DimExprs [Dims] + new ClassOrInterfaceType DimExprs [Dims] + +ArrayCreationExpressionWithInitializer: + new PrimitiveType Dims ArrayInitializer + new ClassOrInterfaceType Dims ArrayInitializer + +DimExprs: + DimExpr {DimExpr} + +DimExpr: + {Annotation} [ Expression ] + +ArrayAccess: + ExpressionName [ Expression ] + PrimaryNoNewArray [ Expression ] + ArrayCreationExpressionWithInitializer [ Expression ] + +FieldAccess: + Primary . Identifier + super . Identifier + TypeName . super . Identifier + +MethodInvocation: + MethodName ( [ArgumentList] ) + TypeName . [TypeArguments] Identifier ( [ArgumentList] ) + ExpressionName . [TypeArguments] Identifier ( [ArgumentList] ) + Primary . [TypeArguments] Identifier ( [ArgumentList] ) + super . [TypeArguments] Identifier ( [ArgumentList] ) + TypeName . super . [TypeArguments] Identifier ( [ArgumentList] ) + +ArgumentList: + Expression {, Expression} + +MethodReference: + ExpressionName :: [TypeArguments] Identifier + Primary :: [TypeArguments] Identifier + ReferenceType :: [TypeArguments] Identifier + super :: [TypeArguments] Identifier + TypeName . super :: [TypeArguments] Identifier + ClassType :: [TypeArguments] new + ArrayType :: new + +Expression: + LambdaExpression + AssignmentExpression + +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: + = + *= + /= + %= + += + -= + <<= + >>= + >>>= + &= + ^= + |= + +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 + + UnaryExpression + - UnaryExpression + UnaryExpressionNotPlusMinus + +PreIncrementExpression: + ++ UnaryExpression + +PreDecrementExpression: + -- UnaryExpression + +UnaryExpressionNotPlusMinus: + PostfixExpression + ~ UnaryExpression + ! UnaryExpression + CastExpression + SwitchExpression + +PostfixExpression: + Primary + ExpressionName + PostIncrementExpression + PostDecrementExpression + +PostIncrementExpression: + PostfixExpression ++ + +PostDecrementExpression: + PostfixExpression -- + +CastExpression: + ( PrimitiveType ) UnaryExpression + ( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus + ( ReferenceType {AdditionalBound} ) LambdaExpression + +SwitchExpression: + switch ( Expression ) SwitchBlock diff --git a/data/java-8/syntax.grammar b/data/java-8/syntax.grammar new file mode 100644 index 0000000..1f34289 --- /dev/null +++ b/data/java-8/syntax.grammar @@ -0,0 +1,845 @@ +PrimitiveType: + {Annotation} NumericType + {Annotation} boolean + +NumericType: + IntegralType + FloatingPointType + +IntegralType: + byte + short + int + long + char + +FloatingPointType: + float + double + +ReferenceType: + ClassOrInterfaceType + ArrayType + +ClassOrInterfaceType: + ClassType + InterfaceType + +ClassType: + {Annotation} Identifier [TypeArguments] + ClassOrInterfaceType . {Annotation} Identifier [TypeArguments] + +InterfaceType: + ClassType + +ArrayType: + PrimitiveType Dims + ClassOrInterfaceType Dims + +Dims: + {Annotation} [ ] {{Annotation} [ ]} + +TypeParameter: + {TypeParameterModifier} Identifier [TypeBound] + +TypeParameterModifier: + Annotation + +TypeBound: + extends ClassOrInterfaceType {AdditionalBound} + +AdditionalBound: + & InterfaceType + +TypeArguments: + < TypeArgumentList > + +TypeArgumentList: + TypeArgument {, TypeArgument} + +TypeArgument: + ReferenceType + Wildcard + +Wildcard: + {Annotation} ? [WildcardBounds] + +WildcardBounds: + extends ReferenceType + super ReferenceType + +PackageName: + Identifier + PackageName . Identifier + +TypeName: + Identifier + PackageOrTypeName . Identifier + +PackageOrTypeName: + Identifier + PackageOrTypeName . Identifier + +ExpressionName: + Identifier + AmbiguousName . Identifier + +MethodName: + Identifier + +AmbiguousName: + Identifier + AmbiguousName . Identifier + +CompilationUnit: + [PackageDeclaration] {ImportDeclaration} {TypeDeclaration} + +PackageDeclaration: + {PackageModifier} package Identifier {. Identifier} ; + +PackageModifier: + Annotation + +ImportDeclaration: + SingleTypeImportDeclaration + TypeImportOnDemandDeclaration + SingleStaticImportDeclaration + StaticImportOnDemandDeclaration + +SingleTypeImportDeclaration: + import TypeName ; + +TypeImportOnDemandDeclaration: + import PackageOrTypeName . * ; + +SingleStaticImportDeclaration: + import static TypeName . Identifier ; + +StaticImportOnDemandDeclaration: + import static TypeName . * ; + +TypeDeclaration: + ClassDeclaration + InterfaceDeclaration + ; + +ClassDeclaration: + NormalClassDeclaration + EnumDeclaration + +NormalClassDeclaration: + {ClassModifier} class Identifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody + +ClassModifier: + Annotation + public + protected + private + abstract + static + final + strictfp + +TypeParameters: + < TypeParameterList > + +TypeParameterList: + TypeParameter {, TypeParameter} + +Superclass: + extends ClassType + +Superinterfaces: + implements InterfaceTypeList + +InterfaceTypeList: + InterfaceType {, InterfaceType} + +ClassBody: + { {ClassBodyDeclaration} } + +ClassBodyDeclaration: + ClassMemberDeclaration + InstanceInitializer + StaticInitializer + ConstructorDeclaration + +ClassMemberDeclaration: + FieldDeclaration + MethodDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +FieldDeclaration: + {FieldModifier} UnannType VariableDeclaratorList ; + +VariableDeclaratorList: + VariableDeclarator {, VariableDeclarator} + +VariableDeclarator: + VariableDeclaratorId [= VariableInitializer] + +VariableDeclaratorId: + Identifier [Dims] + +VariableInitializer: + Expression + ArrayInitializer + +UnannType: + UnannPrimitiveType + UnannReferenceType + +UnannPrimitiveType: + NumericType + boolean + +UnannReferenceType: + UnannClassOrInterfaceType + UnannArrayType + +UnannClassOrInterfaceType: + UnannClassType + UnannInterfaceType + +UnannClassType: + Identifier [TypeArguments] + UnannClassOrInterfaceType . {Annotation} Identifier [TypeArguments] + +UnannInterfaceType: + UnannClassType + +UnannArrayType: + UnannPrimitiveType Dims + UnannClassOrInterfaceType Dims + +FieldModifier: + Annotation + public + protected + private + static + final + transient + volatile + +MethodDeclaration: + {MethodModifier} MethodHeader MethodBody + +MethodHeader: + Result MethodDeclarator [Throws] + TypeParameters {Annotation} Result MethodDeclarator [Throws] + +MethodDeclarator: + Identifier ( [FormalParameterList] ) [Dims] + +FormalParameterList: + ReceiverParameter + FormalParameters , LastFormalParameter + LastFormalParameter + +FormalParameters: + FormalParameter {, FormalParameter} + ReceiverParameter {, FormalParameter} + +FormalParameter: + {VariableModifier} UnannType VariableDeclaratorId + +VariableModifier: + Annotation + final + +ReceiverParameter: + {Annotation} UnannType [Identifier .] this + +LastFormalParameter: + {VariableModifier} UnannType {Annotation} ... VariableDeclaratorId + FormalParameter + +MethodModifier: + Annotation + public + protected + private + abstract + static + final + synchronized + native + strictfp + +Result: + UnannType + void + +Throws: + throws ExceptionTypeList + +ExceptionTypeList: + ExceptionType {, ExceptionType} + +ExceptionType: + ClassType + +MethodBody: + Block + ; + +InstanceInitializer: + Block + +StaticInitializer: + static Block + +ConstructorDeclaration: + {ConstructorModifier} ConstructorDeclarator [Throws] ConstructorBody + +ConstructorDeclarator: + [TypeParameters] SimpleTypeName ( [FormalParameterList] ) + +SimpleTypeName: + Identifier + +ConstructorModifier: + Annotation + public + protected + private + +ConstructorBody: + { [ExplicitConstructorInvocation] [BlockStatements] } + +ExplicitConstructorInvocation: + [TypeArguments] this ( [ArgumentList] ) ; + [TypeArguments] super ( [ArgumentList] ) ; + ExpressionName . [TypeArguments] super ( [ArgumentList] ) ; + Primary . [TypeArguments] super ( [ArgumentList] ) ; + +EnumDeclaration: + {ClassModifier} enum Identifier [Superinterfaces] EnumBody + +EnumBody: + { [EnumConstantList] [,] [EnumBodyDeclarations] } + +EnumConstantList: + EnumConstant {, EnumConstant} + +EnumConstant: + {EnumConstantModifier} Identifier [( [ArgumentList] )] [ClassBody] + +EnumConstantModifier: + Annotation + +EnumBodyDeclarations: + ; {ClassBodyDeclaration} + +InterfaceDeclaration: + NormalInterfaceDeclaration + AnnotationTypeDeclaration + +NormalInterfaceDeclaration: + {InterfaceModifier} interface Identifier [TypeParameters] [ExtendsInterfaces] InterfaceBody + +InterfaceModifier: + Annotation + public + protected + private + abstract + static + strictfp + +ExtendsInterfaces: + extends InterfaceTypeList + +InterfaceBody: + { {InterfaceMemberDeclaration} } + +InterfaceMemberDeclaration: + ConstantDeclaration + InterfaceMethodDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +ConstantDeclaration: + {ConstantModifier} UnannType VariableDeclaratorList ; + +ConstantModifier: + Annotation + public + static + final + +InterfaceMethodDeclaration: + {InterfaceMethodModifier} MethodHeader MethodBody + +InterfaceMethodModifier: + Annotation + public + abstract + default + static + strictfp + +AnnotationTypeDeclaration: + {InterfaceModifier} @ interface Identifier AnnotationTypeBody + +AnnotationTypeBody: + { {AnnotationTypeMemberDeclaration} } + +AnnotationTypeMemberDeclaration: + AnnotationTypeElementDeclaration + ConstantDeclaration + ClassDeclaration + InterfaceDeclaration + ; + +AnnotationTypeElementDeclaration: + {AnnotationTypeElementModifier} UnannType Identifier ( ) [Dims] [DefaultValue] ; + +AnnotationTypeElementModifier: + Annotation + public + abstract + +DefaultValue: + default ElementValue + +Annotation: + NormalAnnotation + MarkerAnnotation + SingleElementAnnotation + +NormalAnnotation: + @ TypeName ( [ElementValuePairList] ) + +ElementValuePairList: + ElementValuePair {, ElementValuePair} + +ElementValuePair: + Identifier = ElementValue + +ElementValue: + ConditionalExpression + ElementValueArrayInitializer + Annotation + +ElementValueArrayInitializer: + { [ElementValueList] [,] } + +ElementValueList: + ElementValue {, ElementValue} + +MarkerAnnotation: + @ TypeName + +SingleElementAnnotation: + @ TypeName ( ElementValue ) + +ArrayInitializer: + { [VariableInitializerList] [,] } + +VariableInitializerList: + VariableInitializer {, VariableInitializer} + +Block: + { [BlockStatements] } + +BlockStatements: + BlockStatement {BlockStatement} + +BlockStatement: + LocalVariableDeclarationStatement + ClassDeclaration + Statement + +LocalVariableDeclarationStatement: + LocalVariableDeclaration ; + +LocalVariableDeclaration: + {VariableModifier} UnannType VariableDeclaratorList + +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 + +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: + { {SwitchBlockStatementGroup} {SwitchLabel} } + +SwitchBlockStatementGroup: + SwitchLabels BlockStatements + +SwitchLabels: + SwitchLabel {SwitchLabel} + +SwitchLabel: + case ConstantExpression : + case EnumConstantName : + default : + +EnumConstantName: + Identifier + +WhileStatement: + while ( Expression ) Statement + +WhileStatementNoShortIf: + while ( Expression ) StatementNoShortIf + +DoStatement: + do Statement while ( Expression ) ; + +ForStatement: + BasicForStatement + EnhancedForStatement + +ForStatementNoShortIf: + BasicForStatementNoShortIf + EnhancedForStatementNoShortIf + +BasicForStatement: + for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement + +BasicForStatementNoShortIf: + for ( [ForInit] ; [Expression] ; [ForUpdate] ) StatementNoShortIf + +ForInit: + StatementExpressionList + LocalVariableDeclaration + +ForUpdate: + StatementExpressionList + +StatementExpressionList: + StatementExpression {, StatementExpression} + +EnhancedForStatement: + for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement + +EnhancedForStatementNoShortIf: + for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf + +BreakStatement: + break [Identifier] ; + +ContinueStatement: + continue [Identifier] ; + +ReturnStatement: + return [Expression] ; + +ThrowStatement: + throw Expression ; + +SynchronizedStatement: + synchronized ( Expression ) Block + +TryStatement: + try Block Catches + try Block [Catches] Finally + TryWithResourcesStatement + +Catches: + CatchClause {CatchClause} + +CatchClause: + catch ( CatchFormalParameter ) Block + +CatchFormalParameter: + {VariableModifier} CatchType VariableDeclaratorId + +CatchType: + UnannClassType {| ClassType} + +Finally: + finally Block + +TryWithResourcesStatement: + try ResourceSpecification Block [Catches] [Finally] + +ResourceSpecification: + ( ResourceList [;] ) + +ResourceList: + Resource {; Resource} + +Resource: + {VariableModifier} UnannType VariableDeclaratorId = Expression + +Expression: + LambdaExpression + AssignmentExpression + +Primary: + PrimaryNoNewArray + ArrayCreationExpression + +PrimaryNoNewArray: + Literal + ClassLiteral + this + TypeName . this + ( Expression ) + ClassInstanceCreationExpression + FieldAccess + ArrayAccess + MethodInvocation + MethodReference + +ClassLiteral: + TypeName {[ ]} . class + NumericType {[ ]} . class + boolean {[ ]} . class + void . class + +ClassInstanceCreationExpression: + UnqualifiedClassInstanceCreationExpression + ExpressionName . UnqualifiedClassInstanceCreationExpression + Primary . UnqualifiedClassInstanceCreationExpression + UnqualifiedClassInstanceCreationExpression: + new [TypeArguments] ClassOrInterfaceTypeToInstantiate ( [ArgumentList] ) [ClassBody] + ClassOrInterfaceTypeToInstantiate: + {Annotation} Identifier {. {Annotation} Identifier} [TypeArgumentsOrDiamond] + +TypeArgumentsOrDiamond: + TypeArguments + <> + +ArrayCreationExpression: + new PrimitiveType DimExprs [Dims] + new ClassOrInterfaceType DimExprs [Dims] + new PrimitiveType Dims ArrayInitializer + new ClassOrInterfaceType Dims ArrayInitializer + +DimExprs: + DimExpr {DimExpr} + +DimExpr: + {Annotation} [ Expression ] + +ArrayAccess: + ExpressionName [ Expression ] + PrimaryNoNewArray [ Expression ] + +FieldAccess: + Primary . Identifier + super . Identifier + TypeName . super . Identifier + +MethodInvocation: + MethodName ( [ArgumentList] ) + TypeName . [TypeArguments] Identifier ( [ArgumentList] ) + ExpressionName . [TypeArguments] Identifier ( [ArgumentList] ) + Primary . [TypeArguments] Identifier ( [ArgumentList] ) + super . [TypeArguments] Identifier ( [ArgumentList] ) + TypeName . super . [TypeArguments] Identifier ( [ArgumentList] ) + +ArgumentList: + Expression {, Expression} + +MethodReference: + ExpressionName :: [TypeArguments] Identifier + ReferenceType :: [TypeArguments] Identifier + Primary :: [TypeArguments] Identifier + super :: [TypeArguments] Identifier + TypeName . super :: [TypeArguments] Identifier + ClassType :: [TypeArguments] new + ArrayType :: new + +PostfixExpression: + Primary + ExpressionName + PostIncrementExpression + PostDecrementExpression + +PostIncrementExpression: + PostfixExpression ++ + +PostDecrementExpression: + PostfixExpression -- + +UnaryExpression: + PreIncrementExpression + PreDecrementExpression + + UnaryExpression + - UnaryExpression + UnaryExpressionNotPlusMinus + +PreIncrementExpression: + ++ UnaryExpression + +PreDecrementExpression: + -- UnaryExpression + +UnaryExpressionNotPlusMinus: + PostfixExpression + ~ UnaryExpression + ! UnaryExpression + CastExpression + +CastExpression: + ( PrimitiveType ) UnaryExpression + ( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus + ( ReferenceType {AdditionalBound} ) LambdaExpression + +MultiplicativeExpression: + UnaryExpression + MultiplicativeExpression * UnaryExpression + MultiplicativeExpression / UnaryExpression + MultiplicativeExpression % UnaryExpression + +AdditiveExpression: + MultiplicativeExpression + AdditiveExpression + MultiplicativeExpression + AdditiveExpression - MultiplicativeExpression + +ShiftExpression: + AdditiveExpression + ShiftExpression << AdditiveExpression + ShiftExpression >> AdditiveExpression + ShiftExpression >>> AdditiveExpression + +RelationalExpression: + ShiftExpression + RelationalExpression < ShiftExpression + RelationalExpression > ShiftExpression + RelationalExpression <= ShiftExpression + RelationalExpression >= ShiftExpression + RelationalExpression instanceof ReferenceType + +EqualityExpression: + RelationalExpression + EqualityExpression == RelationalExpression + EqualityExpression != RelationalExpression + +AndExpression: + EqualityExpression + AndExpression & EqualityExpression + +ExclusiveOrExpression: + AndExpression + ExclusiveOrExpression ^ AndExpression + +InclusiveOrExpression: + ExclusiveOrExpression + InclusiveOrExpression | ExclusiveOrExpression + +ConditionalAndExpression: + InclusiveOrExpression + ConditionalAndExpression && InclusiveOrExpression + +ConditionalOrExpression: + ConditionalAndExpression + ConditionalOrExpression || ConditionalAndExpression + +ConditionalExpression: + ConditionalOrExpression + ConditionalOrExpression ? Expression : ConditionalExpression + ConditionalOrExpression ? Expression : LambdaExpression + +AssignmentExpression: + ConditionalExpression + Assignment + +Assignment: + LeftHandSide AssignmentOperator Expression + +LeftHandSide: + ExpressionName + FieldAccess + ArrayAccess + +AssignmentOperator: + = + *= + /= + %= + += + -= + <<= + >>= + >>>= + &= + ^= + |= + +LambdaExpression: + LambdaParameters -> LambdaBody + +LambdaParameters: + Identifier + ( [FormalParameterList] ) + ( InferredFormalParameterList ) + +InferredFormalParameterList: + Identifier {, Identifier} + +LambdaBody: + Expression + Block + +ConstantExpression: + Expression -- cgit v1.3