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