服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

mini java编译器(二)


  二、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











|

扫描关注微信公众号