| Goal |
::= |
MainClass ( TypeDeclaration )* <EOF> |
| MainClass |
::= |
"class" Identifier "{" "public" "static" "void" "main" "(" "String" "[" "]" Identifier ")" "{" PrintStatement "}" "}" |
| TypeDeclaration |
::= |
ClassDeclaration |
|
| |
ClassExtendsDeclaration |
| ClassDeclaration |
::= |
"class" Identifier "{" ( VarDeclaration )* ( MethodDeclaration )* "}" |
| ClassExtendsDeclaration |
::= |
"class" Identifier "extends" Identifier "{" ( VarDeclaration )* ( MethodDeclaration )* "}" |
| VarDeclaration |
::= |
Type Identifier ";" |
| MethodDeclaration |
::= |
"public" Type Identifier "(" ( FormalParameterList )? ")" "{" ( VarDeclaration )* ( Statement )* "return" Expression ";" "}" |
| FormalParameterList |
::= |
FormalParameter ( FormalParameterRest )* |
| FormalParameter |
::= |
Type Identifier |
| FormalParameterRest |
::= |
"," FormalParameter |
| Type |
::= |
ArrayType |
|
| |
BooleanType |
|
| |
IntegerType |
|
| |
Identifier |
| ArrayType |
::= |
"int" "[" "]" |
| BooleanType |
::= |
"boolean" |
| IntegerType |
::= |
"int" |
| Statement |
::= |
Block |
|
| |
AssignmentStatement |
|
| |
ArrayAssignmentStatement |
|
| |
IfStatement |
|
| |
WhileStatement |
|
| |
PrintStatement |
| Block |
::= |
"{" ( Statement )* "}" |
| AssignmentStatement |
::= |
Identifier "=" Expression ";" |
| ArrayAssignmentStatement |
::= |
Identifier "[" Expression "]" "=" Expression ";" |
| IfStatement |
::= |
"if" "(" Expression ")" Statement "else" Statement |
| WhileStatement |
::= |
"while" "(" Expression ")" Statement |
| PrintStatement |
::= |
"System.out.println" "(" Expression ")" ";" |
| Expression |
::= |
AndExpression |
|
| |
CompareExpression |
|
| |
PlusExpression |
|
| |
MinusExpression |
|
| |
TimesExpression |
|
| |
ArrayLookup |
|
| |
ArrayLength |
|
| |
MessageSend |
|
| |
PrimaryExpression |
| AndExpression |
::= |
PrimaryExpression "&&" PrimaryExpression |
| CompareExpression |
::= |
PrimaryExpression "<" PrimaryExpression |
| PlusExpression |
::= |
PrimaryExpression "+" PrimaryExpression |
| MinusExpression |
::= |
PrimaryExpression "-" PrimaryExpression |
| TimesExpression |
::= |
PrimaryExpression "*" PrimaryExpression |
| ArrayLookup |
::= |
PrimaryExpression "[" PrimaryExpression "]" |
| ArrayLength |
::= |
PrimaryExpression "." "length" |
| MessageSend |
::= |
PrimaryExpression "." Identifier "(" ( ExpressionList )? ")" |
| ExpressionList |
::= |
Expression ( ExpressionRest )* |
| ExpressionRest |
::= |
"," Expression |
| PrimaryExpression |
::= |
IntegerLiteral |
|
| |
TrueLiteral |
|
| |
FalseLiteral |
|
| |
Identifier |
|
| |
ThisExpression |
|
| |
ArrayAllocationExpression |
|
| |
AllocationExpression |
|
| |
NotExpression |
|
| |
BracketExpression |
| IntegerLiteral |
::= |
<INTEGER_LITERAL> |
| TrueLiteral |
::= |
"true" |
| FalseLiteral |
::= |
"false" |
| Identifier |
::= |
<IDENTIFIER> |
| ThisExpression |
::= |
"this" |
| ArrayAllocationExpression |
::= |
"new" "int" "[" Expression "]" |
| AllocationExpression |
::= |
"new" Identifier "(" ")" |
| NotExpression |
::= |
"!" Expression |
| BracketExpression |
::= |
"(" Expression ")" |