




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
LL(1)語法分析程序2010211306班 趙雪瑩(10211310)語法分析程序:該語法分析程序?qū)崿F(xiàn)對(duì)算術(shù)表達(dá)式的語法分析,并且在對(duì)輸入表達(dá)式進(jìn)行分析的過程中,輸出所采用的產(chǎn)生式。該程序使用的是LL(1)語法分析程序,為給定文法構(gòu)造預(yù)測(cè)分析表,并通過預(yù)測(cè)分析表對(duì)輸入的表達(dá)式進(jìn)行預(yù)測(cè)分析,并將棧頂狀態(tài)和預(yù)測(cè)分析過程詳細(xì)輸出,如果匹配成功則接受,如果匹配不成功則返回錯(cuò)誤信息。給定文法的產(chǎn)生式:E-E+T | E-T | TT-T*F | T/F | FF- id | (E) | num源代碼:#include #include #include #include #include using namespace std;struct Node1 char vn; char vt; char s12;MAP22;/存儲(chǔ)分析預(yù)測(cè)表每個(gè)位置對(duì)應(yīng)的終結(jié)符,非終結(jié)符,產(chǎn)生式 int k;char G1212=E-TR,R-+TR,R-TR,R-e,T-FW,W-*FW,W-/FW,W-e,F-(E),F-i,F-n;/存儲(chǔ)文法中的產(chǎn)生式 ,用R代表E,W代表T,e代表空char VN6=E,R,T,W,F;/存儲(chǔ)非終結(jié)符 char VT9=i,n,+,-,*,/,(,),#;/存儲(chǔ)終結(jié)符 char FOLLOW1212=(,i,n,+,-,),#,(,i,n,*,/,+,-,),#,(,i,n;/存儲(chǔ)文法中每個(gè)產(chǎn)生式對(duì)應(yīng)的FOLLOW集合 char Right128=-TR,-+TR,-TR,-e,-FW,-*FW,-/FW,-e,-(E),-i,-n;stack stak,stak1,stak2;bool compare(char *a,char *b) int i,la=strlen(a),j,lb=strlen(b); for(i=0;ila;i+) for(j=0;jlb;j+) if(ai=bj) return 1; return 0;char *Find(char vn,char vt) int i; for(i=0;ik;i+) if(MAPi.vn=vn & MAPi.vt=vt) return MAPi.s; return error;char * Analyse(char * word) char p,c,action10,output10; int i=1,l=strlen(word),j,k=0,l_act,m,x; printf(_n); printf(n 對(duì)符號(hào)串%s的分析過程n,word); for(x=0;xl;x+)/把用字母數(shù)字表示的輸入串轉(zhuǎn)換為token序列的表示方法 c=wordx; if(c=a)|(c=A) wordx=i; else if(c=0&c=9) wordx=n; else wordx=c; while(!stak.empty()/判斷棧中是否為空,若不空就將棧頂元素與分析表匹配進(jìn)行相應(yīng)操作 stak.pop(); stak.push(#);/棧底標(biāo)志 stak.push(E);/起始符號(hào)先入棧 printf( 步驟 棧頂元素 輸入串 推到所用產(chǎn)生式或匹配n); p=stak.top(); while(p!=#)/查預(yù)測(cè)分析表將棧頂元素進(jìn)行匹配,若棧頂元素與輸入串匹配成功則向前匹配,否則生成式反序入棧 printf(%7d ,i+); p=stak.top();/從棧中彈出一個(gè)棧頂符號(hào),由p記錄并輸出 stak.pop(); printf(%6c ,p); for(j=k,m=0;j1;j-) stak.push(actionj); if(strcmp(output,#)!=0)/匹配不成功 return ERROR; int main () freopen(in.txt,r,stdin); char source100; int i,j,flag,l,m; printf(n*R代表E,W代表T,e代表空*nn); printf(算術(shù)表達(dá)式對(duì)應(yīng)的文法產(chǎn)生式如下:n); for(i=0;i8;i+) printf( %sn,Gi); printf(_n); printf(n該文法的FOLLOW集如下:n); /手動(dòng)生成集合 for(i=0;i8;i+) printf( FOLLOW(%s) = %s n,Gi,FOLLOWi); printf(_n); for(i=0,k=0;i11;i+)/通過集合生成預(yù)測(cè)分析表 l=strlen(FOLLOWi); for(j=0;jl;j+=2) MAPk.vn=Gi0; MAPk.vt=FOLLOWij; strcpy(MAPk.s,Righti); k+; printf(n表達(dá)式文法的預(yù)測(cè)分析表如下:nn); printf( ); for(i=0;i9;i+) printf(%7c,VTi); printf(n); for(i=0;i5;i+) printf( -n); printf(%7c,VNi); for(j=0;j9;j+) for(m=0;msource)/輸入源文件串進(jìn)行預(yù)測(cè)分析 printf(n分析結(jié)果:%snn,Analyse(source); while(1); return 0;將其改寫LL(1)文法:
溫馨提示
- 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市政工程復(fù)習(xí)必看試題及答案
- 高效能源存儲(chǔ)技術(shù)研發(fā)合作合同
- 商業(yè)空間設(shè)計(jì)與建設(shè)合同協(xié)議指南
- 銀行金融業(yè)務(wù)操作手冊(cè)
- 理解固定與變動(dòng)成本的試題及答案
- 特定行業(yè)專業(yè)能力認(rèn)證證明(5篇)
- 電商平裝產(chǎn)品營銷合作協(xié)議
- 經(jīng)濟(jì)師考試全面復(fù)習(xí)綱要試題及答案
- 社會(huì)保險(xiǎn)繳納證明適用于工作證明(5篇)
- 助力備考的經(jīng)濟(jì)法試題及答案
- 基于PLC的溫室大棚控制系統(tǒng)設(shè)計(jì)說明
- 多級(jí)泵檢修及維護(hù)(1)
- 涵洞孔徑計(jì)算
- 測(cè)量未知電阻的方法
- 中國民主同盟入盟申請(qǐng)表
- 觀感質(zhì)量檢查表
- 最全半導(dǎo)體能帶分布圖
- 企業(yè)信息登記表
- 窯爐課程設(shè)計(jì)-年產(chǎn)50萬件衛(wèi)生潔具隧道窯設(shè)計(jì).doc
- 大中型水庫控制運(yùn)用計(jì)劃編寫大綱
- 皮帶機(jī)輸送能力,電機(jī)功率計(jì)算
評(píng)論
0/150
提交評(píng)論