資源描述:
《編譯原理遞歸下降分析法實(shí)驗(yàn).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、計(jì)算機(jī)科學(xué)與工程學(xué)院《編譯原理》試驗(yàn)報(bào)告[二]專業(yè)班級(jí)10計(jì)算機(jī)工程02試驗(yàn)地點(diǎn)計(jì)算機(jī)大樓8號(hào)機(jī)房學(xué)生學(xué)號(hào)1005080214指導(dǎo)教師蔡瓊學(xué)生姓名劉子龍?jiān)囼?yàn)時(shí)間2012-11-24試驗(yàn)項(xiàng)目算法與數(shù)據(jù)結(jié)構(gòu)試驗(yàn)類別基礎(chǔ)性()設(shè)計(jì)性()綜合性(√)其它()試驗(yàn)?zāi)康募耙螅?)掌握自上而下語法分析的要求與特點(diǎn)。(2)掌握遞歸下降語法分析的基本原理和方法。(3)掌握相應(yīng)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法。成績(jī)?cè)u(píng)定表類別評(píng)分標(biāo)準(zhǔn)分值得分合計(jì)上機(jī)表現(xiàn)積極出勤、遵守紀(jì)律主動(dòng)完成設(shè)計(jì)任務(wù)30分程序與報(bào)告程序代碼規(guī)范、功能正確報(bào)告詳實(shí)完整、體現(xiàn)收獲70分備注:評(píng)閱教師:日期:年月日試驗(yàn)內(nèi)容一、實(shí)驗(yàn)?zāi)康?/p>
2、和要求1、實(shí)驗(yàn)?zāi)康模海?)掌握自上而下語法分析的要求與特點(diǎn)。(2)掌握遞歸下降語法分析的基本原理和方法。(3)掌握相應(yīng)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法。2、實(shí)驗(yàn)內(nèi)容:編程實(shí)現(xiàn)給定算術(shù)表達(dá)式的遞歸下降分析器。算術(shù)表達(dá)式文法如下:EàE+T
3、TTàT*F
4、FFà(E)
5、i二、設(shè)計(jì)分析根據(jù)實(shí)驗(yàn)要求,采用遞歸下降的方法進(jìn)行詞法分析。遞歸下降分析法是一種確定的自上而下分析方法,它的基本方法是給文法每一個(gè)非終結(jié)符號(hào)設(shè)計(jì)一相應(yīng)的子程序。由于文法的產(chǎn)生式往往是遞歸的,因而這些子程序也是遞歸的,也就是說,只要調(diào)用第一個(gè)產(chǎn)生式,程序就會(huì)執(zhí)行到結(jié)束,其他子程序?qū)?huì)在其中調(diào)用。過程體按規(guī)則右部符號(hào)串的順
6、序編寫,構(gòu)造一個(gè)數(shù)組s,用來存放輸入字符串,構(gòu)造一個(gè)函數(shù)read(),將s[]中將要匹配的字符讀入ch中,用于字符匹配時(shí)做比較,走產(chǎn)生式右部的表法式,遇到終結(jié)符,就進(jìn)行匹配,失敗則程序結(jié)束,字符串不滿足要求;遇到非終結(jié)符,則調(diào)用相應(yīng)的函數(shù)。當(dāng)讀到字符串的標(biāo)識(shí)符’#’號(hào)時(shí),程序結(jié)束,字符串滿足要求。三、源程序代碼/****************************************遞歸下降詞法分析**************************************************///文法G[E]:E-->E+T
7、T//T-->T*F
8、F/
9、/F-->(E)
10、i/*********************************************************************************************************/#include#include#include#defineMax50voidE_function();voidEE_function();voidT_function();voidTT_function();voidF_function();staticinti=-1;cha
11、rch;charstr[Max];voidTheEnd(){printf("Wrong!");exit(0);}voidread(){i++;if(*(str+i)!='#')ch=*(str+i);else{printf("分析結(jié)果如下:");printf("Right!");exit(0);}}voidE_function(){printf("tE");T_function();EE_function();}voidEE_function(){EE_lab:printf("tEE");if(ch=='+'){read();T_functi
12、on();gotoEE_lab;}else{if(ch!='#'&&ch!=')')TheEnd();}}voidT_function(){printf("tT");F_function();TT_function();}voidTT_function(){TT_lab:printf("tTT");if(ch=='*'){read();F_function();gotoTT_lab;}else{if(ch!='+'&&ch!=')'&&ch!='#')TheEnd();}}voidF_function(){printf("tF");if(ch=='
13、('){read();E_function();if(ch!=')')TheEnd();elseread();}elseif(ch=='i')read();elseTheEnd();}intmain(){printf("遞歸下降分析法:");charq[2]={"#"};printf("請(qǐng)輸入字符串:");gets(str);strcat(str,q);if(strlen(str)