編譯原理實(shí)驗(yàn)一1.doc_第1頁
編譯原理實(shí)驗(yàn)一1.doc_第2頁
編譯原理實(shí)驗(yàn)一1.doc_第3頁
編譯原理實(shí)驗(yàn)一1.doc_第4頁
編譯原理實(shí)驗(yàn)一1.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)2:語法分析程序班級(jí):計(jì)算機(jī)1103 姓名:王靜 學(xué)號(hào):1101308336一、 實(shí)驗(yàn)?zāi)康呐c實(shí)驗(yàn) 1.復(fù)習(xí)上下文無關(guān)文法的基本結(jié)構(gòu)、判斷方法; 2.理解文法存在左遞歸、回溯現(xiàn)象的害處及消除方法,掌握FIRST集、FOLLOW 集的含義、求解方法與用途,掌握LL(1)文法的判斷方法及構(gòu)造技術(shù); 3.掌握預(yù)測(cè)分析法的理論精髓,理解下推自動(dòng)機(jī)的基本概念及運(yùn)行原理; 4.學(xué)會(huì)基于上下文無關(guān)文法構(gòu)造LL(1)預(yù)測(cè)表,并使用Visual C+編寫LL (1)分析器; 5.能利用預(yù)測(cè)分析法,在給定的文法基礎(chǔ)上,分析特定輸入串的語法結(jié)構(gòu), 能判斷其是否合法,并能提取大部分中間信息,以備后續(xù)分析時(shí)使用。二、

2、 實(shí)驗(yàn)儀器與設(shè)備1. 微型電子計(jì)算機(jī)(PC機(jī))。2. 配置Windows 2000及以上版本操作系統(tǒng)。3. 安裝Visual C+6.0或Visual C#2003或Delphi6.0等以上版本的開發(fā)環(huán)境。三、實(shí)驗(yàn)內(nèi)容與步驟 1.實(shí)驗(yàn)內(nèi)容 已知文法GE: EE+T|E-T|T TT*F|T/F|F F(E)|I編寫該文法的LL(1)語法分析程序,用以識(shí)別下面的符號(hào)串:#(i+i)*i-i)/i#12001-90-9e |其它無符號(hào)整數(shù)45367910其他()+-*#8/ 2.實(shí)驗(yàn)步驟(一)準(zhǔn)備工作 回答下面問題,并將分析過程與結(jié)果寫在實(shí)驗(yàn)報(bào)告冊(cè)上。 上述文法GE存在左遞歸嗎?若存在,首先消除左

3、遞歸,得到對(duì)應(yīng)的文法GE; 構(gòu)造文法GE的預(yù)測(cè)分析表(需要先求FIRST、FOLLOW集),并根據(jù)定義, 逐步判斷該文法是否為L(zhǎng)L(1)文法; 基于上述分析表,仿照教材,寫出符號(hào)串#(i+i)*i-i)/i#的詳細(xì)的分析過程。2. 狀態(tài)轉(zhuǎn)換圖12001-90-9e |其它無符號(hào)整數(shù)4536789其他()+-*/3. 實(shí)驗(yàn)步驟 1. 判斷所給出的轉(zhuǎn)換圖能否實(shí)現(xiàn)預(yù)期目的?若有錯(cuò)誤,請(qǐng)加以修正; 2. 嘗試將狀態(tài)圖轉(zhuǎn)換為正則文法; 3. 試寫出無符號(hào)整數(shù)對(duì)應(yīng)的正則表達(dá)式; 4. 根據(jù)上述結(jié)果,構(gòu)造出最簡(jiǎn)的DFA; 5編寫對(duì)應(yīng)的詞法分析程序,并識(shí)別下述符號(hào)串: (23+12)*9-200)/54. 流

4、程圖1. 源程序 FILE *fp;char cbuffer;char *key8=if,else,for,while,do,return,break,continue;char *border6=,;,(,);char *arithmetic4=+,-,*,/;char *relation6=,=,;char *consts20=0,1,2,3,4,5,6,7,8,9;char *label20;int constnum=0,labelnum=0;int search(char searchchar,int wordtype) int i=0; switch (wordtype) case

5、1:for (i=0;i=7;i+) if (strcmp(keyi,searchchar)=0) return(i+1); break; case 2:for (i=0;i=5;i+) if (strcmp(borderi,searchchar)=0) return(i+1); return(0); break; case 3:for (i=0;i=3;i+) if (strcmp(arithmetici,searchchar)=0) return(i+1); return(0); break; case 4:for (i=0;i=5;i+) if (strcmp(relationi,sea

6、rchchar)=0) return(i+1); return(0); break; case 5: for (i=0;i=constnum;i+) if (strcmp(constsi,searchchar)=0) return(i+1); break; case 6:for (i=0;i=labelnum;i+) if (strcmp(labeli,searchchar)=0) return(i+1); labeli-1=(char *)malloc(sizeof(searchchar); strcpy(labeli-1,searchchar); labelnum+; return(i);

7、 break; char alphaprocess(char buffer)/關(guān)鍵字 int atype; int i=-1; char alphatp20; while (isalpha(buffer)|(isdigit(buffer) alphatp+i=buffer; buffer=fgetc(fp); alphatpi+1=0; if (atype=search(alphatp,1) printf(%s t(1,%d)n,alphatp,atype-1);/結(jié)束 else atype=search(alphatp,6); printf(%s t(6,%d)n,alphatp,atype

8、-1); return(buffer);char digitprocess(char buffer)/數(shù)字 int i=-1; char digittp20; int dtype; while (isdigit(buffer) digittp+i=buffer; buffer=fgetc(fp); digittpi+1=0; dtype=search(digittp,5); printf(%s t(5,%d)n,digittp,dtype-1); return(buffer);char otherprocess(char buffer)/其它字符 int i=-1; char othertp2

9、0; int otype,otypetp; othertp0=buffer; othertp1=0; if (otype=search(othertp,3) printf(%s t(3,%d)n,othertp,otype-1); buffer=fgetc(fp); goto out; if (otype=search(othertp,4) buffer=fgetc(fp); othertp1=buffer; othertp2=0; if (otypetp=search(othertp,4) printf(%s t(4,%d)n,othertp,otypetp-1); goto out; el

10、se othertp1=0; printf(%s t(4,%d)n,othertp,otype-1); goto out; if (buffer=:) buffer=fgetc(fp); if (buffer=) printf(:= (2,2)n); buffer=fgetc(fp); goto out; else if (otype=search(othertp,2) printf(%s t(2,%d)n,othertp,otype-1); buffer=fgetc(fp); goto out; if (buffer!=n)&(buffer!= ) printf(%c error,not a wordn,buffer); buffer=fgetc(fp);out: return(buffer);void main() int i; for (i=0;i=20;i+) labeli=NULL; ; if (fp=fopen(message.txt,r)=NULL) printf(error); elsecbuffer = fgetc(fp);while (cbuffer!=EOF) if (isalpha(cbuff

溫馨提示

  • 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. 人人文庫網(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)論