Mini Java编译器(二)

80酷酷网    80kuku.com

  编译二、Mini Java的文法
BNF
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 ")"








分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: