資源描述:
《編譯原理實驗三源程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、編譯原理實驗3實驗目的:理解屬性文法,理解語法制導翻譯的基本思想和方法。實驗內(nèi)容:設計并實現(xiàn)實現(xiàn)整數(shù)四則運算的遞歸下降翻譯器。實驗要求:編寫程序,上機調(diào)試和測試,紀錄調(diào)試和測試情況,結(jié)合程序進行分析。實驗環(huán)境:VisualC++6.0或以上版本,Windows2000或以上版本,匯編工具(在Software子目錄下)。實現(xiàn)要點與提示:需要實現(xiàn)的語義分析程序的功能是,接受一個表達式,分析該表達式,并在分析的過程中建立該表達式的抽象語法樹。由于四則運算表達式的抽象語法樹可基本上看作是二叉樹,因此中序遍歷序列應該和輸入的表達式一樣——除了沒有括號之外。可輸出中序遍歷
2、序列檢測程序功能是否正確。如果每個分支節(jié)點用一個臨時變量標記,則對四則運算表達式的抽象語法樹進行后序遍歷,可以得到輸入表達式所對應的四元式序列(實驗4要用到這樣的四元式序列)。例如輸入1+2*(3+4),對應的抽象語法樹的中序遍歷序列、四元式序列分別為#include#include#includetypedefenumSymbol{ERR=-1,END,NUM,PLUS,MINUS,TIMES,SLASH,LPAREN,RPAREN}Symbol;charch;SymbolSYM;intflag=0;i
3、ntLastIsNum=0;intnumber;Symbolgettoken();voiderror();voidexpr();voidexprRest();voidterm();voidtermRest();voidfactor();voidmatch(Symbol);voidmain(){SYM=gettoken();expr();if(flag==0&&SYM==END)printf("語法分析正確");10elseprintf("語法分析錯誤");}intgettoken(){if(LastIsNum==0)ch=getchar();elseL
4、astIsNum=0;while(ch==''){ch=getchar();}if(isdigit(ch)){number=0;while(isdigit(ch)){number=ch-'0'+10*number;ch=getchar();}LastIsNum=1;returnNUM;}if(ch=='+')returnPLUS;if(ch=='-')returnMINUS;if(ch=='*')returnTIMES;if(ch=='/')returnSLASH;if(ch=='(')returnLPAREN;11if(ch==')')returnRPARE
5、N;if(ch=='')returnEND;returnERR;}voiderror(){flag=1;}voidmatch(SymbolexpectedToken){if(SYM==expectedToken)SYM=gettoken();elseerror();}voidexpr(){term();exprRest();}voidexprRest(){if(SYM==PLUS
6、
7、SYM==MINUS){match(SYM);term();exprRest();}}voidterm(){factor();termRest();}voidtermRest(
8、){12if(SYM==TIMES
9、
10、SYM==SLASH){match(SYM);factor();termRest();}}voidfactor(){if(SYM==LPAREN){match(LPAREN);expr();match(RPAREN);}elseif(SYM==NUM){SYM=gettoken();}elseerror();}13