




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課 程 設(shè) 計(jì) 報(bào) 告 設(shè)計(jì)題目:一個(gè)簡(jiǎn)單文法的編譯器前端的設(shè)計(jì)與實(shí)現(xiàn)班 級(jí): 物聯(lián)網(wǎng)1303班組長(zhǎng)學(xué)號(hào):20137704組長(zhǎng)姓名:方俊超指導(dǎo)教師:肖桐設(shè)計(jì)時(shí)間:2014年12月設(shè)計(jì)分工組長(zhǎng)學(xué)號(hào)及姓名:20137704 方俊超分工:語(yǔ)法分析器設(shè)計(jì)實(shí)現(xiàn)組員1學(xué)號(hào)及姓名:20137706 程國(guó)鵬分工:中間代碼生成組員2學(xué)號(hào)及姓名:20137702 郝萌萌分工:掃描器設(shè)計(jì)實(shí)現(xiàn)摘 要本次課程設(shè)計(jì)主要是完成了編譯前端的工作,一個(gè)編譯程序前端的工作過(guò)程一般可以劃分為四個(gè)階段:詞法分析、語(yǔ)法分析、語(yǔ)義分析與中間代碼生成。每個(gè)階段都是從上一個(gè)階段得到結(jié)果,對(duì)他進(jìn)行分析,并且根據(jù)一些外部環(huán)境(例如符號(hào)表等)得到
2、最終的輸出結(jié)果。要構(gòu)造一個(gè)編譯程序,可以按照這樣的階段來(lái)分別構(gòu)造,最后來(lái)連調(diào)。本次課設(shè)的詞法分析主要完成兩個(gè)任務(wù),識(shí)別單詞和翻譯單詞。根據(jù)用戶輸入的源程序,有限自動(dòng)機(jī)所識(shí)別出的對(duì)象完成從單詞串到單詞的TOKEN串的翻譯。語(yǔ)法分析和中間代碼主要采用遞歸下降子程序法。實(shí)現(xiàn)了語(yǔ)法的正確分析,最終生成了四元式序列。關(guān)鍵字:編譯原理,詞法分析,語(yǔ)法分析,中間代碼生成目 錄 摘要1. 概述 2. 課程設(shè)計(jì)任務(wù)及要求 2.1 設(shè)計(jì)任務(wù) 2.2 設(shè)計(jì)要求3. 算法及數(shù)據(jù)結(jié)構(gòu) 3.1算法的總體思想(流程) 3.2詞法分析模塊 3.2.1 功能3.2.2 數(shù)據(jù)結(jié)構(gòu) 3.2.3 算法 3.3 語(yǔ)法分析模塊模塊 3.
3、3.1功能3.3.2 數(shù)據(jù)結(jié)構(gòu) 3.3.3算法 3.4目標(biāo)代碼生成模塊 3.4.1 功能3.4.2 數(shù)據(jù)結(jié)構(gòu) 3.4.3 算法4. 程序設(shè)計(jì)與實(shí)現(xiàn) 4.1 程序流程圖 4.2 程序說(shuō)明 4.3 實(shí)驗(yàn)結(jié)果5. 結(jié)論6. 參考文獻(xiàn)。7. 收獲、體會(huì)和建議。 1. 概 要本次課程設(shè)計(jì)主要是完成了編譯前端的工作,一個(gè)編譯程序前端的工作過(guò)程一般可以劃分為四個(gè)階段:詞法分析、語(yǔ)法分析、語(yǔ)義分析與中間代碼生成。每個(gè)階段都是從上一個(gè)階段得到結(jié)果,對(duì)他進(jìn)行分析,并且根據(jù)一些外部環(huán)境(例如符號(hào)表等)得到最終的輸出結(jié)果。要構(gòu)造一個(gè)編譯程序,可以按照這樣的階段來(lái)分別構(gòu)造,最后來(lái)連調(diào)。本次課設(shè)的詞法分析主要完成兩個(gè)任務(wù)
4、,識(shí)別單詞和翻譯單詞。根據(jù)用戶輸入的源程序,有限自動(dòng)機(jī)所識(shí)別出的對(duì)象完成從單詞串到單詞的TOKEN串的翻譯。語(yǔ)法分析和中間代碼主要采用遞歸下降子程序法。實(shí)現(xiàn)了語(yǔ)法的正確分析,最終生成了四元式序列。2. 課程設(shè)計(jì)任務(wù)及要求2.1設(shè)計(jì)任務(wù)編譯原理課程兼有很強(qiáng)的理論性和實(shí)踐性,是計(jì)算機(jī)專業(yè)的一門非常重要的專業(yè)基礎(chǔ)課程,在系統(tǒng)軟件中占有十分重要的地位。編譯原理課程設(shè)計(jì)是本課程重要的綜合實(shí)踐教學(xué)環(huán)節(jié),是對(duì)平時(shí)實(shí)驗(yàn)的一個(gè)補(bǔ)充。通過(guò)編譯器相關(guān)子系統(tǒng)的設(shè)計(jì),使學(xué)生能夠更好地掌握編譯原理的基本理論和編譯程序構(gòu)造的基本方法和技巧,融會(huì)貫通本課程所學(xué)專業(yè)理論知識(shí);培養(yǎng)學(xué)生獨(dú)立分析問(wèn)題、解決問(wèn)題的能力,以及系統(tǒng)軟件設(shè)
5、計(jì)的能力;培養(yǎng)學(xué)生的創(chuàng)新能力及團(tuán)隊(duì)協(xié)作精神。在下列內(nèi)容中任選其一:1、一個(gè)簡(jiǎn)單文法的編譯器前端的設(shè)計(jì)與實(shí)現(xiàn)。2、一個(gè)簡(jiǎn)單文法的編譯器后端的設(shè)計(jì)與實(shí)現(xiàn)。3、一個(gè)簡(jiǎn)單文法的編譯器的設(shè)計(jì)與實(shí)現(xiàn)。4、自選一個(gè)感興趣的與編譯原理有關(guān)的問(wèn)題加以實(shí)現(xiàn),要求難度相當(dāng)。2.2設(shè)計(jì)要求1、在深入理解編譯原理基本原理的基礎(chǔ)上,對(duì)于選定的題目,以小組為單位,先確定設(shè)計(jì)方案;2、設(shè)計(jì)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu),設(shè)計(jì)每個(gè)模塊的處理流程。要求設(shè)計(jì)合理;3、編程序?qū)崿F(xiàn)系統(tǒng),要求實(shí)現(xiàn)可視化的運(yùn)行界面,界面應(yīng)清楚地反映出系統(tǒng)的運(yùn)行結(jié)果;4、確定測(cè)試方案,選擇測(cè)試用例,對(duì)系統(tǒng)進(jìn)行測(cè)試;5、運(yùn)行系統(tǒng)并要通過(guò)驗(yàn)收,講解運(yùn)行結(jié)果,說(shuō)明系統(tǒng)
6、的特色和創(chuàng)新之處,并回答指導(dǎo)教師的提問(wèn);6、提交課程設(shè)計(jì)報(bào)告。3. 算法及數(shù)據(jù)結(jié)構(gòu)3.1算法的總體思想(流程)1、 詞法分析(1) 掃描器作為獨(dú)立一遍的掃描器 源程序 TOKEN序列 (字符串) (單詞串)(2) 自動(dòng)機(jī)其中:(字母) d(數(shù)字) ?(空格、換符、回車),需要濾掉 (泛指單詞的后繼符) .(表示省略了其他界符的處理)(3) 關(guān)鍵字表單詞編碼program3var4integer5begin6if7else8do9while10end11(4) 界符表界符編碼,13:14;15:=16(17>18)19=20+21*22-23/24<25標(biāo)識(shí)符用編碼1表示,常數(shù)用編碼
7、2表示2、 語(yǔ)法分析3、 中間代碼生成3.2詞法分析模塊3.2.1功能詞法分析模塊主要是在源程序中切出單詞,生成Token序列,為之后語(yǔ)法分析、語(yǔ)義分析做準(zhǔn)備。即(1) 識(shí)別單詞 從用戶的源程序中把單詞分離出來(lái);(2) 翻譯單詞 把單詞轉(zhuǎn)換成機(jī)內(nèi)表示,便于后續(xù)處理。3.2.2 數(shù)據(jù)結(jié)構(gòu)char ch; /當(dāng)前字符char strToken; /當(dāng)前單詞char *keywords =“program”, “procedure”, “begin”,; /關(guān)鍵字表、界符表char ID; /符號(hào)表int Cons; /常數(shù)表struct TokenType int code,value; stru
8、ct TokenType Token; /Token數(shù)組3.2.3算法Step 1: 初始化;Step 2: 濾除空格,讀取第一個(gè)非空字符到ch;Step 3: if (ch是一個(gè)字母) Step 4: 處理關(guān)鍵字或標(biāo)識(shí)符; Step 5: else if (ch是一個(gè)數(shù)字) Step 6: 處理常數(shù); else Step 7: 處理界符或錯(cuò)誤處理;3.3語(yǔ)法分析模塊 3.3.1功能 3.3.2 數(shù)據(jù)結(jié)構(gòu) 3.3.3算法 3.4目標(biāo)代碼生成模塊 3.4.1 功能3.4.2 數(shù)據(jù)結(jié)構(gòu) 3.4.3 算法4. 程序設(shè)計(jì)與實(shí)現(xiàn) 4.1 程序流程圖 4.2 程序說(shuō)明(1) 詞法分析(掃描器)#inclu
9、de<string.h>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<iostream>using namespace std;char *kt9="program","var","integer","begin","if","else","do","while","end",TOK
10、EN120,ch; /kt關(guān)鍵字char*pt13=",",":","",":=","(",">",")","=","+","*","-","/","<" /pt界符typedef struct /存儲(chǔ)標(biāo)識(shí)符char it100;IT;IT it100; /it標(biāo)識(shí)符typedef struct /存儲(chǔ)常數(shù)char ct100
11、; /ct常數(shù)CT;CT ct100;int n,L; /n表示標(biāo)識(shí)符的最后一個(gè)位置 /L表示常數(shù)的最后一個(gè)位置int search(char *TOKEN) /關(guān)鍵字匹配函數(shù) int a,b; for(b=0;b<=9;b+) if(a=strcmp(TOKEN,ktb)=0) return b+4; return 0; int searchit(char *TOKEN) /標(biāo)識(shí)符匹配函數(shù) int a,b; for(b=0;b<n;b+) if(a=strcmp(TOKEN,itb.it)=0) return b; return -1; int searchnum(char *T
12、OKEN) int a,b; /常數(shù)匹配函數(shù) for(b=0;b<L;b+) if( a=strcmp(TOKEN,ctb.ct)=0) return b; return -1;void out(char *TOKEN, int in) /輸出函數(shù) cout<<"("<<TOKEN<<","<<in<<") "void scanner(FILE *fp) /掃描函數(shù) char TOKEN100='0' char ch; int i,c,w,v; ch=f
13、getc(fp); /獲取字符,指針fp并自動(dòng)指向下一個(gè)字符 if(isalpha(ch) /判斷該字符是否是字母 TOKEN0=ch; ch=fgetc(fp); i=1; while(isalnum(ch) /判斷該字符是否是字母或數(shù)字 TOKENi=ch; i+; ch=fgetc(fp); TOKENi='0' c=search(TOKEN); fseek(fp,-1,1); /從當(dāng)前位置開(kāi)始回退一個(gè)字符 if(c=0) v=searchit(TOKEN); if(v=-1) strcpy(itn.it, TOKEN); n+; out(TOKEN,1); else o
14、ut(TOKEN,1); /輸出標(biāo)識(shí)符 else out(TOKEN,c); /輸出關(guān)鍵字 else if(isdigit(ch) /判斷是否是數(shù)字 TOKEN0=ch; ch=fgetc(fp); i=1; while(isdigit(ch) TOKENi=ch; i+; ch=fgetc(fp); if(ch='.') /判斷是否是小數(shù) TOKENi=ch; i+; ch=fgetc(fp); while(isdigit(ch) TOKENi=ch; i+; ch=fgetc(fp); else /不是小數(shù) TOKENi='0' fseek(fp,-1,1)
15、; w=searchnum(TOKEN); if(w=-1) strcpy(ctL.ct, TOKEN); L+; out(TOKEN,2); else out(TOKEN,3); else /不是數(shù)字也不是字符 TOKEN0=ch; switch(ch) case',':out(TOKEN,13); break; case':':out(TOKEN,14); break; case'':out(TOKEN,15); break; case':=':out(TOKEN,16); break; case'(':out
16、(TOKEN,17); break; case'>':out(TOKEN,18); break; case')':out(TOKEN,19); break; case'=':out(TOKEN,20); break; case'+':out(TOKEN,21); break; case'*':out(TOKEN,22); break; case'-':out(TOKEN,23); break; case'/':out(TOKEN,24); break; case'<
17、;':out(TOKEN,25); break; int main() /主函數(shù) FILE *fp; if(fp=fopen("E:hmmsource.txt","r")=NULL) fprintf(stderr,"error opening.n"); exit(1); cout<<"關(guān)鍵字:" /識(shí)別關(guān)鍵字for(int j = 0;j<9;j+)cout<<ktj<<" "cout<<endl; cout<<"
18、;界 符:" /識(shí)別界符 for(int i = 0;i<13;i+) cout<<pti<<" " cout<<endl;cout<<"標(biāo)識(shí)符:" /識(shí)別標(biāo)識(shí)符for (int m=0;m<n;m+)cout << itm.it<<","cout<<endl; cout<<"常 數(shù):" /識(shí)別常數(shù) for (int k=0;k<L;k+) cout <<ctk.ct <<"" cout<<endl; cout<<"掃描結(jié)果:"<<endl ; do ch=fgetc(fp); if(ch=&
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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-2030年手推叉車項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年成套碾米設(shè)備項(xiàng)目商業(yè)計(jì)劃書
- 2025-2030年開(kāi)關(guān)量輸入隔離式安全柵項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年平頭倒棱機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年干式變壓器不銹鋼殼體項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年崗位式軸流通風(fēng)機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年尼龍塑料項(xiàng)目投資價(jià)值分析報(bào)告
- 2025-2030年小學(xué)語(yǔ)文學(xué)習(xí)光盤項(xiàng)目商業(yè)計(jì)劃書
- 鐵路新一代專用移動(dòng)通信電波傳播測(cè)量、建模及應(yīng)用研究
- 小班足球的測(cè)試題及答案
- 2025年春國(guó)開(kāi)學(xué)習(xí)網(wǎng)《形勢(shì)與政策》專題測(cè)驗(yàn)1-5答案
- 2025年皖西衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)參考答案
- (2025春新版本)人教版七年級(jí)生物下冊(cè)全冊(cè)教案
- CNAS-CL01:2018 檢測(cè)和校準(zhǔn)實(shí)驗(yàn)室能力認(rèn)可準(zhǔn)則
- 2025年陜西省西安交大附中中考數(shù)學(xué)一模試卷
- 依法執(zhí)業(yè)與醫(yī)療安全培訓(xùn)課件
- 2025年浙江郵電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)完整版
- 《認(rèn)知行為療法》課件
- B5G-6G,信道,衛(wèi)星SDR 解決方案
- 2025年湖南化工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)完美版
- 2025年浙江寧波市新農(nóng)村數(shù)字電影院線有限公司招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論