詞法分析器的面向?qū)ο笤O(shè)計(jì)_第1頁(yè)
詞法分析器的面向?qū)ο笤O(shè)計(jì)_第2頁(yè)
詞法分析器的面向?qū)ο笤O(shè)計(jì)_第3頁(yè)
詞法分析器的面向?qū)ο笤O(shè)計(jì)_第4頁(yè)
詞法分析器的面向?qū)ο笤O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、詞法分析器的面向?qū)ο笤O(shè)計(jì)1. 面向?qū)ο笈c面向過(guò)程思想的區(qū)別2 . 詞法分析程序的設(shè)計(jì)3. 詞法分析程序的代碼樣例面向?qū)ο笏枷肱c面向過(guò)程思想的不同從實(shí)際到抽象。從步驟到角色。從小問(wèn)題到大問(wèn)題。 詞法分析設(shè)計(jì)1.完成適當(dāng)?shù)姆治?.工作陳述3.從這個(gè)工作陳述中收集需求6.確定各個(gè)類的職責(zé)7.確定個(gè)各類如何相互交互8.創(chuàng)建一個(gè)高層模型來(lái)描述要構(gòu)建的系統(tǒng)4.開發(fā)一個(gè)用戶界面原型5.明確類part 1 完成適當(dāng)?shù)姆治鲈~法分析的任務(wù)如下:詞法分析器的主要任務(wù)是讀入源程序的字符,劃分詞素,對(duì)于每類詞素,以token序列的形式輸出。在此基礎(chǔ)上,本次開發(fā)的程序要求可以指出詞法編譯時(shí)候的錯(cuò)誤。part 2 工作陳述

2、一.掃描階段掃描階段需要負(fù)責(zé)完成一些不需要生成詞法單元的簡(jiǎn)單處理二.詞法分析階段處理掃描階段的輸出并生成詞法單元,以及錯(cuò)誤part 3 從這個(gè)工作陳述中收集需求 開發(fā)者需要對(duì)需求有一個(gè)比較明確的認(rèn)識(shí),盡管不必拘泥于具體的細(xì)節(jié),但整個(gè)程序的基本流程需要清晰。這樣才可以對(duì)之后的確定類,確定職責(zé),和確定協(xié)作關(guān)系打下基礎(chǔ)。part 3 從這個(gè)工作陳述中收集需求1.將源文件(source program)打開,將源文件讀入到緩沖區(qū)中2.初始化的時(shí)候建立保留字表3. 壓縮空白字符,檢查字符串,在輸入字符串中找出一個(gè)和某 個(gè)模式匹配的詞素,生成token4.有效識(shí)別詞法錯(cuò)誤,并能夠定位并打印錯(cuò)誤5.打印to

3、ken鏈,完成詞法分析part 4 開發(fā)一個(gè)用戶界面的原型part 5 明確類 確定類的過(guò)程是一個(gè)抽象屬性的過(guò)程,太過(guò)細(xì)節(jié)的類需要?jiǎng)澣ィP(guān)系過(guò)于相似的類需要合并。類需要有屬性有行為,確定類的過(guò)程有點(diǎn)像在數(shù)據(jù)庫(kù)做er圖的過(guò)程,是從現(xiàn)實(shí)送往抽象的一個(gè)過(guò)程。part 5 明確類候選類來(lái)自工作需求中的名詞。以下是我們得到的可能的類列表:詞法分析器 Lexer 源文件 sourceFile字符流 string緩沖區(qū) Buffer空白字符 Blank行號(hào) Line類型 Type語(yǔ)義信息 Seman保留字 Keyword標(biāo)識(shí)符 Identity常量 Constant運(yùn)算符 Operator分界符 Bound

4、aryToken 詞素 lexeme 詞法錯(cuò)誤 ErrorErrorlist 詞法分析 lexutilpart 5 明確類詞法分析器 Lexer詞法分析器是一個(gè)頂層的系統(tǒng),控制著輸入和輸出,需要保留。源文件 sourceFile這個(gè)類掌控著文件,必須保留。緩沖區(qū) Buffer通過(guò)緩沖區(qū)存儲(chǔ)源程序,需要在緩沖區(qū)完成劃分源程序的任務(wù)。所以這個(gè)類也是需要保留的。詞法分析程序作為整個(gè)系統(tǒng)的最關(guān)鍵的部分,我們依然選擇將這個(gè)類保留,以便系統(tǒng)更加清晰。空白字符 Blank空白字符只是一類字符的名稱,太過(guò)于具體,并不能成為一個(gè)類。刪除即可。行號(hào) Line行號(hào)只是token的一個(gè)屬性,并不成為類。不需要保留。類

5、型 Type類型也只是token的一個(gè)屬性。我們需要?jiǎng)h掉它。語(yǔ)義信息 Seman語(yǔ)義信息也只是token的一個(gè)屬性。刪除即可。保留字 Keyword保留字其實(shí)是一類token。標(biāo)識(shí)符 Identity類似保留字,將其劃去。常量 Constant類似保留字,將其劃去。運(yùn)算符 Operator類似保留字,將其劃去。分界符 Boundary類似保留字,將其劃去。Token作為詞法分析器的最終結(jié)果,我們需要將這個(gè)類保留。TokenList 作為整個(gè)系統(tǒng)的輸出,這個(gè)類需要保留Errorlist 同樣的,也作為系統(tǒng)的輸出,需要要留Lexeme 這個(gè)僅僅是一個(gè)中間的結(jié)果,不需要進(jìn)行保留。詞法錯(cuò)誤 Error

6、錯(cuò)誤也是程序的一個(gè)最后結(jié)果。所以錯(cuò)誤類必須被保留。并不是說(shuō)以上舉出的所有名詞都是我們想要的類,需要我們進(jìn)行篩選part 5 明確類詞法分析器 Lexer詞法分析程序 LexUtil文件操作 FileOperate緩沖區(qū) BufferToken Token List詞法錯(cuò)誤 ErrorErrorlist保留類8個(gè)part 6 確定各個(gè)類的職責(zé)責(zé)任包括三個(gè)方面:1.對(duì)象執(zhí)行的動(dòng)作2.對(duì)象持有的信息3.能夠影響到其他對(duì)象的決定part 6 確定各個(gè)類的職責(zé)下面列出各個(gè)類可能的職責(zé):FileOperate打開文件關(guān)閉文件TokenList將構(gòu)建的Token加入序列尾打印Token序列Error打印錯(cuò)誤

7、信息停止運(yùn)行Lexer初始化詞法分析開始詞法分析結(jié)束詞法分析Buffer從文件讀入字符串并以詞素的形式儲(chǔ)存。清空Token設(shè)置/獲取 行號(hào)信息設(shè)置/獲取 類型信息設(shè)置/獲取 語(yǔ)義信息LexUtil 判定常量 判定標(biāo)示符 等ErrorList 加入error 打印Errorpart 7 確定各類如何相互交互時(shí)序圖時(shí)序圖是一種強(qiáng)調(diào)消息時(shí)間順序的交互圖。在時(shí)序圖中,將參與交互的對(duì)象沿著X軸排列,把發(fā)起交互的對(duì)象放在左邊,然后把這些對(duì)象發(fā)送和接受的消息的消息沿Y軸方向按時(shí)間順序從上到下放置,提供了控制流隨時(shí)間推移的清晰的軌跡。part 7 確定各類如何相互交互part 7 確定各類如何相互交互同樣的,

8、在上述時(shí)序圖中可以分析各類之間的交互Lexer 創(chuàng)建 tokenlistlexer 調(diào)用 LexUil Lexertil 調(diào)用 bufferBuffer 讀入 FileBuffer 返回 FileLexertil 創(chuàng)建 tokenToken添加到tokenlistLexer 打印 tokenlistLexer 打印 errorLISTpart 7 確定各類如何相互交互CRC卡片類:lexer職責(zé): 協(xié)作:初始化詞法分析 Tokenlist結(jié)束詞法分析 BufferLexer類的CRC卡part 7 確定各類如何相互交互CRC卡片類:lexutil職責(zé): 協(xié)作:初調(diào)用緩沖區(qū) Buffer生成to

9、ken tokenLexer類的CRC卡part 7 確定各類如何相互交互CRC卡片類:FileOperate職責(zé): 協(xié)作:打開關(guān)閉文件 Lexer返回緩沖區(qū) BuffersourceFile類的CRC卡part 7 確定各類如何相互交互CRC卡片類:Buffer職責(zé): 協(xié)作:讀入字符串 sourceFile返回緩沖區(qū) lexutilBuffer類的CRC卡part 7 確定各類如何相互交互CRC卡片類:tokenlist職責(zé): 協(xié)作:打印tokenlist 加入token tokentokenlist類的CRC卡part 7 確定各類如何相互交互CRC卡片類:Token職責(zé): 協(xié)作:獲取行號(hào)

10、 Buffer獲取類型 Buffer獲取語(yǔ)義 BufferToken類的CRC卡part 8 創(chuàng)建一個(gè)高層模型來(lái)描述要構(gòu)建的系統(tǒng)將類之間的關(guān)系設(shè)計(jì)好之后,我們還差最后一步:通過(guò)CRC卡中包含的信息,將凌亂的CRC卡擺放成我們需要的樣子。即轉(zhuǎn)換成類圖。part 8 創(chuàng)建一個(gè)高層模型來(lái)描述要構(gòu)建的系統(tǒng)代碼生成:定義變量private String filePath = null;private File file = null;private InputStream inputStream = null;private Reader reader =null;private BufferedRea

11、der breader = null;代碼生成:構(gòu)造方法public FileOperate(String filePath)this.filePath = filePath;/* * 如果要強(qiáng)調(diào)文件的后綴 ,可以用下面的方法 * param filePath * param ext */public FileOperate(String filePath,String ext) if(ext = null) ext = new String(mj);if(filePath.endsWith(ext)System.out.println(sucess);this.filePath = file

12、Path;代碼生成:判定存在public boolean isExist(File file)if(file.exists()return true;elsereturn false;代碼生成:打開public boolean open()this.file = new File(this.filePath);if(isExist(file) return true;else return false;代碼生成:讀入public List read() List bufferArea = new ArrayList();String str = null;/如果文件沒有被打開,在這里打開if(

13、this.file = null) this.file = new File(this.filePath);try/如果文件不存在if(isExist(file) this.inputStream = new FileInputStream(file);this.reader = new InputStreamReader(inputStream);this.breader = new BufferedReader(reader);else / TODO 到時(shí)候整體攔截 在GUI界面彈出提示System.out.println(文件不存在);代碼生成:讀入catch(IOException e) / TODO 異常統(tǒng)一處理e.printStackTrace();return bufferArea;代碼生成:關(guān)閉publ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論