實(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è),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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等,通過設(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定義G2v算術(shù)表達(dá)式,任選一種學(xué)過的語(yǔ)法分析方法,針對(duì)運(yùn)算對(duì)象為無符號(hào)常數(shù)和變 量的四則運(yùn)算,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)語(yǔ)法分析程序。G2算術(shù)表達(dá)式:算術(shù)表達(dá)式7 項(xiàng) I 算術(shù)表達(dá)式+項(xiàng)

2、 | 算術(shù)表達(dá)式-項(xiàng)項(xiàng) 7 因式 | 項(xiàng)*因式 | 項(xiàng)/因式因式7 運(yùn)算對(duì)象 | (算術(shù)表達(dá)式)若將語(yǔ)法范疇算術(shù)表達(dá)式、V項(xiàng)因式和運(yùn)算對(duì)象分別用E、T、F和i代表,則G2E:輸入:輸出: 給出每一步分析過程;若不是句子,即輸入串有錯(cuò)誤,則輸出“ 顯示分析至此所得的中間結(jié)果,如分析棧、符號(hào)棧中的信息等, 說明信息。要求: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ī)則的語(yǔ)句,及分析程序能判別的若干錯(cuò)例。對(duì)于所輸入的字符串,不論對(duì)錯(cuò),都應(yīng)有明確的信息輸出。三、問題分析及源程

3、序LL1文法:改寫文法為:E-TGeG+TGgT-FStF-TGg1G-Ag2G2可寫成:E 7 T | E+T | E-T T F | T*F | T/F F i | (E)由實(shí)驗(yàn)一輸出的單詞串,例如:UCON PL,UCON若輸入源程序中的符號(hào)串是給定文法的句子,則輸出“MU,ID RIGHT,并且ERROR,并且 以及必要的出錯(cuò)S-*FSsT-/FSs1S-As2F-(E)fi+-/()#EeeGgg1g2g2TttSs2s2ss1s2s2Ff1fG-i f1分析表:LL1源程序#i ncludeviostream.h#i ncludevstdio.h#i ncludevstdlib.h

4、#i ncludevstri ng.hchar A30;char B30;charv120=i,+,-,*,7,(,),#; char v220=E,G,T,S,F;int j=0,b=0,to p=0,l;class typep ublic:char orig in;char array5;int len gth;type e,t,g,g1,g2,s,s1,s2,f,f1;type C1010;void prin t()int a;for(a=0;a=t op+1;a+)coutAa;couttt;void prin t1()int j;for(j=0;jb;j+) coutvv;for(j

5、=b;j=l;j+)coutBj;coutttt;/*分析棧*/*剩余串*/*終結(jié)符*/*非終結(jié)符*/*L為輸入串長(zhǎng)度*/*產(chǎn)生式類型定義*/*大寫字符*/*產(chǎn)生式右邊字符*/*字符個(gè)數(shù)*/*類對(duì)象*/*預(yù)測(cè)分析表*/*輸出分析棧*/*輸出剩余串*/*輸出對(duì)齊符*/void mai n()int m,n ,k=0,flag=0,fi ni sh=0; charch,x;type cha;/*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/e.origi n-E;strc py(e.array,TG);e.le ngth=2;t.origi n=T;strcpy(t.array,FS);t.le ngth=2;g.o

6、rigi n=G;strcpy(g.array,+TG);g.le ngth=3;gl.origi n=G;strcpy(g1.array,-TG);gl.le ngth=3;g2.origi n=G;g2.array0-A;g2.le ngth=1;s.origi n=S;strcpy(s.array,*FS);s.le ngth=3;sl.origi n=S;strcpy(s1.array,/FS);sl.le ngth=3;s2.origi n=S; s2.array0=A;s2.le ngth=1;f.origi n=F;strcpy(f.array,(E);f.le ngth=3;f

7、l.origi n=F;f1.array0=i;fl.le ngth=1; for(m=0;mv=4;m+)for(n=0;nv=7;n+)Cm n.origin=N;/*用來接受Cmn*/*初始化分析表*/*全部賦為空*/*填充分析表*/COO=e;CO 5=e;C11=g;C12=g1;C1 6=g2;C17=g2;C20=t;C2 5=t;prin t();C31=s2;C32=s2;C33=s;C34=s1;C36=s2;C37=s2;C40=f1;C4 5=f;cout提示:本程序只能對(duì)由T,+,-,*,7,(,)構(gòu)成的以#結(jié)束的字符串進(jìn)行分析,n;cout ch;if(ch!=i)

8、&( ch!=+)&( ch!=-)&( ch!=*)&( ch!=7)&(ch!=( )&(ch!=)&(ch!=#)coutvv輸入串中有非法字符n; exit(1);/強(qiáng)制退出程序Bj=ch;j+;while(ch!=#);l=j;/*分析串長(zhǎng)度*/ch=B0;/*當(dāng)前分析字符*/Ato p=#; A+to p=E;/*#,E進(jìn)棧*/ cout步驟tt分析棧tt剩余字符tt所用產(chǎn)生式n; dox=Atop-;/*x為當(dāng)前棧頂字符*/coutk+;couttt;for(j=0;jv=7;j+)/*判斷是否為終結(jié)符*/if(x=v1j)

9、flag=1;break;if(flag=1)/*如果是終結(jié)符*/if(x=#)fini sh=1;/*結(jié)束標(biāo)記*/coutvvacc!vvendl;/*接受*/getchar();exit(1); /退出程序/*if*/if(x=ch)prin t();prin t1();cout匹配e ndl;ch=B+b;/*下一個(gè)輸入字符*/ flag=O;/*恢復(fù)標(biāo)記*/else/*出錯(cuò)處理*/prin t();prin t1();cout出錯(cuò)vvendl;/*輸出出錯(cuò)終結(jié)符*/ exit(1);else/*非終結(jié)符處理*/for(j=0;jv=4;j+)if(x=v2j) m=j;/*行號(hào)*/ b

10、reak;for(j=0;jv=7;j+)if(ch=v1j)n =j;/*列號(hào)*/ break;cha=Cm n;if(cha.orig in !=N)/*判斷是否為空*/prin t();prin t1();coutvvcha.origi nv ”;for(j=0;jvcha.le ngth;j+) coutvvcha.arrayj;coutvvn;for(j=(cha.le ngth-1);j=O;j-)A+t op=cha.arrayj;if(At op =)/*為空則不進(jìn)棧*/ top-;else/*出錯(cuò)處理*/*輸出產(chǎn)生式*/*產(chǎn)生式逆序入棧*/prin t1();coutvv咄錯(cuò)

11、TCE-TCf fttCTttCTi-I-iWi-I-iW1-FS1-FSttUSFttUSFF-iF-ittCSittCSi匹配ticsticsE-MSE-MSb btttiSF-tttiSF-匹配flGSFflGSFi-iffi-iffF-iF-i? ?ttGSittGSii-itti-itt也配s sttCSttCS-lit-lit一汁9 9ttGttG-1#-1#G-TGG-TGlettGT-ttGT-itt-itt匹配11ACTACTittittT-FST-FS12124GSF4GSFittittF-iF-i1313fflCSifflCSiIttItt匹配i i弓HGSHGSS S汕ISttGttGttttG G16acc?acc?a a冷MiMicrosoftcrosoft VisualVisual &tjcioMyProject5iaoatDetu&tjcioMyProject5iaoatDetu毀ya:丘浪 w*/嚴(yán),y円奇咸的葉結(jié)東的字符串a(chǎn) a行滬B BL L1!分析棧MEME ttCTttCTttUSFttUSFflCSiflCSilieslies ttG

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論