Mini Java编译器(二)——语法(BNF)

类别:Java 点击:0 评论:0 推荐:
二、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 ")"



(待续)

本文地址:http://com.8s8s.com/it/it11466.htm