六、系统的设计和实现
这个编译器是用Java写的,基于OO技术,所以整个系统是尽量用OOD设计的。OOD中最小的设计粒度是类,本系统的大致类结构如下
compiler包
整个系统的根,UML图如下:
token包
封装了所有的可识别单词,采用一符一码,单词对应的码定义在Token类中,该类是抽象类,仅作继承用。该包UML图如下:
common包
公用包,封装了一些公用的对象和数据结构:
HierarchyTree类和HierarchyTreeNode类定义了继承树结构;
MemoryTable类和MemoryCell类定义了需要内存分配表;
Locatable接口和Locator类定义了定位器;
TokenTable定义了符号表;
继承树(HierarchyTreeNode和HierarchyTree)
封装类之间的继承属性,数据机构上使用一棵N叉双向树,可以由父节点直接访问子节点,也可以由子节点直接访问父节点。
Java不支持多继承,Mini Java连接口继承(implements)也不支持,所以每个子节点只有一个父节点,而一个父节点可以有N个子节点。
虽然Mini Java规范中没有明确定义,但实现上仿照Java将Object类作为继承树的根节点。
具体实现时定义了一棵“伪树”,即存储结构为表,但以附加的level属性区分父节点与叶结点。
HierarchyTreeNode封装了节点,HierarchyTree则封装了和树有关的一些操作(插入、查找)。
符号表(TokenTable和Identifier)
因为只有以下几种情况会出现“标识符已定义”、“类已定义”或“方法已定义”语法错误:
同一个文件中声明了相同名称的类
同一个类中声明了相同名称的方法
同一个类中声明了相同名称的类变量
同一个方法中声明了相同名称的变量
方法中声明了与方法参数名称相同的变量
因此我在实现时修改了符号表的内容,去掉了“level”属性,增加了“belongsTo”属性,具体定义见第三部分的id_belongsTo表。
common包的UML图如下:
automation包
封装了词法分析器和语法分析器,UML图如下:
exception包
封装了所有可抛出的异常,UML图如下:
identifier包
封装了所有标识符类别,实现Typable接口的类具有类型属性,UML图如下:
type包
封装了所有类型,在Type抽象类中提供factory()方法,使用简单工厂(Simple Factory)模式生成类型对象,UML图如下:
ui包
封装用户界面
ClassTreeModel
继承自javax.swing.tree.TreeModel,可将继承树的内容显示在图形界面中
TokenTableModel
继承自javax.swing.table.AbstractTableModel,可符号表的内容显示在图形界面中
MemoryTableModel
继承自javax.swing.table.AbstractTableModel,可内存分配表的内容显示在图形界面中
UML图如下:
Web: http://www.qqread.com/java/2006/10/z227154.html
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Java环境安装配置 (5571篇文章)
- Java编程开发手册 (8196篇文章)
- 125条常见的java面试笔试题大汇总 (23470次浏览)
- 十四种Java开发工具点评 (16011次浏览)
- JAVA中配置环境变量设置方法大全 (14586次浏览)
- 论Java外观模式 (1091次浏览)
- 英文打字练习 (718次浏览)
- Java编程十大典型问题详解(1) (637次浏览)
- Java路径问题最终解决方案 (598次浏览)
- Ruby,Java的劲敌 (582次浏览)
- Java学习从入门到精通(附FAQ)2 (579次浏览)
- JAVA高手解析XML配置文件的读取操作 (568次浏览)



