資源描述:
《編譯原理實驗三.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、《編譯原理》實驗報告實驗序號: 實驗三 實驗項目名稱:語法分析(遞歸下降法)學 號姓 名專業(yè)、班軟件工程二班實驗地點實316指導教師實驗時間2011-3-10一、實驗?zāi)康募耙笸ㄟ^本次實驗的學習,學生需要掌握開發(fā)遞歸下降分析方法的基本流程和基本方法,并提交一個完整的應(yīng)用程序。二、實驗設(shè)備(環(huán)境)及要求VC++60.三、實驗內(nèi)容與步驟完成以下描述算術(shù)表達式的LL(1)文法的遞歸下降分析程序G[E]:E→TE′E′→ATE′
2、εT→FT′T′→MFT′
3、εF→(E)
4、iA→+
5、-M→*
6、/說明:終結(jié)符號i為用
7、戶定義的簡單變量,即標識符的定義。四、實驗結(jié)果與數(shù)據(jù)處理實驗代碼:#include12#include#include#include#includeusingnamespacestd;structNode1{charvn;charvt;chars[10];}MAP[20];//存儲分析預(yù)測表每個位置對應(yīng)的終結(jié)符,非終結(jié)符,產(chǎn)生式intk;//用R代表E',W代表T',e代表空charG[10][10]={"E->TR","R->+TR"
8、,"R->e","T->FW","W->*FW","W->e","F->(E)","F->i"};//存儲文法中的產(chǎn)生式charVN[6]={'E','R','T','W','F'};//存儲非終結(jié)符charVT[6]={'i','+','*','(',')','#'};//存儲終結(jié)符charSELECT[10][10]={"(,i","+","),#","(,i","*","+,),#","(","i"};//存儲文法中每個產(chǎn)生式對應(yīng)的SELECT集charRight[10][8]={"->TR","->+TR","->
9、e","->FW","->*FW","->e","->(E)","->i"};stackstak,stak1,stak2;boolcompare(char*a,char*b){inti,la=strlen(a),j,lb=strlen(b);for(i=0;i10、].vt==vt)returnMAP[i].s;}return"error";}char*Analyse(char*word){12charp,action[10],output[10];inti=1,j,l=strlen(word),k=0,l_act,m;while(!stak.empty())stak.pop();stak.push('#');stak.push('E');printf("_________________________________________________________________
11、_______________");printf("對符號串%s的分析過程",word);printf("步驟棧頂元素剩余輸入串推到所用產(chǎn)生式或匹配");p=stak.top();while(p!='#'){printf("%7d",i++);p=stak.top();stak.pop();printf("%6c",p);for(j=k,m=0;j