繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> Java技巧及代码 >> Mini Java编译器(二)

Mini Java编译器(二)

2005-01-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:  二、Mini Java的文法 BNF Goal ::= MainClass ( TypeDeclaration )* MainClass ::= "class" Identifier "{" "public" "static" "void" "main" "(" "String" "[" "]" Identifier ")" "{" PrintStatement "}" ...
关键字:编译器 Java Mini

  二、Mini Java的文法

BNF

Goal

::=

MainClass ( TypeDeclaration )*

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

::=

TrueLiteral

::=

"true"

FalseLiteral

::=

"false"

Identifier

::=

ThisExpression

::=

"this"

ArrayAllocationExpression

::=

"new" "int" "[" Expression "]"

AllocationExpression

::=

"new" Identifier "(" ")"

NotExpression

::=

"!" Expression

BracketExpression

::=

"(" Expression ")"

责任编辑:admin
相关文章