|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
六、系统的设计和实现 这个编译器是用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图如下: 返回类别: 教程 上一教程: 今天总算看完了log4j,心情不错!把自己的学习笔记拿出来给大家共享一把 下一教程: J2se5.0 generis新特性 您可以阅读与"Mini Java编译器(五)"相关的教程: · Mini Java编译器(一) · Mini Java编译器(二) · Mini Java编译器(三)??属性翻译文法 · Mini Java编译器(三) · Mini Java编译器(一)??任务概述 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |