BNF for Java1.5.jj

NON-TERMINALS

CompilationUnit ::= ( PackageDeclaration )? ( ImportDeclaration )* ( TypeDeclaration )* <EOF>
PackageDeclaration ::= "package" Name ";"
ImportDeclaration ::= "import" ( "static" )? Name ( "." "*" )? ";"
Modifiers ::= ( ( "public" | "static" | "protected" | "private" | "final" | "abstract" | "synchronized" | "native" | "transient" | "volatile" | "strictfp" | Annotation ) )*
TypeDeclaration ::= ( ";" | Modifiers ( ClassOrInterfaceDeclaration | EnumDeclaration | AnnotationTypeDeclaration ) )
ClassOrInterfaceDeclaration ::= ( "class" | "interface" ) <IDENTIFIER> ( TypeParameters )? ( ExtendsList )? ( ImplementsList )? ClassOrInterfaceBody
ExtendsList ::= "extends" ClassOrInterfaceType ( "," ClassOrInterfaceType )*
ImplementsList ::= "implements" ClassOrInterfaceType ( "," ClassOrInterfaceType )*
EnumDeclaration ::= "enum" <IDENTIFIER> ( ImplementsList )? EnumBody
EnumBody ::= "{" EnumConstant ( "," EnumConstant )* ( ";" ( ClassOrInterfaceBodyDeclaration )* )? "}"
EnumConstant ::= <IDENTIFIER> ( Arguments )? ( ClassOrInterfaceBody )?
TypeParameters ::= "<" TypeParameter ( "," TypeParameter )* ">"
TypeParameter ::= <IDENTIFIER> ( TypeBound )?
TypeBound ::= "extends" ClassOrInterfaceType ( "&" ClassOrInterfaceType )*
ClassOrInterfaceBody ::= "{" ( ClassOrInterfaceBodyDeclaration )* "}"
ClassOrInterfaceBodyDeclaration ::= ( Initializer | Modifiers ( ClassOrInterfaceDeclaration | EnumDeclaration | ConstructorDeclaration | FieldDeclaration | MethodDeclaration ) | ";" )
FieldDeclaration ::= Type VariableDeclarator ( "," VariableDeclarator )* ";"
VariableDeclarator ::= VariableDeclaratorId ( "=" VariableInitializer )?
VariableDeclaratorId ::= <IDENTIFIER> ( "[" "]" )*
VariableInitializer ::= ( ArrayInitializer | Expression )
ArrayInitializer ::= "{" ( VariableInitializer ( "," VariableInitializer )* )? ( "," )? "}"
MethodDeclaration ::= ( TypeParameters )? ResultType MethodDeclarator ( "throws" NameList )? ( Block | ";" )
MethodDeclarator ::= <IDENTIFIER> FormalParameters ( "[" "]" )*
FormalParameters ::= "(" ( FormalParameter ( "," FormalParameter )* )? ")"
FormalParameter ::= ( "final" )? Type ( "..." )? VariableDeclaratorId
ConstructorDeclaration ::= ( TypeParameters )? <IDENTIFIER> FormalParameters ( "throws" NameList )? "{" ( ExplicitConstructorInvocation )? ( BlockStatement )* "}"
ExplicitConstructorInvocation ::= ( "this" Arguments ";" | ( PrimaryExpression "." )? "super" Arguments ";" )
Initializer ::= ( "static" )? Block
Type ::= ( ReferenceType | PrimitiveType )
ReferenceType ::= ( PrimitiveType ( "[" "]" )+ | ( ClassOrInterfaceType ) ( "[" "]" )* )
ClassOrInterfaceType ::= <IDENTIFIER> ( TypeArguments )? ( "." <IDENTIFIER> ( TypeArguments )? )*
TypeArguments ::= "<" TypeArgument ( "," TypeArgument )* ">"
TypeArgument ::= ( ReferenceType | "?" ( WildcardBounds )? )
WildcardBounds ::= ( "extends" ReferenceType | "super" ReferenceType )
PrimitiveType ::= ( "boolean" | "char" | "byte" | "short" | "int" | "long" | "float" | "double" )
ResultType ::= ( "void" | Type )
Name ::= <IDENTIFIER> ( "." <IDENTIFIER> )*
NameList ::= Name ( "," Name )*
Expression ::= ConditionalExpression ( AssignmentOperator Expression )?
AssignmentOperator ::= ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|=" )
ConditionalExpression ::= ConditionalOrExpression ( "?" Expression ":" Expression )?
ConditionalOrExpression ::= ConditionalAndExpression ( "||" ConditionalAndExpression )*
ConditionalAndExpression ::= InclusiveOrExpression ( "&&" InclusiveOrExpression )*
InclusiveOrExpression ::= ExclusiveOrExpression ( "|" ExclusiveOrExpression )*
ExclusiveOrExpression ::= AndExpression ( "^" AndExpression )*
AndExpression ::= EqualityExpression ( "&" EqualityExpression )*
EqualityExpression ::= InstanceOfExpression ( ( "==" | "!=" ) InstanceOfExpression )*
InstanceOfExpression ::= RelationalExpression ( "instanceof" Type )?
RelationalExpression ::= ShiftExpression ( ( "<" | ">" | "<=" | ">=" ) ShiftExpression )*
ShiftExpression ::= AdditiveExpression ( ( "<<" | RSIGNEDSHIFT | RUNSIGNEDSHIFT ) AdditiveExpression )*
AdditiveExpression ::= MultiplicativeExpression ( ( "+" | "-" ) MultiplicativeExpression )*
MultiplicativeExpression ::= UnaryExpression ( ( "*" | "/" | "%" ) UnaryExpression )*
UnaryExpression ::= ( ( "+" | "-" ) UnaryExpression | PreIncrementExpression | PreDecrementExpression | UnaryExpressionNotPlusMinus )
PreIncrementExpression ::= "++" PrimaryExpression
PreDecrementExpression ::= "--" PrimaryExpression
UnaryExpressionNotPlusMinus ::= ( ( "~" | "!" ) UnaryExpression | CastExpression | PostfixExpression )
CastLookahead ::= ( "(" PrimitiveType | "(" Type "[" "]" | "(" Type ")" ( "~" | "!" | "(" | <IDENTIFIER> | "this" | "super" | "new" | Literal ) )
PostfixExpression ::= PrimaryExpression ( "++" | "--" )?
CastExpression ::= ( "(" Type ")" UnaryExpression | "(" Type ")" UnaryExpressionNotPlusMinus )
PrimaryExpression ::= PrimaryPrefix ( PrimarySuffix )*
MemberSelector ::= "." TypeArguments <IDENTIFIER>
PrimaryPrefix ::= ( Literal | "this" | "super" "." <IDENTIFIER> | "(" Expression ")" | AllocationExpression | ResultType "." "class" | Name )
PrimarySuffix ::= ( "." "this" | "." AllocationExpression | MemberSelector | "[" Expression "]" | "." <IDENTIFIER> | Arguments )
Literal ::= ( <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | BooleanLiteral | NullLiteral )
BooleanLiteral ::= ( "true" | "false" )
NullLiteral ::= "null"
Arguments ::= "(" ( ArgumentList )? ")"
ArgumentList ::= Expression ( "," Expression )*
AllocationExpression ::= ( "new" PrimitiveType ArrayDimsAndInits | "new" ClassOrInterfaceType ( TypeArguments )? ( ArrayDimsAndInits | Arguments ( ClassOrInterfaceBody )? ) )
ArrayDimsAndInits ::= ( ( "[" Expression "]" )+ ( "[" "]" )* | ( "[" "]" )+ ArrayInitializer )
Statement ::= ( LabeledStatement | AssertStatement | Block | EmptyStatement | StatementExpression ";" | SwitchStatement | IfStatement | WhileStatement | DoStatement | ForStatement | BreakStatement | ContinueStatement | ReturnStatement | ThrowStatement | SynchronizedStatement | TryStatement )
AssertStatement ::= "assert" Expression ( ":" Expression )? ";"
LabeledStatement ::= <IDENTIFIER> ":" Statement
Block ::= "{" ( BlockStatement )* "}"
BlockStatement ::= ( LocalVariableDeclaration ";" | Statement | ClassOrInterfaceDeclaration )
LocalVariableDeclaration ::= ( "final" )? Type VariableDeclarator ( "," VariableDeclarator )*
EmptyStatement ::= ";"
StatementExpression ::= ( PreIncrementExpression | PreDecrementExpression | PrimaryExpression ( "++" | "--" | AssignmentOperator Expression )? )
SwitchStatement ::= "switch" "(" Expression ")" "{" ( SwitchLabel ( BlockStatement )* )* "}"
SwitchLabel ::= ( "case" Expression ":" | "default" ":" )
IfStatement ::= "if" "(" Expression ")" Statement ( "else" Statement )?
WhileStatement ::= "while" "(" Expression ")" Statement
DoStatement ::= "do" Statement "while" "(" Expression ")" ";"
ForStatement ::= "for" "(" ( Type <IDENTIFIER> ":" Expression | ( ForInit )? ";" ( Expression )? ";" ( ForUpdate )? ) ")" Statement
ForInit ::= ( LocalVariableDeclaration | StatementExpressionList )
StatementExpressionList ::= StatementExpression ( "," StatementExpression )*
ForUpdate ::= StatementExpressionList
BreakStatement ::= "break" ( <IDENTIFIER> )? ";"
ContinueStatement ::= "continue" ( <IDENTIFIER> )? ";"
ReturnStatement ::= "return" ( Expression )? ";"
ThrowStatement ::= "throw" Expression ";"
SynchronizedStatement ::= "synchronized" "(" Expression ")" Block
TryStatement ::= "try" Block ( "catch" "(" FormalParameter ")" Block )* ( "finally" Block )?
RUNSIGNEDSHIFT ::= ( ">" ">" ">" )
RSIGNEDSHIFT ::= ( ">" ">" )
Annotation ::= ( NormalAnnotation | SingleMemberAnnotation | MarkerAnnotation )
NormalAnnotation ::= "@" Name "(" ( MemberValuePairs )? ")"
MarkerAnnotation ::= "@" Name
SingleMemberAnnotation ::= "@" Name "(" MemberValue ")"
MemberValuePairs ::= MemberValuePair ( "," MemberValuePair )*
MemberValuePair ::= <IDENTIFIER> "=" MemberValue
MemberValue ::= ( Annotation | MemberValueArrayInitializer | ConditionalExpression )
MemberValueArrayInitializer ::= "{" MemberValue ( "," MemberValue )* ( "," )? "}"
AnnotationTypeDeclaration ::= "@" "interface" <IDENTIFIER> AnnotationTypeBody
AnnotationTypeBody ::= "{" ( AnnotationTypeMemberDeclaration )* "}"
AnnotationTypeMemberDeclaration ::= ( Modifiers ( Type <IDENTIFIER> "(" ")" ( DefaultValue )? ";" | ClassOrInterfaceDeclaration | EnumDeclaration | AnnotationTypeDeclaration | FieldDeclaration ) | ( ";" ) )
DefaultValue ::= "default" MemberValue