




免費預(yù)覽已結(jié)束,剩余3頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
LL(1)語法分析程序2010211306班 趙雪瑩(10211310)語法分析程序:該語法分析程序?qū)崿F(xiàn)對算術(shù)表達式的語法分析,并且在對輸入表達式進行分析的過程中,輸出所采用的產(chǎn)生式。該程序使用的是LL(1)語法分析程序,為給定文法構(gòu)造預(yù)測分析表,并通過預(yù)測分析表對輸入的表達式進行預(yù)測分析,并將棧頂狀態(tài)和預(yù)測分析過程詳細輸出,如果匹配成功則接受,如果匹配不成功則返回錯誤信息。給定文法的產(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;/存儲分析預(yù)測表每個位置對應(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ǎn)生式 ,用R代表E,W代表T,e代表空char VN6=E,R,T,W,F;/存儲非終結(jié)符 char VT9=i,n,+,-,*,/,(,),#;/存儲終結(jié)符 char FOLLOW1212=(,i,n,+,-,),#,(,i,n,*,/,+,-,),#,(,i,n;/存儲文法中每個產(chǎn)生式對應(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 對符號串%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()/判斷棧中是否為空,若不空就將棧頂元素與分析表匹配進行相應(yīng)操作 stak.pop(); stak.push(#);/棧底標(biāo)志 stak.push(E);/起始符號先入棧 printf( 步驟 棧頂元素 輸入串 推到所用產(chǎn)生式或匹配n); p=stak.top(); while(p!=#)/查預(yù)測分析表將棧頂元素進行匹配,若棧頂元素與輸入串匹配成功則向前匹配,否則生成式反序入棧 printf(%7d ,i+); p=stak.top();/從棧中彈出一個棧頂符號,由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ù)表達式對應(yīng)的文法產(chǎn)生式如下:n); for(i=0;i8;i+) printf( %sn,Gi); printf(_n); printf(n該文法的FOLLOW集如下:n); /手動生成集合 for(i=0;i8;i+) printf( FOLLOW(%s) = %s n,Gi,FOLLOWi); printf(_n); for(i=0,k=0;i11;i+)/通過集合生成預(yù)測分析表 l=strlen(FOLLOWi); for(j=0;jl;j+=2) MAPk.vn=Gi0; MAPk.vt=FOLLOWij; strcpy(MAPk.s,Righti); k+; printf(n表達式文法的預(yù)測分析表如下: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)/輸入源文件串進行預(yù)測分析 printf(n分析結(jié)果:%snn,Analyse(source); while(1); return 0;將其改寫LL(1)文法:
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店中餐擺臺培訓(xùn)
- 重卡銷售培訓(xùn)
- 痛風(fēng)病人飲食護理
- 職業(yè)安全健康管理
- 財會合規(guī)培訓(xùn)
- 腫瘤護理專家共識
- 銷售業(yè)績分解培訓(xùn)
- 加油站全流程診斷體系構(gòu)建
- 稽核監(jiān)察財務(wù)培訓(xùn)
- 互聯(lián)網(wǎng)+教育精準扶貧:2025年實踐案例分析報告
- 2025年湖南湘西州花垣縣事業(yè)單位招聘工作人員71人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年高中歷史畢業(yè)會考全部基礎(chǔ)知識復(fù)習(xí)提綱(完整版)
- 電商平臺品牌授權(quán)使用協(xié)議
- 水泥土擠密樁的施工方案
- 急性粒-單核細胞白血病病因介紹
- 心外科手術(shù)進修匯報
- 集團公司資金池管理制度
- 瑤醫(yī)瑤藥文化
- 設(shè)計院項目設(shè)計流程與規(guī)范
- 西方哲學(xué)智慧2024-西方哲學(xué)智慧超星爾雅答案
- 黨內(nèi)法規(guī)學(xué)-形考任務(wù)一-國開(FJ)-參考資料
評論
0/150
提交評論