| Goal | ::= | MainClassDeclaration ( ClassDeclaration )* <EOF> |
| MainClassDeclaration | ::= | "class" <ID> "{" "public" "static" "void" "main" "(" "String" "[" "]" <ID> ")" "{" ( VarDeclaration )* ( Statement )* "}" "}" |
| ClassDeclaration | ::= | "class" <ID> ( "extends" <ID> )? "{" ( FieldDeclaration | MethodDeclaration )* "}" |
| VarDeclaration | ::= | Type <ID> ( "=" Expression )? ";" |
| MethodDeclaration | ::= | "public" Type <ID> "(" ( Type <ID> ( "," Type <ID> )* )? ")" "{" ( VarDeclaration )* ( Statement )* "return" Expression ";" "}" |
| FieldDeclaration | ::= | Type <ID> ";" |
| Type | ::= | Type ( "[" "]" )* |
| | | "boolean" | |
| | | "int" | |
| | | <ID> | |
| Statement | ::= | "{" ( Statement )* "}" |
| | | "if" "(" Expression ")" Statement ( "else" Statement )? | |
| | | "while" "(" Expression ")" Statement | |
| | | "System.out.println" "(" Expression ")" ";" | |
| | | Expression "=" Expression ";" | |
| Expression | ::= | Expression "[" Expression "]" |
| | | Expression ("." <ID>)+ | |
| | | Expression "." <ID> "(" ( Expression ( "," Expression )* )? ")" | |
| | | Expression "||" Expression | |
| | | Expression "&&" Expression | |
| | | Expression "==" Expression | |
| | | Expression "!=" Expression | |
| | | Expression ">" Expression | |
| | | Expression "<" Expression | |
| | | Expression "+" Expression | |
| | | Expression "-" Expression | |
| | | Expression "*" Expression | |
| | | Expression "/" Expression | |
| | | "(" Expression ")" | |
| | | "-" Expression | |
| | | "!" Expression | |
| | | "new" Type "(" ")" | |
| | | "new" Type "[" Expression "]" ( "[" "]" )* | |
| | | <ID> | |
| | | <INT> | |
| | | "true" | |
| | | "false" | |
| | | "this" | |
| | | "null" |