快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Mini Java编译器(五)

六、系统的设计和实现
这个编译器是用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编译器(一)??任务概述
    微笑服务 优质保证 索取样品