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

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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

(待续)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有