网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.使用JSF(Java Server Faces)开.
.Hibernate的一对一关系.
.计算Java日期.
.Java 编译、反编译、反反编译.
.Struts 的安装、配置与运行.
.pop 方法.
.运用Java 5 RowSet新特.
.Java 6.0 操作脚本语言基础.
.也谈面向对象.
.解决运行eclipse内存不足的问题.
.datagrid数据列/模板列/按钮事件.
.事务:在控制之中吗?--附一些高.
.Java中的Annotation解析之二(1).
.(翻译)classpath和环境变量设置.
.为JAVA性能而设计(3).
.java api混排算法.
.正则表达式常用功能—查询 提取 .
.软件最大的追求是什么?.
.轻松从VB转向基于Swing的开发平台.
.IOPCBrowseServerAddressSpace 的.

Mini Java编译器(五)

发表日期:2008-1-5



  六、系统的设计和实现
这个编译器是用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图如下:




 
上一篇:Mini Java编译器(六) 人气:1743
下一篇:Mini Java编译器(四) 人气:1443
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐