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

下載本文檔

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

文檔簡介

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

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

3、記號流可以處理帶括號的加、減、乘、除四則運算。#include<iostream>#include<fstream>#include<string>#include<stack>using namespace std;stack<int> astack;int i=0,b,c,a;/a為輸入符號,即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代表移進;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<<"移進"

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,缺少運算對象"<<endl;/狀態(tài)5進棧astack.push(5);if(-3=c)cout<<"error,不配對的右括號"<<endl;/從輸入中刪除右括號i+;if(-4=c)cout<<"error,缺少運算符+"<<endl;/狀態(tài)6進棧astack.push(6);if(-5=c)cout<<"error,缺少右括號"<<endl;/狀態(tài)11入棧astack.push(11);void main()ifstream i

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論