版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、編譯原理程序設(shè)計實驗報告實驗題目班級:計算機1306姓名:于厚藝學號:20131289實驗目標:表達式語法分析器的設(shè)計實現(xiàn)1) 遞歸下降子程序2) LL(1)分析法 實驗內(nèi)容:1. 概要設(shè)計1) 按照流程圖,調(diào)用子程序?qū)崿F(xiàn);2) 通過ll(1)分析表和對應壓棧、彈棧操作實現(xiàn)。2. 流程圖1) 遞歸:Z(main):開始Read(w)E#? N Err結(jié)束入口入口E: E1:+?T YE1Read(w)-? N出口 Y T N出口入口入口T: T1:*?F YRead(w)/?T1 N出口 YT N入口出口F:(?I? N N errRead(w) Y YRead(w)E)? 出口 Y N er
2、r2) LL(1):調(diào)用函數(shù)token()切分單詞構(gòu)建LL(1)分析表開始調(diào)用*Analyse(char *token)進行分析結(jié)束3. 關(guān)鍵函數(shù)1) 遞歸下降子程序void E();/E-TX;int E1();/X-+TX | evoid T();/T-FYint T1();/Y-*FY | eint F();/F-(E) | i2) LL(1)分析法 char *Find(char vn,char vt)/是否查到表char *Analyse(char *token)/分析過程int Token()/將token中數(shù)字表示成i,標識符表示成n源程序代碼:(加入注釋)1) 遞歸下降子程序:
3、#include#include#include #include using namespace std;/*全局變量*/char str30;int index=0;void E();/E-TX;int E1();/X-+TX | evoid T();/T-FYint T1();/Y-*FY | eint F();/F-(E) | iFILE *fp;char cur;/*主函數(shù)*/int main()int len;int m;if(fp=fopen(source.txt,r)=NULL) coutcan not open the source file!endl; exit(1); c
4、ur=fgetc(fp); while(cur!=#) E(); coutendl;coutsuccessendl;return 0;/*/void E() T(); E1();/*/int E1()if(cur=+) cur=fgetc(fp);T();cout+ ;E1();else if(cur=-) cur=fgetc(fp); T(); cout- ; E1();return 0;/*/void T()F();T1();/*/int T1()if(cur=*) cur=fgetc(fp);F();cout* ;T1();else if(cur=/) cur=fgetc(fp); F(
5、); cout/ ; T1();return 0;int F()if(cur=a)|(cur=A)|cur=_) for(int i=0;i20;i+) stri=0; index=0; strindex+=cur; cur=fgetc(fp); while(cur=a)|(cur=A)|cur=_|(cur=0) strindex+=cur; cur=fgetc(fp);coutstr;cout ;return NULL;else if (cur=0) for(int i=0;i20;i+) stri=0; index=0; while(cur=0) strindex+=cur; cur=f
6、getc(fp); if(cur=.) strindex+=cur; cur=fgetc(fp); while(cur=0) strindex+=cur; cur=fgetc(fp); coutstr; cout ; return NULL; else if(cur=a)|(cur=A)|cur=_) printf(error6n); exit(1); else coutstr; cout ; return NULL; else if (cur=() cur=fgetc(fp);E();if(cur=)cur=fgetc(fp);return 0;elseprintf(error3n);exi
7、t (1);elseprintf(error4n);exit(1);return 0; 程序運行結(jié)果:(截屏)輸入:Source.txt文本(Aa+Bb)*(88.2/3)#輸出:2) LL(1)#include #include #include #include #include using namespace std;struct Node1char vn;char vt;char s12;MAP22;/存儲分析預測表每個位置對應的終結(jié)符,非終結(jié)符,產(chǎn)生式int k;char token30;int token_index=0;char G1212=E-TR,R-+TR,R-TR,R-e
8、,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 Select1212=(,i,n,+,-,),#,(,i,n,*,/,+,-,),#,(,i,n;/存儲文法中每個產(chǎn)生式對應的select集合char Right128=-TR,-+TR,-TR,-e,-FW,-*FW,-/FW,-e,-(E),-i,-n;stack stak,stak1,stak2;char *Find(char vn,
9、char vt)int i;for(i=0;ik;i+)if(MAPi.vn=vn& MAPi.vt=vt)return MAPi.s;return error;char *Analyse(char *token)char p,action10,output10;int i=1,j,k=0,l_act,m;while(!stak.empty()/判斷棧中是否為空,若不空就將棧頂元素與分析表匹配進行相應操作stak.pop();stak.push(#);/棧底標志stak.push(E);/起始符號先入棧printf( 步驟 棧頂元素 輸入串 推導所用產(chǎn)生式或匹配n);p=stak.top();
10、while(p!=#)/查預測分析表將棧頂元素進行匹配,若棧頂元素與輸入串匹配成功則向前匹配,否則生成式反序入棧printf(%7d ,i+);p=stak.top();/從棧中彈出一個棧頂符號,由p記錄并輸出stak.pop();printf(%6c ,p);for(j=0,m=0;j1;j-)stak.push(actionj);return ERROR;int Token() FILE *fp; char cur; int i,j; fp=fopen(source.txt,r); cur=fgetc(fp); while(cur!=EOF)/把用字母數(shù)字表示的輸入串轉(zhuǎn)換為token序列的
11、表示方法if(cur=a)|(cur=A)|cur=_) cur=fgetc(fp); while(cur=a)|(cur=A)|cur=_|(cur=0) cur=fgetc(fp); tokentoken_index+=i; continue; else if (cur=0) while(cur=0) cur=fgetc(fp); if(cur=.) cur=fgetc(fp); while(cur=0) cur=fgetc(fp); tokentoken_index+=n; continue; else tokentoken_index+=cur; cur=fgetc(fp); continue; tokentoken_index=#;cout把文件中字符串用i表示,數(shù)字用n表示,轉(zhuǎn)化后:;for(int index=0;index=token_index;index+) couttokenindex; coutendlendl; return 0;int main ()int i,j,l,m;for(i=0,k=0;i11;i+)/通過select集合生成預測分析表l=strle
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年08月中國工商銀行黑龍江省分行社會招聘筆試歷年參考題庫附帶答案詳解
- 2024年08月中國光大銀行濟南分行支行副行長崗位(公司業(yè)務方向)招聘筆試歷年參考題庫附帶答案詳解
- 點火系的檢測
- 2024年08月青海2024年中國建設(shè)銀行青海省分行校園招考筆試歷年參考題庫附帶答案詳解
- 2024年08月遼寧興業(yè)銀行沈陽分行社會招考(810)筆試歷年參考題庫附帶答案詳解
- 2024年08月浙江杭州銀行信用小微事業(yè)部崗位社會招考(821)筆試歷年參考題庫附帶答案詳解
- 2024年08月江西興業(yè)銀行南昌分行面向社會誠聘金融英才筆試歷年參考題庫附帶答案詳解
- 2024年08月江蘇浙江泰隆商業(yè)銀行昆山花橋支行社會招考(817)筆試歷年參考題庫附帶答案詳解
- 2024年微波爐用電機項目可行性研究報告
- 2025至2031年中國桿式調(diào)角器行業(yè)投資前景及策略咨詢研究報告
- 建筑工程施工圖設(shè)計文件審查辦法
- 置業(yè)顧問考核方案
- 吉林市2024-2025學年度高三第一次模擬測試 (一模)數(shù)學試卷(含答案解析)
- 自考《英語二》高等教育自學考試試題與參考答案(2024年)
- 應急物資智能調(diào)配系統(tǒng)解決方案
- 2025年公務員考試時政專項測驗100題及答案
- 《春秋》導讀學習通超星期末考試答案章節(jié)答案2024年
- 2024電力安全工作規(guī)程電力線路部分
- 2024年小學四年級科學考試練習試卷(試卷版)
- 《工業(yè)園區(qū)節(jié)水管理技術(shù)規(guī)范(征求意見稿)》編制說明
- GB/T 44186-2024固定式壓縮空氣泡沫滅火系統(tǒng)
評論
0/150
提交評論