《語法分析LR分析器.doc》由會員分享,可在線閱讀,更多相關(guān)《語法分析LR分析器.doc(6頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第4次上機—語法分析2
目的:熟練掌握自下而上的語法分析方法,并能用程序?qū)崿F(xiàn)。
要求:
1. 使用如下文法:
E E+T | T
T T*F | F
F (E) | id
2. 對于任意給定的輸入串(詞法記號流)進行語法分析,要求采用LR分析器來完成。手工構(gòu)造LR分析表,利用移進-歸約分析算法(P69 圖3.12)輸出(P70 表3.8)對應(yīng)的動作部分。如:
輸入:id*+id/(id+id)#
輸出:移進
按 F->id歸約
移進
error
……
3. 要有一定的錯誤處理功能。即對錯誤能提示,并且能在一定程度上忽略盡量少的記號來進行接下來的分析。
例如:
從狀態(tài)0開始的記號流為:bm
將b移進之后,棧里的情況應(yīng)該為: 0 b 2
此時查表發(fā)現(xiàn) action[2,m]=error
輸出打印:error
把A和狀態(tài)1相繼壓入棧,用戶指針后移到FOLLOW(A)對應(yīng)的元素繼續(xù)分析。
0
.
.
.
.
.
.
棧
.. . . . a . .
A
發(fā)現(xiàn)錯誤
I0 :
Ca Ac
A bn
. . .
I 1
Ca A c
. . .
A
I 2
Ab n
. . .
b
擴展:
1.利用P92頁的表3.13的方式將錯誤進行分類提示,即給出具體的出錯信息。
2. 在已有文法的基礎(chǔ)上再加上減法“-”和除法“/”對應(yīng)的產(chǎn)生式構(gòu)成最終的文法。從而使得記號流可以處理帶括號的加、減、乘、除四則運算。
代碼實現(xiàn):
#include
#include
using namespace std;
stack symbol;
stack state;
char sen[50];
char sym[12][6]={//符號表
{s,e,e,s,e,e},
{e,s,e,e,e,a},
{r,r,s,r,r,r},
{r,r,r,r,r,r},
{s,e,e,s,e,e},
{r,r,r,r,r,r},
{s,e,e,s,e,e},
{s,e,e,s,e,e},
{e,s,e,e,s,e},
{r,r,s,r,r,r},
{r,r,r,r,r,r},
{r,r,r,r,r,r}
};
char snum[12][6]={//數(shù)字表
{5,1,1,4,2,1},
{3,6,5,3,2,0},
{2,2,7,2,2,2},
{4,4,4,4,4,4},
{5,1,1,4,2,1},
{6,6,6,6,6,6},
{5,1,1,4,2,1},
{5,1,1,4,2,1},
{3,6,5,3,11,4},
{1,1,7,1,1,1},
{3,3,3,3,3,3},
{5,5,5,5,5,5}
};
int go2[12][3]={//goto表
{1,2,3},
{0,0,0},
{0,0,0},
{0,0,0},
{8,2,3},
{0,0,0},
{0,9,3},
{0,0,10},
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0}
};
void action(int i,char *&a,char &how,int &num,char &A,int &b)//action函數(shù)[i,a]
{
int j;
switch(*a)
{
case i:
j=0;break;
case +:
j=1;break;
case *:
j=2;break;
case (:
j=3;break;
case ):
j=4;break;
case #:
j=5;break;
default:
j=-1;break;
}
if(j!=-1)
{
how=sym[i][j];
num=snum[i][j];
if(how==r)
{
switch(num)
{
case 1:
A=E,b=3;
cout<<"按E->E+T規(guī)約"<T規(guī)約"<T*F規(guī)約"<F規(guī)約"<(E)規(guī)約"<id規(guī)約"<>sen;
a=sen;
state.push(0);//先輸入0狀態(tài)
while(*a!=\0)
{
b=0;num=0;how=\0;A=\0;
s=state.top();
action(s,a,how,num,A,b);
if(how==s)//移進
{
cout<<"移進"<
下載提示(請認(rèn)真閱讀)
- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
文檔包含非法信息?點此舉報后獲取現(xiàn)金獎勵!
下載文檔到電腦,查找使用更方便
9.9
積分
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
-
語法分析
LR
分析器
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。
鏈接地址:http://www.820124.com/p-6709263.html