版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、編譯原理實(shí)驗(yàn)報告 FIRST集和FOLLOW S編譯原理實(shí)驗(yàn)報告實(shí)驗(yàn)名稱 計算 first 集合禾口 follow 集合實(shí)驗(yàn)時間院系計算機(jī)科學(xué)與技術(shù)班級學(xué)號實(shí)驗(yàn)?zāi)康妮斎耄喝我獾纳舷挛臒o關(guān)文法。輸出:所輸入的上下文無關(guān)文法一切非終結(jié)符的卅集合和 follow 集合。實(shí) 驗(yàn)原理設(shè)文法GS二 (VN, VT, P, S),則首字符集為:*FIRST ( a ) =a | a =aB , aAVT, a z B UV *?若 a =E, cG FIRST ( a) 。由定義可以看出,F(xiàn)IRST (a )是指符號串a(chǎn)能夠推導(dǎo)出的所有符號串中處于串首的終結(jié)符號組成的集合。所以 FIRST 集也稱為首符號集
2、。設(shè) a=xiX2.x n, FIRST ( a )可按下列方法求得:令 FIRST ( a ) =n 為止。當(dāng)一個文法中存在產(chǎn)生式時,例如,存在A-戈只有知道哪些符號可以合法地出現(xiàn)在非終結(jié)符 A之后,才能知道是否選擇 Af 士產(chǎn)生式。這些合法地出現(xiàn)在非終結(jié)符 A 之后的符號組成的集合被稱為 FOLLOW 集合。下面我們給出文 法的 FOLLOW 集的定義。設(shè)文法 G|S= (VN, Vr, P, S),貝 IFOLLOW (A) =a | S=. Aa aev to*若 S=? A, #e FOLLOW (A)o由定義可以看出, FOLLOW (A) 是指在文法GS 的所有句型中,緊跟在非終
3、結(jié)符 A 后的終結(jié)符號的集合。FOLLOW 集可按下列方法求得:對于文法GS的開始符號S,#eFOLLOW (S);若文法GS中有形如B-xAy的規(guī)則,其中x, N,則FIRST (y)- cGFOLLOW (A) ;(3)若文法GS中有形如B-*xA的規(guī)則,或形如B-*xAy的規(guī)則且丘 FIRST (y),負(fù)中 x, yev 貝 0 FOLLOW (B) GFOLLOW (A);實(shí)驗(yàn)內(nèi)容計算 first 集合和 follow 集合實(shí)驗(yàn)心得通過上機(jī)實(shí)驗(yàn)我對文法符號的 FIRST集和FOLLOW1有了更深刻的理解,已經(jīng) 熟練的掌握了求解的思想和方法,同時也鍛煉了自己的動手解決問題的能 力,對編
4、程能力也有所提高。實(shí)驗(yàn)代碼與結(jié)果#include#include#include using namespace std;#define MAXS 50 int NONEMAXS=0; string strings;/ 產(chǎn)生式 string Vn;/ 非終結(jié)符 string Vt;/ 終結(jié)符 string firstMAXS; first 集 string FirstMAXS;/ 的 first 集 string FollowMAXS; 符的 follow 集 int N;/ 產(chǎn)生式個 數(shù) 用于存放每個終結(jié)符的用于存放每個非終結(jié)符/用于存放每個非終結(jié) TOC o 1-5 h z 6u 聲 8u
5、 2snFup6ao-+ M+ vO0H6EuOa42dQQMHAm衛(wèi)(00lx(ugla_E:d)pu2(zbvnld)!tdu elseif(Vt.find(pi.leftj)100)Vt +=pi.leftj; for(j=0;jv(int)pi.right.length();j+)if(!(pi.rightj=A&pi.rightj100)Vt +=pi.rightj; elseif(Vn.find(pi.rightj)100)Vn+=pi.rightj;void getlr(STR *p,int i)int j ; for(j=0;jvstrings .l ength();j+)if
6、(stringsj=-&stringsj+1=)pi .l eft=strings ? substr(0,j);pi .right=strings .substr(j+2,strings ength()-j); 對每個文法符號求 first 集string Letter_First(STR *p,char ch)int t;if(!(Vt .find(ch)100)firstVt .find(ch)=ch; return firstVt ?find(ch)-1;if(!(Vn.find(ch)100)for(int i=0;i1O0) if(FirstVn.find(ch).find(pi.r
7、ight0)1OO) FirstVn.find(ch)+=pi.right0;if(pi.right0=*)if(FirstVn.find(ch).find(*)100)FirstVn ? find(ch)+=*;if(!(Vn .find(pi .right0)100)if(pi .right ? length()=1)string ff; ff=Letter_First(p,pi right0); for(int i_i=0;i_ivff length();i_i+) if( FirstVn.find(ch).find(ffi_i)100)FirstVn.find(ch)+=ffi_i;
8、elsefor(intj=0 ; jvpi.right ength();j+)string TT;TT=Letter_First(p,pi ? rightj);if(!(TT. find(*)10 0)&(j+1)vpi .right .1 ength() )sort(TT ? begin(),TT .end();string tt;for(intt=1;tTT .length();t+)tt+=TTt;TT=tt;tt=;for(t=0;t100)FirstVn.find(ch)+=TTt;else for(t=0;t100)FirstVn.find(ch)+=TTt;break;retur
9、n FirstV n. find(ch);/求每個非終結(jié)符的 Follow 集string Letter_Follow(STR *p,char ch) int t,k;NONEV n. find(ch)+;if(NONEVn .find(ch)=2) NONEVn .find(ch)=0; return FollowV n. find(ch);for(int i=0;iN;i+)for(int j=0;j100) FollowVn .find(ch)+=ggk;else string FF;for(intjj=j+1;jjvpi.right.length();jj+)string TT;TT=
10、Letter_First(p,pi ? rightjj);if(!(TT .find(*)100)&(jj+1)pi .right .1 ength( )sort(TT ? begin(),TT .end();string tt;for(intt=1;tTT ? length();t+)tt+=TTt;TT=tt;tt=;for(t=0;t10 0&TTt!=*)FF+=TTt;elsefor(t=0;t100) FF+=TTt; break;if(FF.find(*)100)for(k=0;k100)FollowVn.find(ch)+=FFk; else for(k=0;k100)&FF
11、k!=*)FollowVn .find(ch)+=FFk;string dd;dd=Letter_Follow(p,pi .left0);NONEVn .find(pi .1eft0)=0; for(k=0;kvddlength();k+) if(FollowVn.find(ch).find(ddk)100)FollowVn.find(ch)+=ddk;return FollowVn.find(ch);void result()coutvvn 該文法不是LL(1)型文法vvendl;主函數(shù)int main()(int i,j,k;COUtVV請輸入產(chǎn)生式總數(shù):;cin? N;coutvvn 請輸入各產(chǎn)生式(*代表 空):vvendl;STR *p=new STRMAXS;for(i=0;istrings; getlr(p,i);VNVT(p);coutvvendl;coutvvn=vvendl;coutvv 非 終 結(jié) 符vvtvvFIRSTvvttvvFOLLOWvve ndl;for(i=0;iVnength();i+)coutvv vvVnivvtt;string pp;pp=Letter_First(p,Vni); for(j=0;j+lvpplength();j+)coutvvppjvv,;cou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 牙周炎與血糖控制的雙向關(guān)系
- 安全生產(chǎn)標(biāo)準(zhǔn)操作流程與面試題
- 爆炸傷批量救治的分揀與初步處理流程
- 焦慮障礙的藥物洗脫策略與時機(jī)
- 新能源汽車工程師技術(shù)測試含答案
- 焦慮障礙的共病纖維肌痛綜合征
- 焦慮抑郁對血壓控制的影響及對策
- 冶金行業(yè)節(jié)能降耗項(xiàng)目實(shí)施崗面試題庫
- 大唐集團(tuán)部門副經(jīng)理部門工作常見問題解答
- 通信技術(shù)員面試題及答案
- 2026考研政治模擬預(yù)測卷及答案
- 2025-2026學(xué)年八年級數(shù)學(xué)上冊人教版(2024)第17章 因式分解 單元測試·基礎(chǔ)卷
- 風(fēng)水顧問聘請合同范本
- 2025年量子計算驅(qū)動的電力系統(tǒng)彈性提升-探索與展望報告-
- 廣東5年(2021-2025)高考生物真題分類匯編:專題05 遺傳的分子基礎(chǔ)及生物的變異與進(jìn)化(原卷版)
- 盒馬鮮生促銷方案
- 2025年政府采購評審專家考試題庫含答案
- 云南中考英語5年(21-25)真題分類匯編-中考語篇題型 閱讀理解句子還原7選5
- 2025年廣西度三類人員(持b證人員)繼續(xù)教育網(wǎng)絡(luò)學(xué)習(xí)考試題目及答案
- 食品法律法規(guī)教學(xué)課件
- 掘進(jìn)機(jī)維護(hù)保養(yǎng)課件
評論
0/150
提交評論