Mini Java compiler (II)
Last Update:2017-02-28
Source: Internet
Author: User
Compiling a second, Mini Java grammar
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 ")"