




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗四報告實驗任務(wù): 對下述描述算符表達式的算符優(yōu)先文法GE,給出算符優(yōu)先分析的實驗結(jié)果。E-E+T|E-T|T T-T*F|T/F|F F-(E)|i說明:優(yōu)先關(guān)系矩陣的構(gòu)造過程:(1) = 關(guān)系由產(chǎn)生式 F-(E) 知 (=)FIRSTVT集FIRSTVT(E)= +,-,*,/,(,i FIRSTVT(F)= (,i FIRSTVT(T)= *,/,(,i LASTVT(E)= +,-,*,/,),i LASTVT(F)= ),i LASTVT(T)= *,/,),i (2) 關(guān)系+T 則有:+ FIRSTVT(T)-T 則有:- FIRSTVT(T)*F 則有:* FIRSTVT(F)
2、/F 則有:/ FIRSTVT(F)(E 則有:( 關(guān)系E+ 則有: LASTVT(E) +E- 則有: LASTVT(E) -T* 則有: LASTVT(T) *T/ 則有: LASTVT(T) /E) 則有: LASTVT(E) )(4)優(yōu)先關(guān)系矩陣 + - * / ( ) i #+ - * / ( = i # = 終結(jié)符之間的優(yōu)先關(guān)系是唯一的,所以該文法是算符優(yōu)先文法。程序的功能描述:程序由文件讀入字符串(以#結(jié)束),然后進行算符優(yōu)先分析,分析過程中如有錯誤,則終止程序并報告錯誤位置,最終向屏幕輸出移近規(guī)約過程。程序結(jié)構(gòu)描述打開文件打開文件成功成功Na的優(yōu)先關(guān)系大于數(shù)組array 中的最
3、后一個終結(jié)符從數(shù)組str 中讀取一個字符a將#壓入a的優(yōu)先關(guān)系大于數(shù)組array 中的最后一個終結(jié)符從數(shù)組str 中讀取一個字符a將#壓入數(shù)組array 從文件中讀入字符串 賦給數(shù)組str N將數(shù)組將數(shù)組array 中優(yōu)先關(guān)系一樣的字符規(guī)約為M將a移近數(shù)組array Y N將a移近數(shù)組array sixeof array sixeof array =0Y結(jié)束程序測試方案測試用例一:i-i*i+i#運行結(jié)果一:分析成功。測試用例二:i*i+(i#運行結(jié)果二:分析失敗。實驗總結(jié)在算符優(yōu)先程序設(shè)計過程中,程序比較復雜,其中在優(yōu)先關(guān)系矩陣的構(gòu)造時遇到了非常大的困難,由于最初對程序的總體流程不是十分清晰
4、,而且實驗中因本人馬虎將優(yōu)先關(guān)系矩陣輸入錯誤,造成了設(shè)計與調(diào)試的困難。但經(jīng)過自己的努力,通過多次調(diào)試,最終構(gòu)造出優(yōu)先關(guān)系矩陣并調(diào)試成功。通過本次實驗一定程度上提高了軟件開發(fā)能力,對編譯原理這一門課程也有了比較深刻的了解。最后,由于所學知識不夠全面,實驗在很多方面還有待完善,在以后的學習過程中,會掌握更多知識,力求做到更好。代碼#include#include#include #includeusing namespace std;const int maxsize=100; /為數(shù)組str、in分配的最大存儲空間const int length=100;/為數(shù)組array分配的最大存儲空間cl
5、ass stackprivate:int size;/size為當前數(shù)組array的大小char arraylength;/用于存儲讀入的字符public:stack()size=0;/數(shù)組array的初始長度為0void push(char ch)if(sizelength)/如果數(shù)組未滿,則壓入arraysize=ch; size+;else/若數(shù)組已滿,則給出出錯信息coutoverflow!=0)for(int i=0;ilen;i+)chi=arraysize-len+i; size-=len; return len;elsecout參數(shù)錯誤!=0&possize)return ar
6、raypos; return 0;void saomiaosuoyou()/輸出當前數(shù)組中的字符for(int i=0;igetsize();i+)coutsaomiao(i);cout=0&ch=a&ch=a&ch=(&ch=0&ch, -, *, /, (,=, , , i, , , #, ,=,;cout*此文法的算符優(yōu)先矩陣如下所示*endl;for(int i=0;i=8;i+) /輸出算符優(yōu)先矩陣for(int j=0;j=8;j+) coutjuzhenij ; coutendl;char inmaxsize; /用于接收輸入文件名 char strmaxsize;FILE *f
7、in; /用于指向輸入文件的指針 coutin; if (fin=fopen(in,r)=NULL) /判斷輸入文件名是否正確 coutendl打開詞法分析輸入文件出錯!endl; int m=0; char ch1=a; while (ch1!=#)/從文件中讀入一串字符 ch1=getc(fin); strm+=ch1; strm=#;/將#賦給字符串尾 stack s;/定義stack類的變量s int len; len=int(strlen(str);/取出輸入字符串的長度 s.push(#);/先把#壓入數(shù)組array int k=s.getsize()-1,t=0,j;/k為當前數(shù)
8、組array讀入已讀入字符的位置標識, /t為輸入字符串數(shù)組str即將被讀的字符位置標識, /j用于記錄當前數(shù)組array中的最后一個非終結(jié)符的位置 char a=str0;/a用于傳遞即將讀入的字符 while(a!=#)/如果a不等于#,則繼續(xù)讀入操作或規(guī)約操作a=strt; if(isvt(s.saomiao(k) j=k; else j=k-1; while(isvt(a)&getrank(s.saomiao(j),a)=1)/判斷是否滿足規(guī)約的條件 int h=j,low=j-1;/h記錄要規(guī)約的位置,low記錄規(guī)約后數(shù)組array中的最后一個非終結(jié)符的位置 if(!isvt(s.s
9、aomiao(low) low-; while(getrank(s.saomiao(low),s.saomiao(h)!=-1)/尋找最后一個非終結(jié)符的位置用low記錄 h=low; low-; if(!isvt(s.saomiao(low)low-; h=s.getsize()-1; low+; int len=h-low+1; /len記錄要規(guī)約的長度 char ch10; for(int p=0;p10;p+) chp=0; s.pop(ch,len);/彈出要規(guī)約的字符用字符串ch存儲 char c=guiyue(ch);/將ch規(guī)約為Ms.push(c);/再將規(guī)約后的M壓入數(shù)組中 coutch 規(guī)約為 guiyue(ch)=A&a=Z)&getrank(s.saomiao(j),a)=2)/當待輸入字符不是大寫字母且與前一個 /非終結(jié)符無優(yōu)先關(guān)系則提示出錯并給出提示 cout你的輸入有錯誤!endl; cout錯誤為第 t+1個字符 :strtendl; exit(0); else cout移近 :aendl; s.push(a);/將a壓入數(shù)組array s.saomiaosuoyou();/讀入后輸出當前數(shù)組array中的字符
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 感恩孝道活動方案
- 感恩教師演講活動方案
- 感恩節(jié)美容促銷活動方案
- 慈善會捐款活動方案
- 慈善老人活動方案
- 戲劇相親活動方案
- 成人芭蕾活動方案
- 成吉思汗非遺活動方案
- 戰(zhàn)斗遺址活動方案
- 戶型品鑒活動方案
- PSS的生產(chǎn)工藝及原理課件
- 2023-2024學年浙江省富陽市小學數(shù)學五年級下冊期末自測試卷
- 防火墻安全策略檢查表
- 研究借鑒晉江經(jīng)驗-加快縣域經(jīng)濟發(fā)展
- GB/T 12706.4-2020額定電壓1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)擠包絕緣電力電纜及附件第4部分:額定電壓6 kV(Um=7.2 kV)到35 kV(Um=40.5 kV)電力電纜附件試驗要求
- 2023年鎮(zhèn)江丹陽市民政局系統(tǒng)事業(yè)單位招聘筆試模擬試題及答案
- 國開電大 操作系統(tǒng) 實驗4:文件管理實驗報告
- 北京理工附中小升初分班考試真題
- 安徽省小學學生學籍表
- 無創(chuàng)腦血氧監(jiān)護儀技術(shù)審評報告
- 糖尿病足的診斷與治療ppt課件
評論
0/150
提交評論