版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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í)別程序的編程,加深對詞法原理的理解。二、實(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ù)讀取,否則回退字符,在對應(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é)果測試文件輸入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í)我也對分析問題解決問題有了更深入全面的認(rèn)識(shí)與理解。面對一個(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 空調(diào)安裝工程總包
- 礦山擴(kuò)建延期協(xié)議
- 企業(yè)信用評(píng)級(jí)承諾書
- 員工入職承諾書:項(xiàng)目管理篇
- 停車場清潔工聘用協(xié)議
- 家電回收物流承諾書模板
- 交通運(yùn)輸參股管理要求
- 果園種植培訓(xùn)租賃協(xié)議
- 企業(yè)年金管理與資本市場動(dòng)態(tài)
- 服裝加工物料提升機(jī)租賃合同
- 《康復(fù)輔助器具技術(shù)》復(fù)習(xí)考試題庫(附答案)
- 幼兒園大班剪紙《窗花》課件
- 2022中國大學(xué)排名Excel
- 2023年第一季度思想?yún)R報(bào)(3篇)
- CNAS實(shí)驗(yàn)室評(píng)審不符合項(xiàng)整改報(bào)告
- 工廠圍墻視頻監(jiān)控系統(tǒng)方案及報(bào)價(jià)書
- 方位介詞附習(xí)題及參考答案
- “二十四節(jié)氣”研究性報(bào)告
- 個(gè)人掛靠公司協(xié)議書(大全)
- 危險(xiǎn)化學(xué)品物質(zhì)氮?dú)猓∟2)安全告知卡
- 一年級(jí)數(shù)學(xué)上冊課件《分與合》第2課時(shí)6、7的分與合
評(píng)論
0/150
提交評(píng)論