版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二 語法分析程序設(shè)計(jì)與實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康娜芜x一種有代表性的語法分析方法,如算符優(yōu)先法、遞歸下降法、LL(1)、SLR(1)、LR(1)等,通過設(shè)計(jì)、編制、調(diào)試實(shí)現(xiàn)一個(gè)典型的語法分析程序,對實(shí)驗(yàn)一所得掃描器提供的單詞序列進(jìn)行語法檢查和結(jié)構(gòu)分析,實(shí)現(xiàn)并進(jìn)一步掌握常用的語法分析方法。二、基本實(shí)驗(yàn)內(nèi)容與要求選擇對各種常見高級程序設(shè)計(jì)語言都較為通用的語法結(jié)構(gòu)算術(shù)表達(dá)式的一個(gè)簡化子集作為分析對象,根據(jù)如下描述其語法結(jié)構(gòu)的BNF定義G2<算術(shù)表達(dá)式>,任選一種學(xué)過的語法分析方法,針對運(yùn)算對象為無符號常數(shù)和變量的四則運(yùn)算,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)語法分析程序。G2<算術(shù)表達(dá)
2、式>:<算術(shù)表達(dá)式> <項(xiàng)> | <算術(shù)表達(dá)式>+<項(xiàng)> | <算術(shù)表達(dá)式>-<項(xiàng)><項(xiàng)> <因式> | <項(xiàng)>*<因式> | <項(xiàng)>/<因式><因式> <運(yùn)算對象> | (<算術(shù)表達(dá)式>)若將語法范疇<算術(shù)表達(dá)式>、<項(xiàng)>、<因式>和<運(yùn)算對象>分別用E、T、F和i代表,則G2可寫成:G2E:E T | E+T | E-T T F | T*F | T/F F i
3、 | (E)輸入:由實(shí)驗(yàn)一輸出的單詞串,例如:UCON,PL,UCON,MU,ID ······輸出:若輸入源程序中的符號串是給定文法的句子,則輸出“RIGHT”,并且給出每一步分析過程;若不是句子,即輸入串有錯誤,則輸出“ERROR”,并且顯示分析至此所得的中間結(jié)果,如分析棧、符號棧中的信息等,以及必要的出錯說明信息。要求:1、確定語法分析程序的流程圖,同時(shí)考慮相應(yīng)的數(shù)據(jù)結(jié)構(gòu),編寫一個(gè)語法分析源程序。2、將詞法、語法分析合在一起構(gòu)成一個(gè)完整的程序,并調(diào)試成功。3、 供測試的例子應(yīng)包括符合語法規(guī)則的語句,及分析程序能判別的若干錯例。對
4、于所輸入的字符串,不論對錯,都應(yīng)有明確的信息輸出。三、問題分析及源程序LL1文法:改寫文法為:E- >TG e G> +TG gT- >FS tF- >-TG g1G- > g2S- >*FS sT- >/FS s1S- > s2F- >(E) fG- >i f1分析表:i+-*/()#EeeGgg1g2g2TttSs2s2ss1s2s2Ff1fLL1源程序#include<iostream.h>#include<stdio.h> #include<stdlib.h>#include<stri
5、ng.h>char A30; /*分析棧*/char B30; /*剩余串*/char v120='i','+','-','*','/','(',')','#' /*終結(jié)符*/char v220='E','G','T','S','F' /*非終結(jié)符*/ int j=0,b=0,top=0,l; /*L為輸入串長度*/class type /*產(chǎn)生式類型定義*/public:char
6、origin; /*大寫字符*/char array5; /*產(chǎn)生式右邊字符 */int length; /*字符個(gè)數(shù)*/;type e,t,g,g1,g2,s,s1,s2,f,f1; /*類對象*/type C1010; /*預(yù)測分析表*/void print() /*輸出分析棧*/int a;for(a=0;a<=top+1;a+)cout<<Aa;cout<<"tt"void print1() /*輸出剩余串*/int j;for(j=0;j<b;j+) /*輸出對齊符*/cout<<" "for(j
7、=b;j<=l;j+)cout<<Bj;cout<<"ttt"void main()int m,n,k=0,flag=0,finish=0;char ch,x;type cha; /*用來接受Cmn*/*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/e.origin='E'strcpy(e.array,"TG");e.length=2;t.origin='T'strcpy(t.array,"FS");t.length=2;g.origin='G'strcpy(g.array,&
8、quot;+TG");g.length=3;g1.origin='G'strcpy(g1.array,"-TG");g1.length=3;g2.origin='G'g2.array0=''g2.length=1; s.origin='S'strcpy(s.array,"*FS");s.length=3;s1.origin='S'strcpy(s1.array,"/FS");s1.length=3;s2.origin='S's2.
9、array0=''s2.length=1;f.origin='F'strcpy(f.array,"(E)");f.length=3;f1.origin='F'f1.array0='i'f1.length=1;for(m=0;m<=4;m+) /*初始化分析表*/for(n=0;n<=7;n+)Cmn.origin='N' /*全部賦為空*/ /*填充分析表*/ C00=e;C05=e; C11=g;C12=g1;C16=g2;C17=g2; C20=t;C25=t; C31=s2;C
10、32=s2;C33=s;C34=s1;C36=s2;C37=s2; C40=f1;C45=f; cout<<"提示:本程序只能對由'i','+','-','*','/','(',')'構(gòu)成的以'#'結(jié)束的字符串進(jìn)行分析,n" cout<<"請輸入要分析的字符串:" do/*讀入分析串*/ cin>>ch; if (ch!='i') &&(ch!='+
11、39;)&&(ch!='-')&&(ch!='*')&&(ch!='/')&&(ch!='(')&&(ch!=')')&&(ch!='#') cout<<"輸入串中有非法字符n" exit(1); /強(qiáng)制退出程序 Bj=ch; j+; while(ch!='#'); l=j;/*分析串長度*/ ch=B0;/*當(dāng)前分析字符*/ Atop='#'
12、; A+top='E'/*'#','E'進(jìn)棧*/ cout<<"步驟tt分析棧 tt剩余字符 tt所用產(chǎn)生式 n" do x=Atop-;/*x為當(dāng)前棧頂字符*/ cout<<k+; cout<<"tt" for(j=0;j<=7;j+)/*判斷是否為終結(jié)符*/ if(x=v1j) flag=1; break; if(flag=1)/*如果是終結(jié)符*/ if(x='#') finish=1;/*結(jié)束標(biāo)記*/ cout<<"acc
13、!"<<endl;/*接受 */ getchar(); exit(1); /退出程序 /*if*/ if(x=ch) print(); print1(); cout<<"匹配"<<endl; ch=B+b;/*下一個(gè)輸入字符*/ flag=0;/*恢復(fù)標(biāo)記*/ else/*出錯處理*/ print(); print1(); cout<<"出錯"<<endl;/*輸出出錯終結(jié)符*/ exit(1); else/*非終結(jié)符處理*/ for(j=0;j<=4;j+)if(x=v2j)m=j;/*行號*/break; for(j=0;j<=7;j+)if(ch=v1j)n=j;/*列號*/break; cha=Cmn; if(cha.origin!='N')/*判斷是否為空*/ print();print1();cout<<cha.origin<<"->" /*輸出產(chǎn)生式*/for(j=0;j<cha.length;j+) cout<<cha.arrayj;cout<<"n&
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)家樂餐飲服務(wù)與食材供應(yīng)合同4篇
- 2025年度電力設(shè)施維護(hù)司機(jī)派遣服務(wù)合同4篇
- 2025年度企業(yè)員工短期培訓(xùn)費(fèi)支付標(biāo)準(zhǔn)合同
- 二零二五年度新能源車輛采購配送及運(yùn)營服務(wù)合同3篇
- 二零二五年度企業(yè)法律顧問提前終止服務(wù)合同協(xié)議書
- 二零二五年度城市綠化項(xiàng)目臨時(shí)綠化員聘用合同4篇
- 2025年度個(gè)人與企業(yè)貸款融資合作協(xié)議合同范本4篇
- 2025版門面轉(zhuǎn)讓合同范本:商業(yè)地產(chǎn)經(jīng)營權(quán)轉(zhuǎn)讓詳細(xì)協(xié)議
- 課題申報(bào)參考:南水北調(diào)中線水源區(qū)家庭農(nóng)場耕地生態(tài)保護(hù)行為形成邏輯與實(shí)現(xiàn)機(jī)制研究
- 2025年度美容院美容護(hù)理產(chǎn)品代工合同4篇
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2024年城市軌道交通設(shè)備維保及安全檢查合同3篇
- 電力溝施工組織設(shè)計(jì)-電纜溝
- 【教案】+同一直線上二力的合成(教學(xué)設(shè)計(jì))(人教版2024)八年級物理下冊
- 湖北省武漢市青山區(qū)2023-2024學(xué)年七年級上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試卷(含解析)
- 單位往個(gè)人轉(zhuǎn)賬的合同(2篇)
- 電梯操作證及電梯維修人員資格(特種作業(yè))考試題及答案
- 科研倫理審查與違規(guī)處理考核試卷
- GB/T 44101-2024中國式摔跤課程學(xué)生運(yùn)動能力測評規(guī)范
- 鍋爐本體安裝單位工程驗(yàn)收表格
- 高危妊娠的評估和護(hù)理
評論
0/150
提交評論