資源描述:
《編譯原理實(shí)驗(yàn)二 預(yù)測(cè)分析法.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、實(shí)驗(yàn)二預(yù)測(cè)分析法一、實(shí)驗(yàn)項(xiàng)目名稱預(yù)測(cè)分析法二、實(shí)驗(yàn)?zāi)康母鶕?jù)某一LL(1)文法編制調(diào)試預(yù)測(cè)分析程序,以便對(duì)任意輸入的符號(hào)串進(jìn)行分析。本次實(shí)驗(yàn)的目的主要是加深對(duì)預(yù)測(cè)分析法的理解。三、實(shí)驗(yàn)環(huán)境Win8系統(tǒng),VC++6.0軟件,C語(yǔ)言開發(fā)工具四、實(shí)驗(yàn)內(nèi)容本次實(shí)驗(yàn)的LL(1)文法為表達(dá)式文法:E→E+T
2、TT→T*F
3、FF→i
4、(E)編寫識(shí)別表達(dá)式文法的合法句子的預(yù)測(cè)分析程序,對(duì)輸入的任意符號(hào)串,給出分析過(guò)程及分析結(jié)果。分析過(guò)程要求輸出步驟、分析棧、剩余輸入串和所用產(chǎn)生式。如果該符號(hào)串不是表達(dá)式文法的合法句子,要給出盡量詳細(xì)的錯(cuò)誤提示。五、實(shí)
5、驗(yàn)步驟首先將終結(jié)符和非終結(jié)符以及預(yù)測(cè)分析表計(jì)算出來(lái),并保存到數(shù)組中然后對(duì)輸入的字符進(jìn)行分析,將一個(gè)個(gè)終結(jié)符進(jìn)行分配在分配的過(guò)程中輸出每一步步驟對(duì)錯(cuò)誤處,顯示步驟數(shù)和錯(cuò)誤字符六、源程序清單、測(cè)試數(shù)據(jù)、結(jié)果源程序:#include#include#includeusingnamespacestd;charzhong[6]={'i','+','*','(',')','#'};charfzhong[5]={'E','R','T','Y','F'};charshu[20];9//R代表
6、E'Y代表T'stringbiao[5][6]={{"TR","","","TR","",""},{"","+TR","","","@","@"},//@代表空{(diào)"FY","","","FY","",""},{"","@","*FY","","@","@"},{"i","","","(E)","",""}};#defineN20;typedefchartype;typedefstruct{type*base;type*top;intstacksize;}sqstack;voidinitstack(sqstack&s){s.base=
7、newtype[2];if(!s.base)cout<<"錯(cuò)誤";s.top=s.base;s.stacksize=N;}voidpush(sqstack&s,typee){if(s.top-s.base==s.stacksize)cout<<"棧滿";*s.top++=e;}voidpop(sqstack&s,type&e){if(s.top==s.base)cout<<"棧空";e=*--s.top;}typegettop(sqstacks)9{if(s.top==s.base)cout<<"???;return*(s.top-
8、1);}intfind1(charx){for(inti=0;i<5;i++){if(x==fzhong[i]){break;}}returni;}intfind2(charx){for(inti=0;i<6;i++){if(x==zhong[i]){break;}}returni;}voidshowstack(sqstackfen){chara;sqstackx;initstack(x);while(fen.top!=fen.base){pop(fen,a);push(x,a);}9while(x.top!=x.base){pop
9、(x,a);cout<10、p(fen,ch2);}elseif(gettop(fen)=='#'){cout<11、d2(shu[i])]=="@"){cout<
|