/***************************************** * THE JAVA LANGUAGE GRAMMAR STARTS HERE * *****************************************/ /* * Program structuring syntax follows. */
CompilationUnit | ::= | ( PackageDeclaration )? ( ImportDeclaration )* ( TypeDeclaration )* <EOF> |
PackageDeclaration | ::= | "package" Name ";" |
ImportDeclaration | ::= | "import" Name ( "." "*" )? ";" |
TypeDeclaration | ::= | ClassDeclaration |
| | InterfaceDeclaration | |
| | ";" |
/* * Declaration syntax follows. */
ClassDeclaration | ::= | ( "abstract" | "final" | "public" )* UnmodifiedClassDeclaration |
UnmodifiedClassDeclaration | ::= | "class" <IDENTIFIER> ( "extends" Name )? ( "implements" NameList )? ClassBody |
ClassBody | ::= | "{" ( ClassBodyDeclaration )* "}" |
NestedClassDeclaration | ::= | ( "static" | "abstract" | "final" | "public" | "protected" | "private" )* UnmodifiedClassDeclaration |
ClassBodyDeclaration | ::= | Initializer |
| | NestedClassDeclaration | |
| | NestedInterfaceDeclaration | |
| | ConstructorDeclaration | |
| | MethodDeclaration | |
| | FieldDeclaration |
// This production is to determine lookahead only.
MethodDeclarationLookahead | ::= | ( "public" | "protected" | "private" | "static" | "abstract" | "final" | "native" | "synchronized" )* ResultType <IDENTIFIER> "(" |
InterfaceDeclaration | ::= | ( "abstract" | "public" )* UnmodifiedInterfaceDeclaration |
NestedInterfaceDeclaration | ::= | ( "static" | "abstract" | "final" | "public" | "protected" | "private" )* UnmodifiedInterfaceDeclaration |
UnmodifiedInterfaceDeclaration | ::= | "interface" <IDENTIFIER> ( "extends" NameList )? "{" ( InterfaceMemberDeclaration )* "}" |
InterfaceMemberDeclaration | ::= | NestedClassDeclaration |
| | NestedInterfaceDeclaration | |
| | MethodDeclaration | |
| | FieldDeclaration |
FieldDeclaration | ::= | ( "public" | "protected" | "private" | "static" | "final" | "transient" | "volatile" )* Type VariableDeclarator ( "," VariableDeclarator )* ";" |
VariableDeclarator | ::= | VariableDeclaratorId ( "=" VariableInitializer )? |
VariableDeclaratorId | ::= | <IDENTIFIER> ( "[" "]" )* |
VariableInitializer | ::= | ArrayInitializer |
| | Expression |
ArrayInitializer | ::= | "{" ( VariableInitializer ( "," VariableInitializer )* )? ( "," )? "}" |
MethodDeclaration | ::= | ( "public" | "protected" | "private" | "static" | "abstract" | "final" | "native" | "synchronized" )* ResultType MethodDeclarator ( "throws" NameList )? ( Block | ";" ) |
MethodDeclarator | ::= | <IDENTIFIER> FormalParameters ( "[" "]" )* |
FormalParameters | ::= | "(" ( FormalParameter ( "," FormalParameter )* )? ")" |
FormalParameter | ::= | ( "final" )? Type VariableDeclaratorId |
ConstructorDeclaration | ::= | ( "public" | "protected" | "private" )? <IDENTIFIER> FormalParameters ( "throws" NameList )? "{" ( ExplicitConstructorInvocation )? ( BlockStatement )* "}" |
ExplicitConstructorInvocation | ::= | "this" Arguments ";" |
| | ( PrimaryExpression "." )? "super" Arguments ";" |
Initializer | ::= | ( "static" )? Block |
/* * Type, name and expression syntax follows. */
Type | ::= | ( PrimitiveType | Name ) ( "[" "]" )* |
PrimitiveType | ::= | "boolean" |
| | "char" | |
| | "byte" | |
| | "short" | |
| | "int" | |
| | "long" | |
| | "float" | |
| | "double" |
ResultType | ::= | "void" |
| | Type |
Name | ::= | <IDENTIFIER> ( "." <IDENTIFIER> )* |
NameList | ::= | Name ( "," Name )* |
/* * Expression syntax follows. */
Expression | ::= | ConditionalExpression ( AssignmentOperator Expression )? |
AssignmentOperator | ::= | "=" |
| | "*=" | |
| | "/=" | |
| | "%=" | |
| | "+=" | |
| | "-=" | |
| | "<<=" | |
| | ">>=" | |
| | ">>>=" | |
| | "&=" | |
| | "^=" | |
| | "|=" |
ConditionalExpression | ::= | ConditionalOrExpression ( "?" Expression ":" ConditionalExpression )? |
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 ( ( "<<" | ">>" | ">>>" ) AdditiveExpression )* |
AdditiveExpression | ::= | MultiplicativeExpression ( ( "+" | "-" ) MultiplicativeExpression )* |
MultiplicativeExpression | ::= | UnaryExpression ( ( "*" | "/" | "%" ) UnaryExpression )* |
UnaryExpression | ::= | ( "+" | "-" ) UnaryExpression |
| | PreIncrementExpression | |
| | PreDecrementExpression | |
| | UnaryExpressionNotPlusMinus |
PreIncrementExpression | ::= | "++" PrimaryExpression |
PreDecrementExpression | ::= | "--" PrimaryExpression |
UnaryExpressionNotPlusMinus | ::= | ( "~" | "!" ) UnaryExpression |
| | CastExpression | |
| | PostfixExpression |
// This production is to determine lookahead only. The LOOKAHEAD specifications // below are not used, but they are there just to indicate that we know about // this.
CastLookahead | ::= | "(" PrimitiveType |
| | "(" Name "[" "]" | |
| | "(" Name ")" ( "~" | "!" | "(" | <IDENTIFIER> | "this" | "super" | "new" | Literal ) |
PostfixExpression | ::= | PrimaryExpression ( "++" | "--" )? |
CastExpression | ::= | "(" Type ")" UnaryExpression |
| | "(" Type ")" UnaryExpressionNotPlusMinus |
PrimaryExpression | ::= | PrimaryPrefix ( PrimarySuffix )* |
PrimaryPrefix | ::= | Literal |
| | "this" | |
| | "super" "." <IDENTIFIER> | |
| | "(" Expression ")" | |
| | AllocationExpression | |
| | ResultType "." "class" | |
| | Name |
PrimarySuffix | ::= | "." "this" |
| | "." AllocationExpression | |
| | "[" 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" Name ( ArrayDimsAndInits | Arguments ( ClassBody )? ) |
/* * The third LOOKAHEAD specification below is to parse to PrimarySuffix * if there is an expression between the "[...]". */
ArrayDimsAndInits | ::= | ( "[" Expression "]" )+ ( "[" "]" )* |
| | ( "[" "]" )+ ArrayInitializer |
/* * Statement syntax follows. */
Statement | ::= | LabeledStatement |
| | Block | |
| | EmptyStatement | |
| | StatementExpression ";" | |
| | SwitchStatement | |
| | IfStatement | |
| | WhileStatement | |
| | DoStatement | |
| | ForStatement | |
| | BreakStatement | |
| | ContinueStatement | |
| | ReturnStatement | |
| | ThrowStatement | |
| | SynchronizedStatement | |
| | TryStatement |
LabeledStatement | ::= | <IDENTIFIER> ":" Statement |
Block | ::= | "{" ( BlockStatement )* "}" |
BlockStatement | ::= | LocalVariableDeclaration ";" |
| | Statement | |
| | UnmodifiedClassDeclaration | |
| | UnmodifiedInterfaceDeclaration |
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" "(" ( 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 )? |