LL語法分析設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告文檔_第1頁
LL語法分析設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告文檔_第2頁
LL語法分析設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告文檔_第3頁
LL語法分析設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告文檔_第4頁
LL語法分析設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告文檔_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、-PAGE . z.LL(1)語法分析設(shè)計(jì)原理與實(shí)現(xiàn)技術(shù)實(shí)驗(yàn)報(bào)告變更說明日期版本變更位置變更說明作者2014/4/301.0初稿生成房皓實(shí)驗(yàn)?zāi)康模罕緦?shí)驗(yàn)的目的在于在教師的引導(dǎo)下以問題回朔與思維啟發(fā)的方式,使學(xué)生在不斷的探究過程中掌握編譯程序設(shè)計(jì)和構(gòu)造的根本原理和實(shí)現(xiàn)技術(shù),啟迪學(xué)生的抽象思維、激發(fā)學(xué)生的學(xué)習(xí)興趣、培養(yǎng)學(xué)生的探究精神和專業(yè)素養(yǎng),從而提高學(xué)生發(fā)現(xiàn)問題、分析問題和解決問題的能力。實(shí)驗(yàn)容:實(shí)驗(yàn)工程實(shí)現(xiàn)LL(1)分析中控制程序表驅(qū)動(dòng)程序;完成以下描述算術(shù)表達(dá)式的LL(1)文法的LL(1)分析程序。GE: ETEEATE|TFTTMFT|F (E)|iA+|-M*|/實(shí)驗(yàn)說明終結(jié)符號(hào)i 為用

2、戶定義的簡(jiǎn)單變量,即標(biāo)識(shí)符的定義。設(shè)計(jì)要求1輸入串應(yīng)是詞法分析的輸出二元式序列,即*算術(shù)表達(dá)式實(shí)驗(yàn)工程一的輸出結(jié)果。輸出為輸入串是否為該文法定義的算術(shù)表達(dá)式的判斷結(jié)果;2LL(1)分析過程應(yīng)能發(fā)現(xiàn)輸入串出錯(cuò);3設(shè)計(jì)兩個(gè)測(cè)試用例盡可能完備,正確和出錯(cuò),并給出測(cè)試結(jié)果。實(shí)驗(yàn)環(huán)境:操作系統(tǒng):Windows 7軟件:VC+6.0程序功能描述:提供了文件輸入方式,且輸入的容為二元式序列;能夠?qū)斎氲淖址龀稣_的LL(1)分析判斷,并給出判斷結(jié)果,判斷結(jié)果輸出到文件,并顯示在屏幕;能發(fā)現(xiàn)輸入串中的錯(cuò)誤,包含非法字符,輸入不匹配等;能夠處理一些可預(yù)見性的錯(cuò)誤,如文件不存在,輸入非法等。五、數(shù)據(jù)構(gòu)造設(shè)計(jì):

3、全局:局部main()中:六、程序構(gòu)造描述:設(shè)計(jì)方法:本程序采用從文件讀取的輸入方式,輸入的容需為二元式序列,然后按照LL(1)分析的方法對(duì)輸入的字符串進(jìn)展分析判斷,并輸出判斷結(jié)果,程序通過對(duì)輸入串的檢查能夠發(fā)現(xiàn)輸入串中的錯(cuò)誤。程序規(guī)定的單詞符號(hào)及其種別碼見下表:?jiǎn)卧~符號(hào)及其種別碼表單詞符號(hào)種別碼單詞符號(hào)種別碼1*52/6+3i7-4#8分析表i+-*/()#EETGETGGGATGGATGGGTTFHTFHHHHHMFHHMFHHHFFiF(E)AA+A-MM*M/主要函數(shù)說明:check_VT(char ch):bool型函數(shù),檢查ch是否為終結(jié)字符,是則返回true;create_ana

4、lyseTable():構(gòu)建分析表函數(shù),無返回值;error(FILE *fp):輸出錯(cuò)誤,表示不是該文法的句子,參數(shù)fp用于退出前將翻開的文件關(guān)閉;getnum_VN(char ch):int型函數(shù),查找ch在非終結(jié)字符中的位置并返回;getnum_VT(char ch):int型函數(shù),查找ch在終結(jié)字符中的位置并返回;justify():bool型函數(shù),判斷文件讀取容是否合法,包括檢查非法字符和不匹配現(xiàn)象,出錯(cuò)返回false,否則返回true;main():主函數(shù)。函數(shù)調(diào)用關(guān)系說明:main()調(diào)用check_VT(char ch)、create_analyseTable()、error(

5、FILE *fp)、getnum_VN(char ch)、getnum_VT(char ch)、justify();執(zhí)行框圖:實(shí)驗(yàn)過程結(jié)果截圖:測(cè)試用例一:i+i*i/i#測(cè)試用例二:i+i*i/#實(shí)驗(yàn)總結(jié):實(shí)驗(yàn)心得:通過本次實(shí)驗(yàn)我鍛煉了自己的上機(jī)操作能力及編程能力,并對(duì)理論知識(shí)有了進(jìn)一步的了解。教師提供的LL(1)分析法的流程圖給了我很大的幫助,使得本實(shí)驗(yàn)根本思路變得很清晰,用較為簡(jiǎn)單的算法就能實(shí)現(xiàn),程序的難點(diǎn)是產(chǎn)生式構(gòu)造體的構(gòu)造、分析表的構(gòu)造、解決實(shí)驗(yàn)中遇到的問題也花費(fèi)了一局部時(shí)間,我增長(zhǎng)了處理關(guān)于文件錯(cuò)誤的能力。實(shí)驗(yàn)中遇到的問題及解決方法:?jiǎn)栴}主要有從文件輸入二元式時(shí),需要檢查輸入的容是

6、否符合程序規(guī)定的字符種別碼,解決方法是用了兩個(gè)字符數(shù)組token,token2,分別記錄種別碼和字符,并增加了一個(gè)函數(shù)justify()根據(jù)既定的種別碼表判斷;當(dāng)輸入容不匹配或輸入容非法時(shí)要退出程序,此時(shí)假設(shè)不關(guān)閉已經(jīng)翻開的文件可能導(dǎo)致文件容受到破壞;解決方法是給error()函數(shù)設(shè)置一個(gè)文件指針變量參數(shù)FILE* fp,在退出程序之前通過fp關(guān)閉文件程序的自我評(píng)價(jià):此程序?qū)崿F(xiàn)了要求中的所有功能,并增加了輸入串錯(cuò)誤檢測(cè)的功能,但因編程能力及經(jīng)歷的有限,其中有的地方不免有些繁雜,還有一些潛藏的問題,需要進(jìn)一步測(cè)試與修改來提高程序的強(qiáng)健性。程序清單:/*課題名稱:LL(1)語法分析設(shè)計(jì)原理與實(shí)現(xiàn)技

7、術(shù) 房皓 進(jìn)修生 13410801*/*單詞符號(hào)及其分類編碼單詞符號(hào)種別碼(1)2+3-4*5/6i7#8/*文法*GE:E TEEATE|T FTTMFT|F (E)|iA +|-M *|/*改為等價(jià)文法*GE:ETGGATG|TFHHMFH|F(E)|iA+|-M*|/*分析表* i+-*/()#EETGETGGGATGGATGGGTTFHTFHHHHHMFHHMFHHHFFiF(E)AA+A-MM*M/*/#include#include#includeusing namespace std;#define MA* 50char analyseStackMA*;/分析棧char toke

8、nMA*;/輸入串typedef struct CSS/產(chǎn)生式構(gòu)造體char left;char right5;int right_length;CSS;CSS E,G,G1,T,H,H1,F,F1,A,A1,M,M1;CSS analyseTable78;void error(FILE *fp)fprintf(fp,%s,FAIL!);fclose(fp);coutFAIL!endl;e*it(0);bool justify(char ch,int i)/判斷文件讀取容是否合法,包括檢查非法字符和不匹配現(xiàn)象switch(ch)case 1:if(tokeni!=()return false;

9、break;case 2:if(tokeni!=)return false;break;case 3:if(tokeni!=+)return false;break;case 4:if(tokeni!=-)return false;break;case 5:if(tokeni!=*)return false;break;case 6:if(tokeni!=/)return false;break;case 7:if(tokeni!=i)return false;break;case 8:if(tokeni!=#)return false;break;default:return false;b

10、reak;return true;bool check_VT(char ch)if(ch=i | ch=+ | ch=- | ch=* | ch=/ | ch=( | ch=)return true;return false;int getnum_VN(char ch)char VN7=E,G,T,H,F,A,M;int i;for(i=0;i7;i+)if(ch=VNi)break;return i;int getnum_VT(char ch)char VT8=i,+,-,*,/,(,),#;int i;for(i=0;i8;i+)if(ch=VTi)break;if(i=8)coutFAI

11、L!endl;e*it(0);return i;void create_analyseTable()int i,j;E.left=E;strcpy(E.right,TG);E.right_length=2;G.left=G;strcpy(G.right,ATG);G.right_length=3;G1.left=G;strcpy(G1.right,NULL);G1.right_length=0;T.left=T;strcpy(T.right,FH);T.right_length=2;H.left=H;strcpy(H.right,MFH);H.right_length=3;H1.left=H;

12、strcpy(H1.right,NULL);H1.right_length=0;F.left=F;strcpy(F.right,(E);F.right_length=3;F1.left=F;strcpy(F1.right,i);F1.right_length=1;A.left=A;strcpy(A.right,+);A.right_length=1;A1.left=A;strcpy(A1.right,-);A1.right_length=1;M.left=M;strcpy(M.right,*);M.right_length=1;M1.left=M;strcpy(M1.right,/);M1.r

13、ight_length=1;for(i=0;i7;i+)for(j=0;j8;j+)analyseTableij.left=N;analyseTableij.right_length=0;analyseTable00=E;analyseTable05=E;analyseTable11=G;analyseTable12=G;analyseTable16=G1;analyseTable17=G1;analyseTable20=T;analyseTable25=T;analyseTable31=H1;analyseTable32=H1;analyseTable33=H;analyseTable34=

14、H;analyseTable36=H1;analyseTable37=H1;analyseTable40=F1;analyseTable45=F;analyseTable51=A;analyseTable52=A1;analyseTable63=M;analyseTable64=M1;int main()char a,*;int i=0,j=0,m,u=0,v=0;/i指示棧頂位置,j指示剩余串掃描位置int num_vn,num_vt;bool flag=true;char token1MA*;char token2MA*;FILE *fpin,*fpout;create_analyseTa

15、ble();/創(chuàng)立分析表/讀文件局部if(fpin=fopen(input.t*t,r)=NULL)cout文件翻開失??!endl;e*it(0);if(fpout=fopen(result.t*t,w)=NULL)fclose(fpin);cout文件翻開失?。ndl;e*it(0);token1v+=fgetc(fpin);while(!feof(fpin)token1v+=fgetc(fpin);if(v%5)=0)token2u=token1v-4;tokenu=token1v-2;if(justify(token2u,u)u+;elsefclose(fpin);error(fpout);fclose(fpin);if(v-1)%5 != 0)error(fpout);cout讀入字符串為:tokenendl;/分析器局部analyseStacki+=#;analyseStacki=E;a=tokenj;while(flag)*=analyseStacki;if(check_VT(*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論