《語(yǔ)法分析LR分析器.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《語(yǔ)法分析LR分析器.doc(6頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第4次上機(jī)—語(yǔ)法分析2
目的:熟練掌握自下而上的語(yǔ)法分析方法,并能用程序?qū)崿F(xiàn)。
要求:
1. 使用如下文法:
E E+T | T
T T*F | F
F (E) | id
2. 對(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)始的記號(hào)流為:bm
將b移進(jìn)之后,棧里的情況應(yīng)該為: 0 b 2
此時(shí)查表發(fā)現(xiàn) action[2,m]=error
輸出打?。篹rror
把A和狀態(tài)1相繼壓入棧,用戶(hù)指針后移到FOLLOW(A)對(duì)應(yīng)的元素繼續(xù)分析。
0
.
.
.
.
.
.
棧
.. . . . a . .
A
發(fā)現(xiàn)錯(cuò)誤
I0 :
Ca Ac
A bn
. . .
I 1
Ca A c
. . .
A
I 2
Ab n
. . .
b
擴(kuò)展:
1.利用P92頁(yè)的表3.13的方式將錯(cuò)誤進(jìn)行分類(lèi)提示,即給出具體的出錯(cuò)信息。
2. 在已有文法的基礎(chǔ)上再加上減法“-”和除法“/”對(duì)應(yīng)的產(chǎn)生式構(gòu)成最終的文法。從而使得記號(hào)流可以處理帶括號(hào)的加、減、乘、除四則運(yùn)算。
代碼實(shí)現(xiàn):
#include
#include
using namespace std;
stack symbol;
stack state;
char sen[50];
char sym[12][6]={//符號(hào)表
{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)//移進(jìn)
{
cout<<"移進(jìn)"<
下載提示(請(qǐng)認(rèn)真閱讀)
- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
文檔包含非法信息?點(diǎn)此舉報(bào)后獲取現(xiàn)金獎(jiǎng)勵(lì)!
下載文檔到電腦,查找使用更方便
9.9
積分
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
-
語(yǔ)法分析
LR
分析器
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶(hù)自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶(hù)書(shū)面授權(quán),請(qǐng)勿作他用。
鏈接地址:http://www.820124.com/p-6709263.html