大連理工大學(xué)軟件學(xué)院編譯原理第四次作業(yè)-語(yǔ)法分析_第1頁(yè)
大連理工大學(xué)軟件學(xué)院編譯原理第四次作業(yè)-語(yǔ)法分析_第2頁(yè)
大連理工大學(xué)軟件學(xué)院編譯原理第四次作業(yè)-語(yǔ)法分析_第3頁(yè)
大連理工大學(xué)軟件學(xué)院編譯原理第四次作業(yè)-語(yǔ)法分析_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第4次上機(jī)語(yǔ)法分析2目的:熟練掌握自下而上的語(yǔ)法分析方法,并能用程序?qū)崿F(xiàn)。要求:1. 使用如下文法:E ® E+T | T T ® T*F | F F ® (E) | id2. 對(duì)于任意給定的輸入串(詞法記號(hào)流)進(jìn)行語(yǔ)法分析,要求采用LR分析器來(lái)完成。手工構(gòu)造LR分析表,利用移進(jìn)-歸約分析算法(P69 圖3.12)輸出(P70 表3.8)對(duì)應(yīng)的動(dòng)作部分。如:輸入:id*+id/(id+id)#輸出:移進(jìn)按 F->id歸約 移進(jìn) error 3. 要有一定的錯(cuò)誤處理功能。即對(duì)錯(cuò)誤能提示,并且能在一定程度上忽略盡量少的記號(hào)來(lái)進(jìn)行接下來(lái)的分析。例如:從狀態(tài)0開(kāi)始的

2、記號(hào)流為:bm將b移進(jìn)之后,棧里的情況應(yīng)該為: 0 b 2此時(shí)查表發(fā)現(xiàn) action2,m=error輸出打?。篹rror把A和狀態(tài)1相繼壓入棧,用戶(hù)指針后移到FOLLOW(A)對(duì)應(yīng)的元素繼續(xù)分析。0.棧. . . . a . .A發(fā)現(xiàn)錯(cuò)誤I0 :C®a ·AcA®· bn. . .I 1C®a A ·c. . .AI 2A®b · n. . .b擴(kuò)展:1.利用P92頁(yè)的表3.13的方式將錯(cuò)誤進(jìn)行分類(lèi)提示,即給出具體的出錯(cuò)信息。2. 在已有文法的基礎(chǔ)上再加上減法“-”和除法“/”對(duì)應(yīng)的產(chǎn)生式構(gòu)成最終的文法。從而使得

3、記號(hào)流可以處理帶括號(hào)的加、減、乘、除四則運(yùn)算。#include<iostream>#include<fstream>#include<string>#include<stack>using namespace std;stack<int> astack;int i=0,b,c,a;/a為輸入符號(hào),即table數(shù)組列,b為table數(shù)組行 char temp1000;string wenfa6="按E->E+T規(guī)約","按E->T規(guī)約","按T->T*F規(guī)約"

4、,"按T->F規(guī)約","按F->(E)規(guī)約","按F->id規(guī)約"int table129=/*數(shù)組列,id=0,+=1,*=2,(=3,)=4,$=5,E=6,T=7,F=8 ;行為狀態(tài), 表中所存數(shù)字011代表移進(jìn);1217代表按16產(chǎn)生式規(guī)約,-1代表接受狀態(tài)*/ 5,-2,-2,4,-3,-2,1,2,3,-4,6,-4,-4,-3,-1,-2,-2,-2,13,13,7,13,13,13,-2,-2,-2,15,15,15,15,15,15,-2,-2,-2,5,-2,-2,4,-3,-2,8,2,3,17

5、,17,17,17,17,17,-2,-2,-2,5,-2,-2,4,-3,-2,-2,9,3,5,-2,-2,4,-3,-2,-2,-2,10,-4,6,-4,-4,11,-5,-2,-2,-2,12,12,7,12,12,12,-2,-2,-2,14,14,14,14,14,14,-2,-2,-2,16,16,16,16,16,16,-2,-2,-2;void Analysis()i=0;while('#'!=tempi)if('i'=tempi) a=0; if('+'=tempi) a=1; if('('=tempi) a

6、=3; if(')'=tempi) a=4; if('*'=tempi) a=2; if('$'=tempi) a=5; if('E'=tempi) a=6; if('T'=tempi) a=7; if('F'=tempi) a=8;b=astack.top(); c=tableba;if(-1=c)cout<<"接受"<<endl;break; if(c>=0&&c<=11)cout<<"移進(jìn)"

7、<<endl; astack.push(c);if(0=a) i+;i+; if(c>=12)cout<<wenfac-12<<endl;if(c=12|c=14|c=16) astack.pop(); astack.pop();astack.pop();else astack.pop();b=astack.top();astack.push(tablebc/2); if(-2=c)cout<<"error,缺少運(yùn)算對(duì)象"<<endl;/狀態(tài)5進(jìn)棧astack.push(5);if(-3=c)cout<<"error,不配對(duì)的右括號(hào)"<<endl;/從輸入中刪除右括號(hào)i+;if(-4=c)cout<<"error,缺少運(yùn)算符+"<<endl;/狀態(tài)6進(jìn)棧astack.push(6);if(-5=c)cout<<"error,缺少右括號(hào)"<<endl;/狀態(tài)11入棧astack.push(11);void main()ifstream i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論