
Grammar extracted by Vadim Zaytsev, see the Grammar Zoo entry for details: java/java-4/kooiker/extracted
Source used for this grammar: Taeke Kooiker, java/syntax/*.sdf,  October 2006 [MetaEnv]
Top-sort, CompilationUnits, CompilationUnit, PackageDeclaration, Name, Type, PrimitiveType, NumericType, IntegralType, FloatingPointType, ReferenceType, ClassOrInterfaceType, ArrayType, Identifier, ImportDeclaration, SingleTypeImportDeclaration, TypeImportOnDemandDeclaration, TypeDeclaration, ClassDeclaration, Modifier, Super, ClassType, Interfaces, InterfaceType, ClassBody, ClassBodyDeclaration, ClassMemberDeclaration, FieldDeclaration, VariableDeclarator, VariableDeclaratorId, VariableInitializer, Expression, Primary, PrimaryNoNewArray, Literal, IntegerLiteral, LongLiteral, ClassInstanceCreationExpression, FieldAccess, MethodInvocation, ArrayAccess, ArrayCreationExpression, DimExpr, Dim, DimExprInitialized, ArrayInitializer, StatementExpression, Assignment, LeftHandSide, AssignmentOperator, MethodDeclaration, MethodHeader, MethodRes, MethodDeclarator, FormalParameter, Throws, MethodBody, Block, BlockStatement, LocalVariableDeclarationStatement, LocalVariableDeclaration, Statement, StatementWithoutTrailingSubstatement, EmptyStatement, ExpressionStatement, SwitchStatement, SwitchBlock, SwitchBlockStatementGroup, SwitchLabel, DoStatement, BreakStatement, ContinueStatement, ReturnStatement, SynchronizedStatement, ThrowStatement, TryStatement, CatchClause, Finally, LabeledStatement, IfThenStatement, IfThenElseStatement, StatementNoShortIf, LabeledStatementNoShortIf, WhileStatementNoShortIf, WhileStatement, ForStatement, ForInit, StatementExpressionList, ForUpdate, AssertStatement, StaticInitializer, ConstructorDeclaration, ConstructorDeclarator, SimpleName, ConstructorBody, ExplicitConstructorInvocation, InterfaceDeclaration, ExtendsInterfaces, InterfaceBody, InterfaceMemberDeclaration, ConstantDeclaration, AbstractMethodDeclaration), 1 root (Top-sort), 0 top (—), 15 bottom (DoubleLiteral, StringLiteral, IfThenElseStatementNoShortIf, OctalIntegerLiteral, HexLongLiteral, ForStatementNoShortIf, HexIntegerLiteral, OctalLongLiteral, NullLiteral, BooleanLiteral, CharacterLiteral, FloatingPointLiteral, DecimalIntegerLiteral, DecimalLongLiteral, NatCon).Top-sort ::= CompilationUnits
CompilationUnits ::=
	CompilationUnitCompilationUnit ::= PackageDeclaration ImportDeclaration TypeDeclaration
PackageDeclaration ::= "package" Name ";"
Name ::= Type "." "class"
Name ::= Identifier "." Identifier
Type ::= PrimitiveType
Type ::= ReferenceType
PrimitiveType ::= NumericType
PrimitiveType ::=
	"boolean"NumericType ::= IntegralType
NumericType ::= FloatingPointType
IntegralType ::=
	"byte"IntegralType ::=
	"short"IntegralType ::=
	"int"IntegralType ::=
	"long"IntegralType ::=
	"char"FloatingPointType ::=
	"float"FloatingPointType ::=
	"double"ReferenceType ::= ClassOrInterfaceType
ReferenceType ::= ArrayType
ClassOrInterfaceType ::= Name
ArrayType ::= PrimitiveType "[" "]"
ArrayType ::= Name "[" "]"
ArrayType ::= ArrayType "[" "]"
Identifier ::=
	"@" NatConImportDeclaration ::= SingleTypeImportDeclaration
ImportDeclaration ::= TypeImportOnDemandDeclaration
SingleTypeImportDeclaration ::= "import" Name ";"
TypeImportOnDemandDeclaration ::= "import" Name "." "*" ";"
TypeDeclaration ::= ClassDeclaration
TypeDeclaration ::= InterfaceDeclaration
TypeDeclaration ::=
	";"ClassDeclaration ::= Modifier "class" Identifier Super Interfaces ClassBody
Modifier ::=
	"public"Modifier ::=
	"protected"Modifier ::=
	"private"Modifier ::=
	"static"Modifier ::=
	"abstract"Modifier ::=
	"final"Modifier ::=
	"native"Modifier ::=
	"synchronized"Modifier ::=
	"transient"Modifier ::=
	"volatile"Super ::=
	"extends" ClassTypeClassType ::= ClassOrInterfaceType
Interfaces ::= "implements" InterfaceType "," InterfaceType
InterfaceType ::= ClassOrInterfaceType
ClassBody ::= "{" ClassBodyDeclaration "}"
ClassBodyDeclaration ::= ClassMemberDeclaration
ClassBodyDeclaration ::= StaticInitializer
ClassBodyDeclaration ::= ConstructorDeclaration
ClassBodyDeclaration ::=
	";"ClassBodyDeclaration ::= ClassDeclaration
ClassBodyDeclaration ::= InterfaceDeclaration
ClassMemberDeclaration ::= FieldDeclaration
ClassMemberDeclaration ::= MethodDeclaration
ClassMemberDeclaration ::= Block
FieldDeclaration ::= Modifier Type VariableDeclarator "," VariableDeclarator ";"
VariableDeclarator ::= VariableDeclaratorId
VariableDeclarator ::=
	VariableDeclaratorId "=" VariableInitializerVariableDeclaratorId ::= Identifier
VariableDeclaratorId ::= VariableDeclaratorId "[" "]"
VariableInitializer ::= Expression
VariableInitializer ::= ArrayInitializer
Expression ::= Primary
Expression ::=
	"+" ExpressionExpression ::=
	"-" ExpressionExpression ::=
	"~" ExpressionExpression ::=
	"!" ExpressionExpression ::= "(" PrimitiveType Dim ")" Expression
Expression ::= "(" Type ")" Expression
Expression ::= "(" Name Dim ")" Expression
Expression ::=
	Expression "*" ExpressionExpression ::=
	Expression "/" ExpressionExpression ::=
	Expression "%" ExpressionExpression ::=
	Expression "+" ExpressionExpression ::=
	Expression "-" ExpressionExpression ::=
	Expression "<<" ExpressionExpression ::=
	Expression ">>" ExpressionExpression ::=
	Expression ">>>" ExpressionExpression ::=
	Expression "<" ExpressionExpression ::=
	Expression ">" ExpressionExpression ::=
	Expression "<=" ExpressionExpression ::=
	Expression ">=" ExpressionExpression ::=
	Expression "instanceof" ReferenceTypeExpression ::=
	Expression "==" ExpressionExpression ::=
	Expression "!=" ExpressionExpression ::=
	Expression "&" ExpressionExpression ::=
	Expression "^" ExpressionExpression ::=
	Expression "|" ExpressionExpression ::=
	Expression "&&" ExpressionExpression ::=
	Expression "||" ExpressionExpression ::= Expression "?" Expression ":" Expression
Expression ::= StatementExpression
Expression ::= Assignment
Expression ::=
	"+" ExpressionExpression ::=
	"-" ExpressionExpression ::=
	"~" ExpressionExpression ::=
	"!" ExpressionExpression ::=
	Expression "<" ExpressionExpression ::=
	Expression ">" ExpressionExpression ::=
	Expression "<=" ExpressionExpression ::=
	Expression ">=" ExpressionPrimary ::= PrimaryNoNewArray
Primary ::= ArrayCreationExpression
PrimaryNoNewArray ::= Literal
PrimaryNoNewArray ::=
	"this"PrimaryNoNewArray ::= Name "." "this"
PrimaryNoNewArray ::= "(" Expression ")"
PrimaryNoNewArray ::= ClassInstanceCreationExpression
PrimaryNoNewArray ::= FieldAccess
PrimaryNoNewArray ::= MethodInvocation
PrimaryNoNewArray ::= ArrayAccess
Literal ::= IntegerLiteral
Literal ::= LongLiteral
Literal ::= FloatingPointLiteral
Literal ::= DoubleLiteral
Literal ::= BooleanLiteral
Literal ::= CharacterLiteral
Literal ::= StringLiteral
Literal ::= NullLiteral
IntegerLiteral ::= DecimalIntegerLiteral
IntegerLiteral ::= HexIntegerLiteral
IntegerLiteral ::= OctalIntegerLiteral
LongLiteral ::= DecimalLongLiteral
LongLiteral ::= HexLongLiteral
LongLiteral ::= OctalLongLiteral
ClassInstanceCreationExpression ::= "new" ClassType "(" Expression "," Expression ")"
ClassInstanceCreationExpression ::= "new" ClassType "(" Expression "," Expression ")" ClassBody
FieldAccess ::= Name
FieldAccess ::=
	Primary "." IdentifierFieldAccess ::= "super" "." Identifier
MethodInvocation ::= Name "(" Expression "," Expression ")"
MethodInvocation ::= Primary "." Identifier "(" Expression "," Expression ")"
MethodInvocation ::=
	Primary "." ClassInstanceCreationExpressionMethodInvocation ::= "super" "." Identifier "(" Expression "," Expression ")"
ArrayAccess ::= Name "[" Expression "]"
ArrayAccess ::= PrimaryNoNewArray "[" Expression "]"
ArrayCreationExpression ::= "new" PrimitiveType DimExpr Dim
ArrayCreationExpression ::= "new" ClassOrInterfaceType DimExpr Dim
ArrayCreationExpression ::= "new" PrimitiveType DimExprInitialized ArrayInitializer
ArrayCreationExpression ::= "new" ClassOrInterfaceType DimExprInitialized ArrayInitializer
DimExpr ::= "[" Expression "]"
Dim ::= "[" "]"
DimExprInitialized ::= "[" Expression "]"
ArrayInitializer ::= "{" VariableInitializer "," VariableInitializer "," "}"
StatementExpression ::=
	Expression "++"StatementExpression ::=
	Expression "--"StatementExpression ::=
	"++" ExpressionStatementExpression ::=
	"--" ExpressionStatementExpression ::= Assignment
StatementExpression ::=
	Expression "++"StatementExpression ::=
	Expression "--"StatementExpression ::=
	"++" ExpressionStatementExpression ::=
	"--" ExpressionStatementExpression ::= MethodInvocation
StatementExpression ::= ClassInstanceCreationExpression
Assignment ::= LeftHandSide AssignmentOperator Expression
LeftHandSide ::= FieldAccess
LeftHandSide ::= ArrayAccess
AssignmentOperator ::=
	"="AssignmentOperator ::=
	"*="AssignmentOperator ::=
	"/="AssignmentOperator ::=
	"%="AssignmentOperator ::=
	"+="AssignmentOperator ::=
	"-="AssignmentOperator ::=
	"<<="AssignmentOperator ::=
	">>="AssignmentOperator ::=
	">>>="AssignmentOperator ::=
	"&="AssignmentOperator ::=
	"^="AssignmentOperator ::=
	"|="MethodDeclaration ::= MethodHeader MethodBody
MethodHeader ::= Modifier MethodRes MethodDeclarator Throws
MethodRes ::=
	"void"MethodRes ::= Type
MethodDeclarator ::= Identifier "(" FormalParameter "," FormalParameter ")"
MethodDeclarator ::= MethodDeclarator "[" "]"
FormalParameter ::=
	Modifier Type VariableDeclaratorIdThrows ::= "throws" ClassType "," ClassType
MethodBody ::= Block
MethodBody ::=
	";"Block ::= "{" BlockStatement "}"
BlockStatement ::=
	Modifier LocalVariableDeclarationStatementBlockStatement ::= Statement
LocalVariableDeclarationStatement ::=
	LocalVariableDeclaration ";"LocalVariableDeclaration ::= Type VariableDeclarator "," VariableDeclarator
Statement ::= StatementWithoutTrailingSubstatement
Statement ::= LabeledStatement
Statement ::= IfThenStatement
Statement ::= IfThenElseStatement
Statement ::= WhileStatement
Statement ::= ForStatement
Statement ::= ClassDeclaration
Statement ::= AssertStatement
StatementWithoutTrailingSubstatement ::= Block
StatementWithoutTrailingSubstatement ::= EmptyStatement
StatementWithoutTrailingSubstatement ::= ExpressionStatement
StatementWithoutTrailingSubstatement ::= SwitchStatement
StatementWithoutTrailingSubstatement ::= DoStatement
StatementWithoutTrailingSubstatement ::= BreakStatement
StatementWithoutTrailingSubstatement ::= ContinueStatement
StatementWithoutTrailingSubstatement ::= ReturnStatement
StatementWithoutTrailingSubstatement ::= SynchronizedStatement
StatementWithoutTrailingSubstatement ::= ThrowStatement
StatementWithoutTrailingSubstatement ::= TryStatement
EmptyStatement ::=
	";"ExpressionStatement ::=
	StatementExpression ";"SwitchStatement ::= "switch" "(" Expression ")" SwitchBlock
SwitchBlock ::= "{" SwitchBlockStatementGroup SwitchLabel "}"
SwitchBlockStatementGroup ::= SwitchLabel BlockStatement
SwitchLabel ::= "case" Expression ":"
SwitchLabel ::= "default" ":"
DoStatement ::= "do" Statement "while" "(" Expression ")" ";"
BreakStatement ::= "break" Identifier ";"
ContinueStatement ::= "continue" Identifier ";"
ReturnStatement ::= "return" Expression ";"
SynchronizedStatement ::= "synchronized" "(" Expression ")" Block
ThrowStatement ::= "throw" Expression ";"
TryStatement ::= "try" Block CatchClause
TryStatement ::= "try" Block CatchClause Finally
CatchClause ::= "catch" "(" FormalParameter ")" Block
Finally ::=
	"finally" BlockLabeledStatement ::=
	Identifier ":" StatementIfThenStatement ::= "if" "(" Expression ")" Statement
IfThenElseStatement ::= "if" "(" Expression ")" StatementNoShortIf "else" Statement
StatementNoShortIf ::= StatementWithoutTrailingSubstatement
StatementNoShortIf ::= LabeledStatementNoShortIf
StatementNoShortIf ::= IfThenElseStatementNoShortIf
StatementNoShortIf ::= WhileStatementNoShortIf
StatementNoShortIf ::= ForStatementNoShortIf
LabeledStatementNoShortIf ::=
	Identifier ":" StatementNoShortIfWhileStatementNoShortIf ::= "while" "(" Expression ")" StatementNoShortIf
WhileStatement ::= "while" "(" Expression ")" Statement
ForStatement ::= "for" "(" ForInit ";" Expression ";" ForUpdate ")" Statement
ForInit ::= StatementExpressionList
ForInit ::= LocalVariableDeclaration
StatementExpressionList ::= StatementExpression "," StatementExpression
ForUpdate ::= StatementExpressionList
AssertStatement ::= "assert" Expression ";"
StaticInitializer ::=
	"static" BlockConstructorDeclaration ::= Modifier ConstructorDeclarator Throws ConstructorBody
ConstructorDeclarator ::= SimpleName "(" FormalParameter "," FormalParameter ")"
SimpleName ::= Identifier
ConstructorBody ::= "{" ExplicitConstructorInvocation BlockStatement "}"
ExplicitConstructorInvocation ::= "this" "(" Expression "," Expression ")" ";"
ExplicitConstructorInvocation ::= "super" "(" Expression "," Expression ")" ";"
InterfaceDeclaration ::= Modifier "interface" Identifier ExtendsInterfaces InterfaceBody
ExtendsInterfaces ::= "extends" InterfaceType "," InterfaceType
InterfaceBody ::= "{" InterfaceMemberDeclaration "}"
InterfaceMemberDeclaration ::= ConstantDeclaration
InterfaceMemberDeclaration ::= AbstractMethodDeclaration
InterfaceMemberDeclaration ::= InterfaceDeclaration
InterfaceMemberDeclaration ::= ClassDeclaration
ConstantDeclaration ::= FieldDeclaration
AbstractMethodDeclaration ::=
	MethodHeader ";"