編譯原理實(shí)驗(yàn)報(bào)告LL分析法_第1頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告LL分析法_第2頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告LL分析法_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課 程 編譯原理 實(shí)驗(yàn)名稱(chēng) 實(shí)驗(yàn)二 LL(1) 分析法實(shí)驗(yàn)?zāi)康? 掌握 LL(1) 分析法的基本原理;2 掌握 LL(1) 分析表的構(gòu)造方法;3 掌握 LL(1) 驅(qū)動(dòng)程序的構(gòu)造方法。一. 實(shí)驗(yàn)內(nèi)容及要求根據(jù)某一文法編制調(diào)試 LL( 1)分析程序,以便對(duì)任意輸入的符號(hào)串進(jìn)行分析。本次實(shí) 驗(yàn)的目的主要是加深對(duì)預(yù)測(cè)分析LL( 1)分析法的理解。對(duì)下列文法,用 LL( 1)分析法對(duì)任意輸入的符號(hào)串進(jìn)行分析:( 1) E-TG( 2) G-+TG( 3) G- (4)T-FS( 5) S-*FS( 6)S- (7)F-(E)(8)F-i 程序輸入一以 #結(jié)束的符號(hào)串 (包括+* () i#) ,如:

2、i+i*i# 。輸出過(guò)程如下: 步驟 分析棧 剩余輸入串 所用產(chǎn)生式1 E i+i*i# E-TG. 實(shí)驗(yàn)過(guò)程及結(jié)果代碼如下:#include#include using namespace std;edge:edge()cinleftright; rlen=();if(left)()NODE+=left;string edge:getlf()return left;string edge:getrg()return right;string edge:getfirst()return first;string edge:getfollow()return follow;string edge

3、:getselect()return select;string edge:getro()string str;str+=right0;return str;int edge:getrlen()return ();void edge:newfirst(string w)int i;for(i=0;i() first+=wi;void edge:newfollow(string w)int i;for(i=0;i()&wi!=) follow+=wi;void edge:newselect(string w)int i;for(i=0;i()&wi!=) select+=wi;void edge

4、:delfirst()int i=();(i,1);int SUM;string NODE,ENODE;etlf()if(nj.getro()() for(i=0;iSUM;i+) if(ni.getlf()=nj.getro() first(ni,n,x);else nx.newfirst(nj.getro();etlf().find()i)=0)if()i+1)()for(k=0;kSUM;k+) if(nk.getlf().find()i+1)=0) nj.newfollow(nk.getfirst();etlf()0)etlf()0)if(nk.getfirst().find()nj.

5、getfirst().length()return;x=nj.getselect().find(ENODEk); if(x-1) coutnj.getrg(); ycik=nj.getrg(); outfu(9-nj.getrlen(), ); flag=0;x=nj.getselect().find(#);if(k=()-1&x-1) coutnj.getrg(); ycij=nj.getrg();if(flag&ENODEk!=)outfu(11, );coutendl;ength()coutNODEi-1;k-) if(ycijk!=) fenxi+=ycijk;if(pipei(chu

6、an,fenxi,yc,b) return 1;elsereturn 0;elsereturn 0;void main()edge *n;string str,(*yc)50;int i,j,k;bool flag=0;cout 請(qǐng)輸入上下文無(wú)關(guān)文法的總規(guī)則數(shù): SUM;cout 請(qǐng)輸入具體規(guī)則(格式:左部右部, 為空): endl;n=new edgeSUM;for(i=0;iSUM;i+) for(j=0;j()&(strj)() ENODE+=strj; etfirst().find()ni.getfirst().length()if(ni.getro()()for(k=1;kni.ge

7、trlen();k+)if(ni.getrg()k)() for(j=0;jnj.getfirst().length() ni.delfirst(); break;etlf()=n0.getlf() ni.newfollow(#); follow(ni,n,i);for(i=0;iSUM;i+) for(j=0;jSUM;j+) if(nj.getrg().find(ni.getlf()=nj.getrlen()-1) ni.newfollow(nj.getfollow();etlf()0=NODEi)if(!() str=nj.getselect(); else for(k=0;knj.ge

8、tselect().length();k+) if(nj.getselect()k)()flag=1;break;etlf()0)outfu(3, ); coutNODEi; outfu(SUM+4, ); out(nj.getfirst();outfu(SUM+4-2*nj.getfirst().length(), ); out(nj.getfollow();coutendl;break; outfu(5+SUM,-*-); coutendl 判定結(jié)論: ;if(flag)cout 該文法不是 LL(1) 文法 !endl; return;elsecout 該文法是 LL(1) 文法 !en

9、dl;/ 輸出預(yù)測(cè)分析表 coutendl 預(yù)測(cè)分析表如下: endl; yc=new string()50;outgraph(n,yc);string chuan,fenxi,fchuan; coutendlchuan; fchuan=chuan;fenxi=#; fenxi+=NODE0;i=0;coutendl 預(yù)測(cè)分析過(guò)程如下: endl; cout 步驟 ;outfu(7, );cout 分析棧 ;outfu(10, );cout 剩余輸入串 ;outfu(8, );cout 推導(dǎo)所用產(chǎn)生式或匹配 ; if(pipei(chuan,fenxi,yc,i)coutendl 輸入串 fchuan 是該

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論