国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Mini Java編譯器(五)

2019-11-18 14:27:58
字體:
來源:轉載
供稿:網友

  六、系統的設計和實現
這個編譯器是用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圖如下:




 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北京市| 青田县| 靖宇县| 岑巩县| 彭州市| 平阴县| 庆阳市| 湟源县| 淮阳县| 开远市| 宜昌市| 新乡市| 平武县| 巨野县| 东兰县| 桐梓县| 定南县| 呼伦贝尔市| 玉屏| 甘孜县| 苗栗市| 皮山县| 西充县| 井研县| 永靖县| 法库县| 平乐县| 商都县| 宁蒗| 德钦县| 视频| 连州市| 江永县| 重庆市| 婺源县| 石景山区| 黎平县| 大同县| 内乡县| 钟山县| 江北区|