《編譯原理》課程設(shè)計報告詞法分析器_第1頁
《編譯原理》課程設(shè)計報告詞法分析器_第2頁
《編譯原理》課程設(shè)計報告詞法分析器_第3頁
《編譯原理》課程設(shè)計報告詞法分析器_第4頁
《編譯原理》課程設(shè)計報告詞法分析器_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、201x-201x學(xué)年第x學(xué)期編譯原理課程設(shè)計報告院 系: 計算機(jī)科學(xué)與技術(shù) 班 級: xx級xx 班 學(xué)生姓名: xxxxxx 學(xué) 號: xxxxxxxx 指導(dǎo)老師: xxxxxx 計算機(jī)科學(xué)與技術(shù)學(xué)院監(jiān)制20xx年x月目錄 1.課程設(shè)計的目的2.課程設(shè)計的內(nèi)容和要求3.問題分析和相關(guān)知識介紹4.設(shè)計思路和關(guān)鍵問題及其解決方案5.測試和結(jié)果分析6.總結(jié)和心得體會附件1:參考文獻(xiàn)附件2:核心源代碼1. 課程設(shè)計的目的(1) 編寫詞法分析器(2) 加深對詞法分析器工作原理的了解和認(rèn)識2.課程設(shè)計的內(nèi)容和要求編寫詞法分析器,詞法分析器能夠識別關(guān)系算符,詞法分析器能夠識別標(biāo)識符和關(guān)鍵字,詞法分析器能

2、夠識別無符號數(shù)。3.問題分析和相關(guān)知識介紹構(gòu)成詞法分析器的一種簡單方法是用狀態(tài)轉(zhuǎn)換圖來描述源語言詞法記號的結(jié)構(gòu),然后手工把這種狀態(tài)轉(zhuǎn)換圖翻譯成為識別詞法記號的程序。詞法分析器的任務(wù)是把構(gòu)成源程序的字符流翻譯成詞法記號流。4.設(shè)計思路和關(guān)鍵問題及其解決方案把自然語言構(gòu)造成正規(guī)式,把正規(guī)式構(gòu)造成有限自動機(jī)nfa,然后根據(jù)子集構(gòu)造法把有限自動機(jī)構(gòu)造成無限自動機(jī)dfa,根據(jù)極小化dfa狀態(tài)數(shù)算法把dfa構(gòu)造成最簡dfa,其次根據(jù)最簡dfa畫出轉(zhuǎn)換表,根據(jù)轉(zhuǎn)換表畫出裝換圖,最后根據(jù)裝換圖就可以編寫詞法分析器。5.測試和結(jié)果分析6.總結(jié)和心得體會通過本次試驗,不僅僅是我學(xué)會了c#基礎(chǔ)知識,而且還是我對詞法

3、分析器有了更深入的認(rèn)識,雖然在編寫詞法分析器過程中遇到了很多困難,例如:c#語言不熟悉,對此法分析器的工作原理分析的不透徹,但在老師和同學(xué)的幫助下,我有了很大的提高,通過不斷的努力最終順利的完成了課程設(shè)計,很感謝幫助我的xx同學(xué)和xx老師。附件1:參考文獻(xiàn) 編譯原理(第2版) 高等教育出版社;c#程序設(shè)計及應(yīng)用教程(第2版) 人民教育出版社。附件2:1code文檔截圖2.程序源代碼using system;using system.collections.generic;using system.text;using system.io;namespace lexicalanalysis cl

4、ass program static string keys = static, true, return, string, length, break, console, writeline, bool, false, ture, void, if, else, while, int, float, for, enum, default, case, double, do ; static list key = new list(); /保存關(guān)鍵字 static list bsf = new list(); /保存標(biāo)識符 static list sz = new list(); /保存數(shù)字

5、static list gx = new list(); /保存關(guān)系運算符 static list ys = new list(); /保存數(shù)字運算符 /數(shù)字,標(biāo)識符,空白,關(guān)系符,運算符 static void main(string args) string date = file.readalllines(d:code.txt); /路徑,并存入data for (int i = 0; i date.length; i+) console.writeline(第 + (i + 1) + 行code: + date.getvalue(i); analysisbyline(datei); /

6、分別輸出存儲在四個list中的string console.writeline(關(guān)鍵字,輸入回車); /輸出所有的關(guān)鍵字 console.readline(); foreach (string id in key) console.writeline(id); console.writeline(標(biāo)識符,輸入回車); /輸出所有的標(biāo)識符 console.readline(); foreach (string id in bsf) console.writeline(id); console.writeline(數(shù)字,輸入回車); /輸出所有的數(shù)字 console.readline(); for

7、each (string id in sz) console.writeline(id); console.writeline(關(guān)系運算符,輸入回車); /輸出所有的關(guān)系運算符 console.readline(); foreach (string id in gx) console.writeline(id); console.writeline(算數(shù)運算符,輸入回車); /輸出所有的算數(shù)運算符 console.readline(); foreach (string id in ys) console.writeline(id); console.writeline(輸入回車退出); con

8、sole.readline(); static void analysisbyline(string code) char a = ; string temp = ; int j = 0; while (j code.length) a = codej; temp = ; if (char.isletter(a) | a = _) /是否為標(biāo)識符 temp = temp + a.tostring(); j+; a = codej; while (char.isletterordigit(a) temp = temp + a.tostring(); j+; a = codej; if (iske

9、y(temp) /console.writeline(保留字:+temp); if (!key.contains(temp) /console.writeline(添加成功); key.add(temp); else /console.writeline(標(biāo)識符:+temp); if (!bsf.contains(temp) /console.writeline(添加成功標(biāo)識符=); bsf.add(temp); else if (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a)

10、temp = temp + a.tostring(); j+; a = codej; /判斷是否是小數(shù) if (a.equals(.) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; /判讀是否是科學(xué)記數(shù)法 if (a.equals(e) | a.equals(e) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a) temp = temp + a

11、.tostring(); j+; a = codej; / console.writeline(數(shù)字:+temp); if (!sz.contains(temp) /console.writeline(添加成功標(biāo)識符=); sz.add(temp); else if (a = ) 待添加的隱藏文字內(nèi)容2 temp = temp + a.tostring(); j+; a = codej; /console.writeline(關(guān)系符+temp); if (!gx.contains(temp) /console.writeline(添加成功標(biāo)識符=); gx.add(temp); else if

12、 (a = =) temp = temp + a.tostring(); j+; a = codej; / console.writeline(關(guān)系符+temp); if (!gx.contains(temp) /console.writeline(添加成功關(guān)系=); gx.add(temp); else if (a = ) temp = temp + a.tostring(); j+; a = codej; if (a = =) temp = temp + a.tostring(); j+; a = codej; / console.writeline(關(guān)系符+temp); if (!gx.

13、contains(temp) /console.writeline(添加成功標(biāo)識符=); gx.add(temp); else if (a = + | a = - | a = / | a = *) temp = temp + a.tostring(); j+; a = codej; /console.writeline(運算符+temp); if (!ys.contains(temp) /console.writeline(添加成功標(biāo)識符=); ys.add(temp ); else j+; /判斷是不是保留字的iskey方法 static bool iskey(string key) bool flag = false; f

溫馨提示

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

最新文檔

評論

0/150

提交評論