編譯原理詞法分析與語(yǔ)法分析實(shí)驗(yàn)報(bào)告_第1頁(yè)
編譯原理詞法分析與語(yǔ)法分析實(shí)驗(yàn)報(bào)告_第2頁(yè)
編譯原理詞法分析與語(yǔ)法分析實(shí)驗(yàn)報(bào)告_第3頁(yè)
編譯原理詞法分析與語(yǔ)法分析實(shí)驗(yàn)報(bào)告_第4頁(yè)
編譯原理詞法分析與語(yǔ)法分析實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.實(shí) 驗(yàn) 三 詞法分析與語(yǔ)法分析程序設(shè)計(jì)實(shí)驗(yàn)日期: 2011 年 11 月 11日 評(píng)分 批閱教師簽字 一、實(shí)驗(yàn)?zāi)康幕菊莆沼?jì)算機(jī)語(yǔ)言的詞法分析程序和語(yǔ)法分析程序的設(shè)計(jì)方法二、實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)要求:1根據(jù)以下的正規(guī)式,畫(huà)出狀態(tài)圖;標(biāo)識(shí)符:(|)*關(guān)鍵字:if then else while do十進(jìn)制整數(shù):0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 運(yùn)算符和分隔符:+ - * / = ( ) ;2根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析函數(shù)int scan( ),從鍵盤(pán)讀入數(shù)據(jù),分析出一個(gè)單詞。3對(duì)于只含有+、*運(yùn)算的算術(shù)表達(dá)式的如下文法,編寫(xiě)相應(yīng)的語(yǔ)法分析程序,要

2、求用LL(1)分析表實(shí)現(xiàn),并以id+id*id為例進(jìn)行測(cè)試:E TE E +TE| T FTT *FT|F (E)| id實(shí)驗(yàn)步驟1根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析算法2采用C+語(yǔ)言,實(shí)現(xiàn)該算法3調(diào)試程序:輸入一組單詞,檢查輸出結(jié)果。4 編制給定文法的非遞歸的預(yù)測(cè)分析程序,并加以測(cè)試。三、實(shí)驗(yàn)環(huán)境計(jì)算機(jī)、Windows 操作系統(tǒng)、Visual C+ 程序集成環(huán)境。四、實(shí)驗(yàn)原理(或程序框圖)及步驟LL(1)中的第一個(gè)L表示從左到右掃描輸入,第二個(gè)L表示產(chǎn)生最右推導(dǎo),而1則表示在每一步中只需要向前看一個(gè)輸入符號(hào)來(lái)決定語(yǔ)法分析動(dòng)作。構(gòu)造一個(gè)預(yù)測(cè)分析表如下:輸入:文法G輸出:預(yù)測(cè)分析表 M方法:對(duì)于文法G的每

3、個(gè)產(chǎn)生式A,進(jìn)行如下處理:1):對(duì)于FIRST()中的每個(gè)終結(jié)符a,將A加入到MA, 中。2):如果在FIRST()中,那么對(duì)于FOLLOW(A)中的每個(gè)終結(jié)符b,將A加入到MA, 中。如果在FIRST()中,且$在FOLLOW(A)中,也將A加入到MA, $中。完成上面操作之后,如果MA, 中沒(méi)有產(chǎn)生式,那么將MA, 設(shè)置為error。五、程序源代碼詞法分析函數(shù):struct key_kord char *word;int id;key_word keyword=if,1,then,2,else,3,while,4,do,5,integer,16;void scan (FILE *ftp)c

4、har temp_char;int i,c;while(!feof(ftp)temp_char=fgetc(ftp);if(isalpha(temp_char) TOKEN0=temp_char;temp_char=fgetc(ftp);i=1;while(isalnum(temp_char) TOKENi=temp_char;i+;temp_char=fgetc(ftp);TOKENi=0;fseek();c=lookup(TOKEN);if(c=0) out (ID,TOKEN);elseout (c, );else if(isdigit(temp_char)TOKEN0=temp_cha

5、r;temp_char=fgetc(ftp);i=1;while(isdigit(temp_char)TOKENi=temp_char;i+;temp_char=fgetc(ftp);TOKENi=0;fseek();out(INT,TOKEN);elseswitch(temp_char)case ) out(NE, );elsefseek();out(LT, );break;case =: out(EQ, ); break;case : temp_char=fgetc(ftp);if(temp_char=)out(GE, );elsefseek();(GT, );break;case : t

6、emp_char=fgetc(ftp);if(temp_char=) out(FZ, );elsefseek();report_error(temp_char);break;case /: temp_char=fgetc(ftp); if(temp_char=/)dotemp_char=fgetc(ftp);while(temp_char!=n);graphnum+;elsefseek();out(DEV, );break;case : break; case n: graphnum+; break; case : break; case -1 : break; default : repor

7、t_error(temp_char);break;return;LL(1)算法實(shí)現(xiàn):#define MAXSYMBOL 30temp_charar NT=E,A,T,B,F;temp_charar TE=i,+,*,(,(,);temp_charar *analysisTableMAXSYMBOL3= E,i,TG,E,+,E,*,E,(,TG,E,),E,#, A,i,A,+,+TA,A,*,A,(,A,),$,A,#,$, T,i,FB,T,+,T,*,T,(,FB,T,),T,#, B,i,B,+,$,B,*,*FB,B,(,B,),$,B,#,$, F,i,i,F,+,F,*,F,(,

8、(E),F,),F,#,;int Stack_Count(HEADSTACK *head) int count=0; if(head-stackHead=NULL) return 0; TEMP_CHARARSTACK *currentNode=head-stackHead; while(currentNode!=NULL) currentNode=currentNode-nextNode; count+; return count;HEADSTACK *Stack_Init() HEADSTACK *headNode=(HEADSTACK *)malloc(sizeof(HEADSTACK)

9、; headNode-stackHead=NULL; return headNode;void Stack_Push(HEADSTACK *head,temp_charar temp_char) TEMP_CHARARSTACK *currentNode,*tail; tail=(TEMP_CHARARSTACK *)malloc(sizeof(TEMP_CHARARSTACK); tail-temp_char=temp_char; tail-nextNode=NULL; if(head-stackHead=NULL) head-stackHead=tail; return; currentN

10、ode=head-stackHead; while(currentNode-nextNode!=NULL) currentNode=currentNode-nextNode; currentNode-nextNode=tail; currentNode=tail; currentNode-nextNode=NULL;TEMP_CHARARSTACK Stack_Pop(HEADSTACK *head) TEMP_CHARARSTACK *currentNode,*tail,popNode; if(head-stackHead=NULL) printf(Error:The Stack does

11、not has noden); return popNode; currentNode=tail=head-stackHead; if(tail-nextNode=NULL) popNode.temp_char=tail-temp_char; popNode.nextNode=NULL; head-stackHead=NULL; return popNode; while (tail-nextNode!=NULL) tail=tail-nextNode; if(tail-nextNode=NULL) currentNode-nextNode=NULL; popNode.temp_char=ta

12、il-temp_char; popNode.nextNode=tail-nextNode; return popNode; currentNode=currentNode-nextNode; bool IsNT(temp_charar temp_char) for(int i=0;isizeof(NT)/sizeof(temp_charar);i+) if(temp_char=NTi) return true; return false;bool IsTE(temp_charar temp_char) for(int i=0;isizeof(TE)/sizeof(temp_charar);i+) if(temp_char=TEi) return true; return false; temp_charar* GetMatrixValue(temp_charar NT,temp_charar TE) temp_charar nt2,te2; nt0=NT; nt1=0; te0=TE; te1=0; for(int i=0;i-1;j-) Stack_Push(head,concludej); else

溫馨提示

  • 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)論