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 ")" |