![編譯原理設(shè)計(jì)c語言的詞法分析器_第1頁](http://file4.renrendoc.com/view/3e241d00c51baf0e65538aa302bb0021/3e241d00c51baf0e65538aa302bb00211.gif)
![編譯原理設(shè)計(jì)c語言的詞法分析器_第2頁](http://file4.renrendoc.com/view/3e241d00c51baf0e65538aa302bb0021/3e241d00c51baf0e65538aa302bb00212.gif)
![編譯原理設(shè)計(jì)c語言的詞法分析器_第3頁](http://file4.renrendoc.com/view/3e241d00c51baf0e65538aa302bb0021/3e241d00c51baf0e65538aa302bb00213.gif)
![編譯原理設(shè)計(jì)c語言的詞法分析器_第4頁](http://file4.renrendoc.com/view/3e241d00c51baf0e65538aa302bb0021/3e241d00c51baf0e65538aa302bb00214.gif)
![編譯原理設(shè)計(jì)c語言的詞法分析器_第5頁](http://file4.renrendoc.com/view/3e241d00c51baf0e65538aa302bb0021/3e241d00c51baf0e65538aa302bb00215.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-. z.編譯原理課程設(shè)計(jì)報(bào)告題目:學(xué)院:教師:*:班級(jí):評(píng)分:簽字:-. z.編譯原理課程設(shè)計(jì)一:設(shè)計(jì)c語言的詞法分析器一、實(shí)驗(yàn)?zāi)康牧私飧呒?jí)語言單詞的分類,了解狀態(tài)圖以及如何表示并識(shí)別單詞規(guī)則,掌握狀態(tài)圖到識(shí)別程序的編程,加深對(duì)詞法原理的理解。二、實(shí)驗(yàn)要求了解高級(jí)語言單詞的分類,了解狀態(tài)圖以及如何表示并識(shí)別單詞規(guī)則,掌握狀態(tài)圖到識(shí)別程序的編程。三、實(shí)驗(yàn)設(shè)計(jì)3.1單詞分類及表示3.1.1 C語言的子集分類標(biāo)識(shí)符:以字母開頭的字母數(shù)字串整數(shù)或浮點(diǎn)型。保存字:for,while,do,else,if,static,int,sizeof,break,continue運(yùn)算符:+,-,*,/,%,=,!
2、=,=,=,!,&,&,|;界符:(,),:,;,單詞二元組單詞、單詞自身值單詞標(biāo)識(shí)符1整數(shù)或浮點(diǎn)型2保存字3運(yùn)算符4界符53.2 詞法分析器的設(shè)計(jì)算法設(shè)計(jì)概要設(shè)計(jì)從文件中逐個(gè)讀取字符,只要這五大類的狀態(tài)序列則繼續(xù)讀取,否則回退字符,在對(duì)應(yīng)類別進(jìn)展查找,輸出單元二次組至另一文件夾。狀態(tài)圖設(shè)計(jì)輸入輸出設(shè)計(jì)輸入:通過文件指針從文件中一個(gè)一個(gè)讀取字符輸出:輸出單詞二元組至文件。格式為種別碼,值主要函數(shù)void Getchar(FILE *fp ) /讀入一個(gè)字符void GetBC(FILE *fp)/讀入一個(gè)非空字符void contacat()/連接字符int letter()/判斷是否為字母i
3、nt digit()/判斷是否為字母void retract(FILE *fp,char *c)/回退int reserve (char *k)/處理保存字int sysmbol(identifier *id)/處理標(biāo)識(shí)符,查找符號(hào)表并存放位置假設(shè)沒有則添加int constant(constnumber *con)/存入常數(shù)表,并返回它在常數(shù)表中的位置void Tofile(int num, int val, identifier *id, constnumber *con, FILE *fw)/寫到文件void WordAnalyze(char *k,char *c, char *CODE
4、, identifier *id, constnumber *con, FILE *fp, FILE *fw)/詞法分析函數(shù)四、結(jié)果測(cè)試文件輸入int main() int a=1,b=3; if(a1) b=b-2;輸出結(jié)果:結(jié)論:程序輸出結(jié)果與期望輸出結(jié)果相符。收獲與感想通過我本次課程設(shè)計(jì)掌握了詞法分析器設(shè)計(jì)的根本方法與相關(guān)知識(shí)。詞法分析的關(guān)鍵是明確各類字符的狀態(tài)轉(zhuǎn)換過程。同時(shí)輔助標(biāo)識(shí)符、常量構(gòu)造體與保存字表用于查找返回值。同時(shí)我也對(duì)分析問題解決問題有了更深入全面的認(rèn)識(shí)與理解。面對(duì)一個(gè)大的問題,需要理清解決的步驟再將其分解成小的模塊逐個(gè)解決最后再串聯(lián)在一起,問題就會(huì)變得更容易,思路也會(huì)更加
5、清晰。五、實(shí)驗(yàn)代碼#includeusing namespace std;#define LENGTH 10char ch;char *CODE = identifier,constant,keyword/*保存字*/,+,-,*,/,=,!=,=,=,(,),:,;, ;char *k = for,while,do,else,if,static,int,sizeof,break,continue ;/保存字char token16;/存放處理后的字符串/標(biāo)識(shí)符構(gòu)造體typedef structchar *I256;int len;identifier;typedef structint co
6、nt300;int len;constnumber;/讀入一個(gè)字符void Getchar(FILE *fp ) if (ch = getc(fp) = EOF)e*it(1);/讀入一個(gè)非空字符void GetBC(FILE *fp)while (ch = | ch = n | ch = 9)Getchar(fp);/連接字符void contacat()char * cht = &(ch);strcat_s(token, cht);/判斷是否為字母int letter()returnisalpha(ch);int digit()return isdigit(ch);/回退void retr
7、act(FILE *fp,char *c)int a=ftell(fp);fseek(fp,0,SEEK_SET);fprintf_s(fp, %c, ch);ch = ;fseek(fp, a, SEEK_SET);/處理保存字int reserve (char *k)int i;for (i = 0;i LENGTH;i+)if (strcmp(token, ki) = 0)return (i + 1);return 0;/處理標(biāo)識(shí)符,查找符號(hào)表并存放位置假設(shè)沒有則添加int sysmbol(identifier *id)int i;for (i = 0;i len;i+)if (strc
8、mp(token, id-Ii) = 0)return i + 1;if (id-len 256)cout Iid-len = token;id-len+;return id-len;/數(shù)字字符串轉(zhuǎn)化為整數(shù)int str_to_num()int i=0;int k = tokeni-0;for (i = 1;tokeni != 0;i+)k = k * 10 + tokeni - 0;return k;/存入常數(shù)表,并返回它在常數(shù)表中的位置int constant(constnumber *con)con-contcon-len = str_to_num();con-len+;return c
9、on-len;/寫到文件void Tofile(int num, int val, identifier *id, constnumber *con, FILE *fw)int num_ = num;fprintf_s(fw, (%d,num);if (num = 4)fprintf_s(fw,%s, CODEnum-1);if (num Ival - 1);break;case 2:fprintf_s(fw, %d, con-contval - 1);break;case 3:fprintf_s(fw, %s, kval - 1);break;fprintf_s(fw, )n);void e
10、rror(FILE *fw)cout (Error, ch ) = A&ch = a&ch = z) /分析標(biāo)識(shí)符和保存字/假設(shè)字符為AZ或09,則繼續(xù)讀取while (letter() | digit()contacat();Getchar(fp);retract(fp, c);num = reserve(k);if (num != 0)Tofile(3, num, id, con,fw);elseval = sysmbol(id);Tofile(1, val, id, con,fw);else if (digit()/處理常數(shù)while (digit()contacat();Getchar
11、(fp);retract(fp,c);val = constant(con);Tofile(2, val, id, con,fw);else /分析符號(hào)switch (ch) case:Getchar(fp);if (ch = =)Tofile(11, 0, id, con,fw);elseretract(fp,c);Tofile(10, 0, id, con,fw);break;case=:Getchar(fp);if (ch = =)Tofile(13, 0, id, con,fw);elseretract(fp,c);Tofile(14, 0, id, con,fw);break;cas
12、e!:Getchar(fp);if (ch = =)Tofile(12, 0, id, con,fw);elseerror(fw);break;case+:Tofile(4, 0, id, con,fw);break;case-:Tofile(5, 0, id, con,fw);break;case*:Tofile(6, 0, id, con,fw);break;case/:Tofile(7, 0, id, con, fw);break;case(:Tofile(15, 0, id, con, fw);break;case):Tofile(16, 0, id, con, fw);break;c
13、ase,:Tofile(17, 0, id, con, fw);break;case:Tofile(18, 0, id, con, fw);break;case;:Tofile(19, 0, id, con, fw);break;case:Tofile(20, 0, id, con, fw);break;case:Tofile(21, 0, id, con, fw);break;default:error(fw);int main()char c100 = F:/1.t*t;FILE *fp,*fw;errno_t err;err = fopen_s(&fp, c, r);if (err != 0)printf(Thefile was not openedn);e*it(0);errno_t err1;err1 = fopen_s(&fw, F:/2.t*t, w);if (err1 != 0)printf(Thefile was not openedn);e*it(0);identifier *id=(identifier *)malloc(sizeof(identifier);id-len
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年半導(dǎo)體用石英玻璃材料項(xiàng)目發(fā)展計(jì)劃
- 綠色新能源發(fā)電技術(shù)研發(fā)投資合同
- 機(jī)房服務(wù)外包服務(wù)合同
- Picrinine-Standard-生命科學(xué)試劑-MCE
- Isoflavone-Standard-生命科學(xué)試劑-MCE
- 幼兒繪本綠野仙蹤教案設(shè)計(jì)
- 貸款反擔(dān)保協(xié)合同書
- 2025年鋁鍛壓材項(xiàng)目建議書
- 2025年起動(dòng)腳蹬桿項(xiàng)目合作計(jì)劃書
- 股權(quán)有償轉(zhuǎn)讓協(xié)議
- 各施工階段安全管理的重點(diǎn)及安全保證措施
- 2024年金屬非金屬礦山(地下礦山)安全管理人員考試練習(xí)題(100題)附答案
- 危險(xiǎn)性較大的分部分項(xiàng)工程清單安全管理措施
- 高壓輸電線路質(zhì)量、檢查、驗(yàn)收培訓(xùn)課件
- 泌外品管圈提高口服藥物使用管理的正確率
- 快消品銷售團(tuán)隊(duì)薪酬方案
- 2024年高考真題-政治(重慶卷) 含解析
- 人力資源居間合作協(xié)議范本
- 精裝修工程專項(xiàng)施工方案
- 電動(dòng)車維護(hù)與保養(yǎng)操作手冊(cè)
- 陶藝課程課件
評(píng)論
0/150
提交評(píng)論