實(shí)驗(yàn)二語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
實(shí)驗(yàn)二語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
實(shí)驗(yàn)二語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
實(shí)驗(yàn)二語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
實(shí)驗(yàn)二語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)二 語(yǔ)法分析程序設(shè)計(jì)與實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康娜芜x一種有代表性的語(yǔ)法分析方法,如算符優(yōu)先法、遞歸下降法、LL(1)、SLR(1)、LR(1)等,通過(guò)設(shè)計(jì)、編制、調(diào)試實(shí)現(xiàn)一個(gè)典型的語(yǔ)法分析程序,對(duì)實(shí)驗(yàn)一所得掃描器提供的單詞序列進(jìn)行語(yǔ)法檢查和結(jié)構(gòu)分析,實(shí)現(xiàn)并進(jìn)一步掌握常用的語(yǔ)法分析方法。二、基本實(shí)驗(yàn)內(nèi)容與要求選擇對(duì)各種常見高級(jí)程序設(shè)計(jì)語(yǔ)言都較為通用的語(yǔ)法結(jié)構(gòu)算術(shù)表達(dá)式的一個(gè)簡(jiǎn)化子集作為分析對(duì)象,根據(jù)如下描述其語(yǔ)法結(jié)構(gòu)的BNF定義G2,任選一種學(xué)過(guò)的語(yǔ)法分析方法,針對(duì)運(yùn)算對(duì)象為無(wú)符號(hào)常數(shù)和變量的四則運(yùn)算,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)語(yǔ)法分析程序。G2: | + | - | * | / | ()若將語(yǔ)法范疇、和分別用E

2、、T、F和i代表,則G2可寫成:G2E:E T | E+T | E-T T F | T*F | T/F F i | (E)輸入:由實(shí)驗(yàn)一輸出的單詞串,例如:UCON,PL,UCON,MU,ID 輸出:若輸入源程序中的符號(hào)串是給定文法的句子,則輸出“RIGHT”,并且給出每一步分析過(guò)程;若不是句子,即輸入串有錯(cuò)誤,則輸出“ERROR”,并且顯示分析至此所得的中間結(jié)果,如分析棧、符號(hào)棧中的信息等,以及必要的出錯(cuò)說(shuō)明信息。要求:1、確定語(yǔ)法分析程序的流程圖,同時(shí)考慮相應(yīng)的數(shù)據(jù)結(jié)構(gòu),編寫一個(gè)語(yǔ)法分析源程序。2、將詞法、語(yǔ)法分析合在一起構(gòu)成一個(gè)完整的程序,并調(diào)試成功。3、 供測(cè)試的例子應(yīng)包括符合語(yǔ)法規(guī)則

3、的語(yǔ)句,及分析程序能判別的若干錯(cuò)例。對(duì)于所輸入的字符串,不論對(duì)錯(cuò),都應(yīng)有明確的信息輸出。三、問(wèn)題分析及源程序LL1文法:改寫文法為:E- TG e G +TG gT- FS tF- -TG g1G- g2S- *FS sT- /FS s1S- s2F- (E) fG- i f1分析表:i+-*/()#EeeGgg1g2g2TttSs2s2ss1s2s2Ff1fLL1源程序#include#include #include#includechar A30; /*分析棧*/char B30; /*剩余串*/char v120=i,+,-,*,/,(,),#; /*終結(jié)符*/char v220=E,

4、G,T,S,F; /*非終結(jié)符*/ int j=0,b=0,top=0,l; /*L為輸入串長(zhǎng)度*/class type /*產(chǎn)生式類型定義*/public:char origin; /*大寫字符*/char array5; /*產(chǎn)生式右邊字符 */int length; /*字符個(gè)數(shù)*/;type e,t,g,g1,g2,s,s1,s2,f,f1; /*類對(duì)象*/type C1010; /*預(yù)測(cè)分析表*/void print() /*輸出分析棧*/int a;for(a=0;a=top+1;a+)coutAa;couttt;void print1() /*輸出剩余串*/int j;for(j

5、=0;jb;j+) /*輸出對(duì)齊符*/cout ;for(j=b;j=l;j+)coutBj;coutttt;void main()int m,n,k=0,flag=0,finish=0;char ch,x;type cha; /*用來(lái)接受Cmn*/*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/e.origin=E;strcpy(e.array,TG);e.length=2;t.origin=T;strcpy(t.array,FS);t.length=2;g.origin=G;strcpy(g.array,+TG);g.length=3;g1.origin=G;strcpy(g1.array,-TG);g1.l

6、ength=3;g2.origin=G;g2.array0=;g2.length=1; s.origin=S;strcpy(s.array,*FS);s.length=3;s1.origin=S;strcpy(s1.array,/FS);s1.length=3;s2.origin=S;s2.array0=;s2.length=1;f.origin=F;strcpy(f.array,(E);f.length=3;f1.origin=F;f1.array0=i;f1.length=1;for(m=0;m=4;m+) /*初始化分析表*/for(n=0;n=7;n+)Cmn.origin=N; /*

7、全部賦為空*/ /*填充分析表*/ C00=e;C05=e; C11=g;C12=g1;C16=g2;C17=g2; C20=t;C25=t; C31=s2;C32=s2;C33=s;C34=s1;C36=s2;C37=s2; C40=f1;C45=f; cout提示:本程序只能對(duì)由i,+,-,*,/,(,)構(gòu)成的以#結(jié)束的字符串進(jìn)行分析,n; coutch; if (ch!=i) &(ch!=+)&(ch!=-)&(ch!=*)&(ch!=/)&(ch!=()&(ch!=)&(ch!=#) cout輸入串中有非法字符n; exit(1); /強(qiáng)制退出程序 Bj=ch; j+; while(c

8、h!=#); l=j;/*分析串長(zhǎng)度*/ ch=B0;/*當(dāng)前分析字符*/ Atop=#; A+top=E;/*#,E進(jìn)棧*/ cout步驟tt分析棧 tt剩余字符 tt所用產(chǎn)生式 n; do x=Atop-;/*x為當(dāng)前棧頂字符*/ coutk+; couttt; for(j=0;j=7;j+)/*判斷是否為終結(jié)符*/ if(x=v1j) flag=1; break; if(flag=1)/*如果是終結(jié)符*/ if(x=#) finish=1;/*結(jié)束標(biāo)記*/ coutacc!endl;/*接受 */ getchar(); exit(1); /退出程序 /*if*/ if(x=ch) pri

9、nt(); print1(); cout匹配endl; ch=B+b;/*下一個(gè)輸入字符*/ flag=0;/*恢復(fù)標(biāo)記*/ else/*出錯(cuò)處理*/ print(); print1(); cout出錯(cuò)endl;/*輸出出錯(cuò)終結(jié)符*/ exit(1); else/*非終結(jié)符處理*/ for(j=0;j=4;j+)if(x=v2j)m=j;/*行號(hào)*/break; for(j=0;j=7;j+)if(ch=v1j)n=j;/*列號(hào)*/break; cha=Cmn; if(cha.origin!=N)/*判斷是否為空*/ print();print1();coutcha.origin; /*輸出產(chǎn)生式*/for(j=0;jcha.length;j+) coutcha.arrayj;c

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論