




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)七:LL(1)文法的判斷 一:要求輸入:任意的上下文無關(guān)文法。輸出:判斷是否為L(zhǎng)L(1)文法二:實(shí)驗(yàn)?zāi)康?掌握LL(1)的判斷,掌握求first和follow集合的算法2熟悉運(yùn)用C/C+語言對(duì)求first和follow集合進(jìn)行實(shí)現(xiàn) 三:實(shí)驗(yàn)原理設(shè)x1x2xn,F(xiàn)IRST()可按下列方法求得:令FIRST(),i1;(1)若xiVT,則xiFIRST();(2)若xiVN; 若 FIRST(xi),則FIRST(xi)FIRST(); 若FIRST(xi),則FIRST(xi)FIRST();(3)ii+1,重復(fù)(1)、(2),直到xiVT,(i2,3,n)或xiVN且若 FIRST(xi)
2、或i>n為止。當(dāng)一個(gè)文法中存在產(chǎn)生式時(shí),例如,存在A,只有知道哪些符號(hào)可以合法地出現(xiàn)在非終結(jié)符A之后,才能知道是否選擇A產(chǎn)生式。這些合法地出現(xiàn)在非終結(jié)符A之后的符號(hào)組成的集合被稱為FOLLOW集合。下面我們給出文法的FOLLOW集的定義。設(shè)文法GS(VN,VT,P,S),則 FOLLOW(A)a | S Aa ,aVT。若S A,#FOLLOW(A)。由定義可以看出,F(xiàn)OLLOW(A)是指在文法GS的所有句型中,緊跟在非終結(jié)符A后的終結(jié)符號(hào)的集合。FOLLOW集可按下列方法求得:(1)對(duì)于文法GS的開始符號(hào)S,有#FOLLOW(S);(2)若文法GS中有形如BxAy的規(guī)則,其中x,yV
3、*,則FIRST(y)FOLLOW(A);(3)若文法GS中有形如BxA的規(guī)則,或形如BxAy的規(guī)則且FIRST(y),其中x,yV *,則FOLLOW(B)FOLLOW(A);四:數(shù)據(jù)結(jié)構(gòu)與算法typedef struct Chomsky /定義一個(gè)產(chǎn)生式結(jié)構(gòu)體 string left; /定義產(chǎn)生式的左部 string right; /定義產(chǎn)生式的右部Chomsky;void apart(Chomsky *p,int i) /分開產(chǎn)生式左右部,i代表產(chǎn)生式的編號(hào)string is_empty(Chomsky *p)/判斷某非終結(jié)符能否直接推出空,空用#代替string isempty(Ch
4、omsky *p)/可以間接推出空的非終結(jié)符void search(Chomsky *p,int n)/提取產(chǎn)生式中的非終結(jié)符void First(Chomsky *p,int n,char m,int mm)/求文法中非終結(jié)符的First集void Follow(Chomsky *p,int n,int m)/求文法的follow集string erase(string s)/去First集及follow集中的重復(fù)字符void select(string s1,string s2)/求產(chǎn)生式的select集,s1是產(chǎn)生式左部,s2是產(chǎn)生式右部五:出錯(cuò)分析1:select集計(jì)算不出,關(guān)鍵在于能
5、產(chǎn)生空的非終結(jié)符沒有求出來2:單個(gè)符號(hào)的first集與一串符號(hào)的first集區(qū)別3:實(shí)驗(yàn)最后沒能輸出select集,沒能判斷出來是否是LL(1)文法 六:實(shí)驗(yàn)結(jié)果與分析七:源代碼#include<iostream>#include<string>using namespace std;#define max 100typedef struct Chomsky /定義一個(gè)產(chǎn)生式結(jié)構(gòu)體 string left; /定義產(chǎn)生式的左部 string right; /定義產(chǎn)生式的右部Chomsky;int n;/產(chǎn)生式總數(shù)string strings;/存儲(chǔ)產(chǎn)生式string n
6、oend;/存放文法中的非終結(jié)符string empty;/存放可以推出空的非終結(jié)符string firstmax;/存放非終結(jié)符的first集string followmax;/存放非終結(jié)符的follow集string selectmax;/存放產(chǎn)生式的select集void apart(Chomsky *p,int i) /分開產(chǎn)生式左右部,i代表產(chǎn)生式的編號(hào)int j; for(j=0;j<strings.length();j+)if(stringsj='-')pi.left=strings.substr(0,j);/從0開始的j長(zhǎng)度的子串,即0j-1pi.righ
7、t=strings.substr(j+1,strings.length()-j);/從j+1開始的后面子串/*string is_empty(Chomsky *p)/判斷某非終結(jié)符能否直接推出空,空用#代替/如果可以,返回1/不可以,返回0int i;string s;for(i=0;i<n;i+)if (pi.right0="#"&&pi.right.length()=1)/直接推出空的empty=empty+pi.left;s=empty;return s;/s存放能直接推出空的非終結(jié)符string isempty(Chomsky *p)/可以間接
8、推出空的非終結(jié)符int i,j;string s1;for(i=0;i<n;i+)if(is_empty(p).find(pi.left)>=0)/若此非終結(jié)符已經(jīng)存在直接推出空那里,在此無需重復(fù)計(jì)算elsefor(j=0;j<(int)pi.right.length();j+)if(is_empty(p).find(pi.right.j)<0)if(j=(int)pi.right.length()/如果右部所有符號(hào)都在直接推出空那里,則此左部也可以推出空s1=s1+pi.left0;*/void search(Chomsky *p,int n)/提取產(chǎn)生式中的非終結(jié)符
9、int i,j;for(i=0;i<n;i+)if(!(noend.find(pi.left0)>=0&&noend.find(pi.left0)<noend.length()noend=noend+pi.left;for(j=0;j<pi.right.length();j+)if('A'<=pi.rightj&&pi.rightj<='Z')if(noend.find(pi.rightj)>=0&&noend.find(pi.rightj)<noend.length
10、()break;elsenoend=noend+pi.right.substr(j,1);void First(Chomsky *p,int n,char m,int mm)/求文法中非終結(jié)符的First集int length=noend.length();string f;int i,j,x,y;int flag=0;for(i=0;i<n;i+)if(m=pi.left0)if('a'<=pi.right0&&'z'>=pi.right0) firstmm=firstmm+pi.right.substr(0,1);if(pi
11、.right0='#') firstmm=firstmm+pi.right.substr(0,1);if('A'<=pi.right0&&'Z'>=pi.right0)for(j=0;j<pi.right.length();j+)if('A'<=pi.rightj&&pi.rightj<='Z')flag+;if(flag=j)/產(chǎn)生式的右部均為非終結(jié)符flag=0;for(j=0;j<pi.right.length();j+)for(x=0;x&
12、lt;n;x+)if(pi.rightj=px.left0&&px.right0='#')flag+;break;if(flag=j)/產(chǎn)生式右部的全部非終結(jié)符均能推出空for(j=0;j<pi.right.length();j+)for(x=0;x<n;x+)if(pi.rightj=noendx)break;y=x;if(firsty="")First(p,n,pi.rightj,x); f=firsty;for(x=0;x<f.length();x+)if(fx='#')if(x=f.length()-
13、1)f=f.substr(0,x);else f=f.substr(0,x)+f.substr(x+1); firstmm=firstmm+f; firstmm=firstmm+"#"elsefor(j=0;j<pi.right.length();j+)for(x=0;x<n;x+)if(pi.rightj=noendx)break;y=x;if(firsty="")First(p,n,pi.rightj,x);f=firsty;for(x=0;x<f.length();x+)if(fx='#')if(x=f.lengt
14、h()-1)f=f.substr(0,x);else f=f.substr(0,x)+f.substr(x+1); firstmm=firstmm+f;void Follow(Chomsky *p,int n,int m)/求文法的follow集int i,j,x,y,k;string fo;for(i=0;i<n;i+)for(j=0;j<pi.right.length();j+)if(noendm=pi.rightj)if(j<pi.right.length()-1&&'a'<=pi.rightj+1&&pi.righ
15、tj+1<='z') followm=followm+pi.right.substr(j+1,1); if(j<pi.right.length()-1&&'A'<=pi.rightj+1&&pi.rightj+1<='Z')for(y=0;y<noend.length();y+)if(noendy=pi.rightj+1)break;fo=firsty;for(x=0;x<firsty.length();x+)if(0<=firsty.find('#')&a
16、mp;&firsty.find('#')<firsty.length()fo=firsty.substr(0,firstm.find('#')+firsty.substr(firsty.find('#')+1); followm=followm+fo; for(x=0;x<n;x+)if(pi.rightj+1=px.left0&&px.right0='#')break; if(x!=n)/非終結(jié)符后面的部分可以推出空for(y=0;y<n;y+)if(pi.left0=noendy)br
17、eak; k=y; if(followk="")Follow(p,n,y); followm=followm+followk; if(j=pi.right.length()-1) for(y=0;y<n;y+) if(pi.left0=noendy)break; k=y; if(followk="")Follow(p,n,y); followm=followm+followk; string erase(string s)/去First集及follow集中的重復(fù)字符int i,j;for(i=0;i<s.length();i+)for(j=0
18、;j<s.length();j+)if(i!=j&&si=sj)s=s.substr(0,j)+s.substr(j+1);return s;/*void select(string s1,string s2)/求產(chǎn)生式的select集,s1是產(chǎn)生式左部,s2是產(chǎn)生式右部if()/即s2可以推出空#cout<<s1<<"->"<<s2<<"="<<first(s2)<<endl;else/即s2不可以推出空#cout<<s1<<&q
19、uot;->"<<s2<<"="<<first(s2)-"#"+<<follow(s1)<<endl;*/void main()cout<<".編譯原理實(shí)驗(yàn)七:LL(1)文法的判斷."<<endl;int i,j,m;char f;/存放文法開始符號(hào)cout<<"請(qǐng)輸入文法產(chǎn)生式個(gè)數(shù)N以及各產(chǎn)生式(空用#代替,鏈接左右部的為-):"<<endl;cin>>n;Chomsky *p=
20、new Chomskyn; / 初始化產(chǎn)生式數(shù)組 for(i=0;i<n;i+)strings.erase();/清除cin>>strings; apart(p,i); cout<<"請(qǐng)輸入該文法的開始符號(hào):"<<endl;cin>>f;search(p,n);/提取產(chǎn)生式中的非終結(jié)符/empty=is_empty(p)+isempty(p);/可以推出空的所有非終結(jié)符for(m=0;m<noend.length();m+)if(firstm="")First(p,n,noendm,m);cout<<"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)服裝零售市場(chǎng)經(jīng)營(yíng)模式及投資競(jìng)爭(zhēng)力分析報(bào)告
- 2025-2030年中國(guó)新型隔熱浮法玻璃行業(yè)十三五規(guī)劃及發(fā)展盈利分析報(bào)告
- 2025-2030年中國(guó)家用制氧機(jī)行業(yè)運(yùn)營(yíng)現(xiàn)狀及發(fā)展規(guī)劃分析報(bào)告
- 2025-2030年中國(guó)塑料中空成型機(jī)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)噴槍及類似器具市場(chǎng)發(fā)展?fàn)顩r及營(yíng)銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)吉林能源產(chǎn)業(yè)風(fēng)險(xiǎn)評(píng)估及發(fā)展戰(zhàn)略決策報(bào)告
- 2025-2030年中國(guó)農(nóng)機(jī)傳動(dòng)膠帶行業(yè)發(fā)展動(dòng)態(tài)及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)人參提取物行業(yè)發(fā)展?fàn)顩r及營(yíng)銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)三氯化砷行業(yè)發(fā)展?fàn)顩r及前景趨勢(shì)分析報(bào)告
- 秋季中醫(yī)健康教育報(bào)告
- 醇基燃料突發(fā)事故應(yīng)急預(yù)案
- 情侶自愿轉(zhuǎn)賬贈(zèng)與協(xié)議書范本
- DB14-T 3043-2024 黃土丘陵溝壑區(qū)水土流失綜合治理技術(shù)規(guī)范
- 青島西海岸新區(qū)2025中考自主招生英語試卷試題(含答案詳解)
- 《氣象學(xué)與氣候?qū)W》全書電子教案B
- 生產(chǎn)設(shè)備更新和技術(shù)改造項(xiàng)目資金申請(qǐng)報(bào)告-超長(zhǎng)期國(guó)債
- 江西省“振興杯”信息通信網(wǎng)絡(luò)運(yùn)行管理員競(jìng)賽考試題庫-上(單選題)
- DLT 5756-2017 額定電壓35kV(Um=40.5kV)及以下冷縮式電纜附件安裝規(guī)程
- 2023高考數(shù)學(xué)藝考生一輪復(fù)習(xí)講義(學(xué)生版)
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫含答案
- 2024年連云港專業(yè)技術(shù)人員繼續(xù)教育《飲食、運(yùn)動(dòng)和健康的關(guān)系》92分(試卷)
評(píng)論
0/150
提交評(píng)論