算符優(yōu)先分析程序

算符優(yōu)先分析程序

ID:8260912

大?。?1.50 KB

頁數(shù):12頁

時間:2018-03-14

算符優(yōu)先分析程序_第1頁
算符優(yōu)先分析程序_第2頁
算符優(yōu)先分析程序_第3頁
算符優(yōu)先分析程序_第4頁
算符優(yōu)先分析程序_第5頁
資源描述:

《算符優(yōu)先分析程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、編譯原理實驗報告實驗名稱:_____算符優(yōu)先分析程序___實驗類型:________設(shè)計型實驗_________指導(dǎo)教師:_________何中勝_____________專業(yè)班級:________09計二______________姓名:_________周健_______________學(xué)號:______09030231_____________電子郵件:____________________________實驗地點:_______院士樓720_____________實驗成績:_________________________一、試驗?zāi)康暮鸵笸ㄟ^設(shè)計、編制、調(diào)試一個典型的

2、語法分析程序,實現(xiàn)對詞法分析程序所提供的單詞序列進(jìn)行語法檢查和結(jié)構(gòu)分析,進(jìn)一步掌握常用的語法分析方法。1、選擇最有代表性的語法分析方法,如LL(1)語法分析程序、算符優(yōu)先分析程序和LR分析分析程序,并至少完成兩個題目。2、選擇對各種常見程序語言都用的語法結(jié)構(gòu),如賦值語句(尤指表達(dá)式)作為分析對象,并且與所選語法分析方法要比較貼切。⑴實習(xí)前的準(zhǔn)備按實習(xí)目的和要求,編寫語法分析程序,同時考慮相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。⑵調(diào)試調(diào)試?yán)討?yīng)包括符合語法規(guī)則的算術(shù)表達(dá)式,以及分析程序能夠判別的若干錯例。⑶輸出對于所輸入的算術(shù)表達(dá)式,不論對錯,都應(yīng)有明確的信息告訴外界。⑷擴(kuò)充有余力的同學(xué),可適當(dāng)擴(kuò)大分析對象

3、。譬如:①算術(shù)表達(dá)式中變量名可以是一般標(biāo)識符,還可含一般常數(shù)、數(shù)組元素、函數(shù)調(diào)用等等。②除算術(shù)表達(dá)式外,還可擴(kuò)充分析布爾、字符、位等不同類型的各種表達(dá)式。③加強(qiáng)語法檢查,盡量多和確切地指出各種錯誤。⑸編寫上機(jī)實習(xí)報告。二、實驗過程1、準(zhǔn)備:閱讀課本有關(guān)章節(jié),確定算術(shù)表達(dá)式的文法。2、考慮好設(shè)計方案。3、設(shè)計出模塊結(jié)構(gòu)、測試數(shù)據(jù),初步編制好程序。4、上機(jī)調(diào)試,發(fā)現(xiàn)錯誤,分析錯誤,在修改完善。算符優(yōu)先文法分為兩種:一種是自上而下的,一種是自下而上的,本次采用自上而下的方式。三、試驗結(jié)果三、討論與分析自下而上分析技術(shù):從輸入符號串出發(fā),試圖把它規(guī)約為識別符號。自下而上分析技術(shù)是一種“移進(jìn)

4、-歸約”法。從輸入符號串開始,從左到右進(jìn)行掃描,將輸入符號逐個移入一個棧中,邊移入邊分析,一旦棧頂符號串形成某個產(chǎn)生式的右部時,就用該產(chǎn)生式的左部非終結(jié)符代替,稱為歸約。重復(fù)這一過程,直到歸約到棧中只剩下文法的開始符號時,則分析成功,稱為“移進(jìn)-歸約”方法。分析器做四種動作:1、移進(jìn):將下一輸入符號移入棧2、歸約:當(dāng)棧頂出現(xiàn)句柄,用產(chǎn)生式左側(cè)的非終結(jié)符替換棧頂?shù)木浔?、接受:分析成功,是歸約的一種特殊情況4、出錯:棧頂?shù)膬?nèi)容與輸入符號相悖,進(jìn)行出錯處理構(gòu)造FIRESVT和LASTVT,建立算符優(yōu)先關(guān)系表來輔助判斷FIRESVT:對每個非終結(jié)符P,F(xiàn)IRSTVT(P)={a

5、P?a.

6、..或P?Qa...,a為終結(jié)符,P、Q為非終結(jié)符}LASTVT:對每個非終結(jié)符P,LASTVT(P)={a

7、P?...a或P?...aQ,a為終結(jié)符,P、Q為非終結(jié)符}構(gòu)造優(yōu)先關(guān)系表:1、如果每個非終結(jié)符的FIRSTVT和LASTVT集均已知,則可構(gòu)造優(yōu)先關(guān)系表。2、若產(chǎn)生式右部有...aP...的形式,則對于每個b∈FIRSTVT(P)都有a≦b(優(yōu)先集);3、若產(chǎn)生式右部有...Pb的形式,則對于每個a∈LASTVT(P)集,都有a≧b;4、若產(chǎn)生是形如:A→…ab…或A→…aBb…形式,則有a≒b。5、#與其他終結(jié)符的優(yōu)先關(guān)系可利用拓廣文法S?à#S#來獲得。五、附錄#in

8、clude"stdio.h"#include"malloc.h"structLchar{charchar_ch;structLchar*next;}LLchar,*p,*h,*temp,*top,*base;inttable[8][8]={{1,1,-1,-1,-1,1,-1,1},{1,1,-1,-1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{-1,-1,-1,-1,-1,-1,-1,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,0,1},{-1,-1,-1,-1,-1,0,-1,-1}};//存

9、儲算符優(yōu)先關(guān)系表,大于為1,小于或等于為-1,其它為0表示出錯charcurchar;charcurcmp;intright;/*設(shè)置開關(guān)項,當(dāng)出錯時為0*/inti,j;intk;/*比較字符在棧的位置*/voidpush(charpchar)/*入棧函數(shù)*/{temp=(Lchar*)malloc(sizeof(LLchar));temp->char_ch=pchar;temp->next=top;top=temp;}voidpop(void)/*出棧函數(shù)*/{i

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。