編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)

編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)

ID:40269362

大?。?7.50 KB

頁數(shù):6頁

時(shí)間:2019-07-30

編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)_第1頁
編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)_第2頁
編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)_第3頁
編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)_第4頁
編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)_第5頁
資源描述:

《編譯原理預(yù)測分析法實(shí)驗(yàn)報(bào)告(C語言編寫)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:預(yù)測分析法姓名:專業(yè)班級:計(jì)科學(xué)號:指導(dǎo)老師:日期:2011年6月1日目的要求1.構(gòu)造文法的語法分析程序,要求采用預(yù)測分析法對輸入的字符串進(jìn)行語法分析。2.加深對預(yù)測分析LL(1)分析法的理解和掌握。實(shí)驗(yàn)內(nèi)容對文法G進(jìn)行語法分析,文法G如下所示:*0.S→a*/*1.S→^*2.S→(T)*3.T→SW**4.W→,SW*5.W→ε;并對任給的一個(gè)輸入串進(jìn)行語法分析檢查。程序要求能對輸入串進(jìn)行預(yù)測分析,能判別程序是否符合已知的語法規(guī)則,如果不符合(編譯出錯(cuò)),則輸出錯(cuò)誤信息。程

2、序輸入/輸出示例:輸入:一個(gè)以#結(jié)束的符號串:例如:(a,a)#輸出:步數(shù)分析棧輸入串所用規(guī)則(1)#S(a,a))#2源程序://LL(1)預(yù)測分析控制程序#include#include#includecharstr[100];//存儲(chǔ)待分析的句子constcharT[]="a^(),#";//終結(jié)符,分析表的列符constcharNT[]="STW";//非終結(jié)符,分析表的行符/*指向產(chǎn)生式右部符號串*/constchar*p[]={/*0

3、.S→a*/"a",/*1.S→^*/"^",/*2.S→(T)*/"(T)",/*3.T→SW*/"SW",/*4.W→,SW*/",SW",/*5.W→ε;*/""};//設(shè)M[i][j]=x,通過p[M[i][j]]=p[x]獲取右部符號串。constintM[][6]={/*a^(),#*//*S*/{0,1,2,-1,-1,-1},/*T*/{3,3,3,-1,-1,-1},/*W*/{-1,-1,-1,5,4,-1}};voidinit()//輸入待分析的句子{printf("請輸入待分析的

4、句子(以$結(jié)束):");scanf("%s",str);}intlin(charc);//非終結(jié)符轉(zhuǎn)換為行號intcol(charc);//終結(jié)轉(zhuǎn)換為列號boolisNT(charc);//isNT判斷是否是非終結(jié)符boolisT(charc);//isT判斷是否是終結(jié)符。voidmain(void){inti,j=0;intflag=1,flag2=0;charA;//設(shè)置指示句子的當(dāng)前字符charstack[20]={'#','S'};//棧賦初值inttop=1;//設(shè)置棧頂指針charX='

5、';//存儲(chǔ)棧頂字符init();A=str[0];printf("t步數(shù)t分析棧t輸入串t所用規(guī)則");//在屏幕上輸出列表標(biāo)題while(1){printf("t(%d)t",++j);//輸出當(dāng)前執(zhí)行步數(shù)for(i=0;i<=top;i++)//輸出當(dāng)前棧的內(nèi)容(出棧前){printf("%c",stack[i]);}printf("t");for(i=flag-1;str[i]!='$';i++){printf("%c",str[i]);}if(flag2==1){prin

6、tf("t%d",M[lin(X)][col(A)]);flag2=0;}//出棧X=stack[top--];if(X=='#')//是結(jié)束符{if(X==A)//是結(jié)束符{printf("tAcc");}elseprintf("tERROR");break;}elseif(isT(X))//是終結(jié)符{A=str[flag++];}elseif(isNT(X))//是否是非終結(jié)符{flag2=1;//逆序入棧for(i=strlen(p[M[lin(X)][col(A)]])-1;i>=

7、0;i--){stack[++top]=*(p[M[lin(X)][col(A)]]+i);}}else{printf("Errorinmain()>%c",X);exit(0);}}}intlin(charc){for(inti=0;i<(int)strlen(NT);i++){if(c==NT[i]){returni;}}printf("Errorinlin()>%c",c);exit(0);}intcol(charc){for(inti=0;i<(int)strlen(T);i++){if

8、(c==T[i])returni;}printf("Errorincol()>%c",c);exit(0);}boolisNT(charc)//是否是非終結(jié)符{for(inti=0;i<(int)strlen(NT);i++){if(c==NT[i])returntrue;}returnfalse;}boolisT(charc)//是否是終結(jié)符(不包括'#'){for(inti=0;i<(int)strlen(T)-1;i++){if(

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

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

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