中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 综合文章
Mini Java编译器(三)
作者:未知 时间:2005-07-27 22:32 出处:CSDN 责编:chinaitpower
              摘要:Mini Java编译器(三)

三、属性翻译文法

主类声明(MainClass

<MainClass>    ::=      "class" <Identifier><id_name1>

                                                      @fillMemory<id_name1><id_address>

                                                      @fillTable<id_name1>,<id_address>

                                                  @fillTree<id_name1>

                               "{" "public" "static" "void" "main" "(" "String" "[" "]"

                                <Identifier><id_name2>,<id_belongsTo>=<id_name1>,<id_type>=StringArrayType

                                @fillTable<id_name2>,<id_belongsTo>

                               "{" <PrintStatement> "}" "}"

 

类声明(ClassDeclaration

<ClassDeclaration>      ::=      "class" <Identifier><id_name>

                                           @checkTable<id_name>

                                           @fillMemory<id_name1><id_address>

                                           @fillTable<id_name>,<id_address>

                                                                        @fillTree<node_name>=<id_name>

                                                                        "{" ( VarDeclaration )* ( MethodDeclaration )* "}"

 

类继承声明(ClassExtendsDeclaration

<ClassExtendsDeclaration>      ::=      "class" <Identifier><id_name1>

                                                                                          @checkTable<id_name1>

                                                                                          "extends" <Identifier><id_name2>

                                                                                          @checkTree<id_name2>

                                                                                          @fillMemory<id_name1><id_address>

                                                      @fillTable<id_name1>,<id_name2>,<id_address>

                                                                                          @fillTree<child_name>=<id_name1>,<parent_name>=<id_name2>

                                                                                          "{" ( VarDeclaration )* ( MethodDeclaration )* "}"

 

变量声明(VarDeclaration

<VarDeclaration>   ::=      <Type><id_type>

                                                               <Idetifier><id_name>,<id_belongsTo> “;”

                                                               @checkTable<id_name>,<id_belongsTo>

                                      @fillMemory<id_name><id_address>

                                                               @fillTable<id_name>,<id_type>,<id_belongsTo>,<address>

 

<Type><id_type> ::=      <ArrayType><id_type>=ArrayType

                                      |<BooleanType><id_type>=BooleanType

                                      |<IntegerType><id_type>=IntegerType

 

<VarDeclaration>   ::=      <Type><id_type>=ObjectType

                                      @checkTable<id_type>

                                                               <Idetifier><id_name>,<id_belongsTo> “;”

                                                               @checkTable<id_name>,<id_belongsTo>

                                                               @fillTable<id_name>,<id_type>,<id_belongsTo>

 

方法声明(MethodDeclaration

<MethodDeclaration>         ::=      "public" <Type><id_type>

                                                <Identifier><id_name>,<id_belongsTo>

                                                                                 @checkTable<id_name>,<id_belongsTo>

                                                 @fillMemory<id_name><id_address>

                                                                                 @fillTable<id_name>,<id_type>,<id_belongsTo>,<id_address>

                                                "(" ( <FormalParameterList> )? ")"

                                                 "{" ( <VarDeclaration> )* ( <Statement> )* "return"

                                                 <Expression><exp_type>,<exp_value>

                                                                                 @checkType<id_type>,<exp_type> ";" "}"

 

<Type><id_type>                   ::=      <ArrayType><id_type>=ArrayType

                                                 |<BooleanType><id_type>=BooleanType

                                                 |<IntegerType><id_type>=IntegerType

 

<FormalParameterList>      ::=      <FormalParameter>

                                                 ( <FormalParameterRest> )*

 

<FormalParameter>          ::=      <Type><id_type>

                                                 <Identifier><id_name>,<id_belongsTo>

                                                 @checkTable<id_name>,<id_belongsTo>

                                                                                 @fillTable<id_name>,<id_type>

 

<MethodDeclaration>         ::=      "public" <Type><id_type>=ObjectType

                                                 @checkTable<id_type>

                                                 <Identifier><id_name>,<id_belongsTo>

                                                                                 @checkTable<id_name>,<id_belongsTo>

                                                 @fillMemory<id_name><id_address>

                                                                                 @fillTable<id_name>,<id_type>,<id_belongsTo>,<id_address>

                                                 "(" ( <FormalParameterList> )? ")"

                                                 "{" ( <VarDeclaration> )* ( <Statement> )* "return"

                                                 <Expression><exp_type>,<exp_value>

                                                                                 @checkType<id_type>,<exp_type> ";" "}"

 

<Type><id_type>                   ::=      <ArrayType><id_type>=ArrayType

                                                 |<BooleanType><id_type>=BooleanType

                                                 |<IntegerType><id_type>=IntegerType

 

<FormalParameterList>      ::=      <FormalParameter>

                                                ( <FormalParameterRest> )*

 

<FormalParameter>          ::=      <Type><id_type>=ObjectType

                                                 @checkTable<id_type>

                                                 <Identifier><id_name>,<id_belongsTo>

                                                 @checkTable<id_name>,<id_belongsTo>

                                                                                 @fillMemory<id_name><id_address>

                                                                                 @fillTable<id_name>,<id_type>,<id_address>

 

<FormalParameterRest>    ::=      "," <FormalParameter>

 

赋值语句(AssignmentStatement

<AssignmentStatement>    ::=      <Identifier>id_name @checkTable<id_name><id_type>

                                                 “=” <Expression><exp_type>,<exp_value> “;”

                                                 @checkType<id_type>,<exp_type>

                                                                                 @generateCode<stmt_type>=stmt_assign,<extra_para>

 

数组元素赋值语句(ArrayAssignmentStatement

<ArrayAssignmentStatement>  ::= <Identifier><id_name> @checkTable<id_name><id_type>

                                                 @checkType<id_type>,ArrayType

                                                 "[" <Expression><exp_type1>,<exp_value1>

                                                 @checkType<exp_type1>,IntegerType

                                                 "]" "=" <Expression><exp_type2>,<exp_value2>

                                                 @checkType<exp_type2>,IntegerType ";"

                                                 @generateCode<stmt_type>=stmt_array_assign,<extra_para>

 

if语句(IfStatement

<IfStatement>       :=       "if" "(" <Expression><exp_type>,<exp_value>

                                      @checkType<exp_type>,BooleanType

                                      ")" <Statement> "else" <Statement>

                                      @generateCode<stmt_type>=stmt_if,<extra_para>

 

while语句(WhileStatemen

<WhileStatement>       ::=      "while" "(" <Expression><exp_type>,<exp_value>

                                           @checkType<exp_type>,BooleanType

                                           ")" <Statement>

                                           @generateCode<stmt_type>=stmt_while,<extra_para>

 

打印语句(PrintStatement

<PrintStatement>   ::=      "System.out.println" "("

                                      <Expression><exp_type>,<exp_value>

                                      @checkType<exp_type>,IntegerType

                                                               ")" ";"

                                      @generateCode<stmt_type>=stmt_print,<extra_para>

 

属性及动作解释

动作

动作

作用

@checkTable<id_name>,<id_level>

检查标识符的合法性(遍历符号表)

@checkTable<class_name>

检查类名是否已声明

@checkTable<id_name><id_type>

检查变量是否已声明,若已声明返回变量类型

@checkTable<id_type>

检查类型是否已声明

@fillTable<id_name1>,<id_address>

将标识符插入符号表

@fillTable<child_name>,<parent_name>,<id_address>

将子类插入符号表,同时复制父类的方法和类变量至子类

@fillTable<id_name>,<id_belongsTo>

将标识符插入符号表

@fillTable<id_name>,<id_sort>,<id_level>,<id_type>

将标识符插入符号表

@fillMemory<id_name><id_address>

登记内存,返回地址

@generateCode<stmt_type>,<extra_para>

生成伪代码

@checkType<child_name>,<parent_name>

检查类型合法性(遍历继承树、符号表)

@checkType<id_type>,<exp_type>

检查变量类型与表达式类型是否匹配

@checkTree<child_name>,<parent_name>

检查child_name是否是parent_name的子类(遍历继承树)

@checkTree<class_name>

检查child_name是否已存在于继承树内

@fillTree<child_name>,<parent_name>

child_name插入继承树中parent_name

@fillTree<node_name>

node_name插入继承树中(父类为Object

 

属性

属性

数据类型(针对Java语言)

含义

id_name

String

标识符名称

id_level

int

标识符的层次结构

id_belongsTo

String

所属层次名称,(见附表)

id_address

int

内存地址

stmt_type

int

操作类型(见附表)

class_name

String

类名

extra_para

Object

附加参数

child_name

String