服务热线:13616026886

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

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

mini java编译器(二)――语法(bnf)


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



(待续)

扫描关注微信公众号