資源描述:
《哈工大 威海 編譯原理 實驗三 語義分析與中間代碼生成》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、哈爾濱工業(yè)大學(xué)(威海)計算機學(xué)院編譯原理實驗報告姓名院系計算機學(xué)院學(xué)號090410任課教師指導(dǎo)教師實驗地點宋健二樓機房實驗時間實驗名稱實驗三語義分析及中間代碼生成同組人無預(yù)習(xí)報告(對實驗主要內(nèi)容的認識)得分(1)通過本次試驗,我應(yīng)該加深對于編譯原理制導(dǎo)方案的理解,并且加深對于語法變換的所起到的作用;(2)對于試驗中要用到得中間代碼的格式規(guī)范,也應(yīng)該進一步的分析和掌握(3)能夠很好的使用到前面開發(fā)出來的詞法分析器和語法分析器,將它們與語義分析器結(jié)合起來,跟好的更系統(tǒng)的掌握編譯原理這門專業(yè)技能(4)關(guān)于符
2、號表以及token串表的維護,現(xiàn)在終于使其有所作用實驗內(nèi)容(問題,思路,程序,結(jié)果)得分(1)開發(fā)環(huán)境:vs2010(2)輸入:在運行打開的軟件下(win32格式),輸入相應(yīng)的代碼(即要進行詞法分析的字符串)(比如:inta;)(3)輸出:在輸入字符串后,按回車鍵后,既可以得到相應(yīng)的詞法分析的結(jié)果(比如:inta的輸入對應(yīng)的輸出如下:inta;首先對于詞法分析打印出:Int---key//關(guān)鍵字A---str//字符串;---bor//邊界符號對于語法分析:Accept//編譯語句分析成功對于輸入字符
3、串的語義分析和中間代碼的生成如下中間代碼:)(4)在相應(yīng)的運行程序的文件夾中生成一個txt文件,用來存儲生成的Token鏈表(5)系統(tǒng)功能:(2)開發(fā)平臺(操作系統(tǒng)、設(shè)計語言):1、操作系統(tǒng):windows72、設(shè)計語言:c++3、編譯器:vs2010(3)設(shè)計方案;1)主數(shù)據(jù)流圖開始詞法分析Token表的生成及修改語法分析修改token表語義分析語句是否為變量聲明對語句按照文法的action表進行歸約加一個四元式結(jié)點向下進行語義分析生成中間代碼結(jié)束2)主要數(shù)據(jù)結(jié)構(gòu):符號表、TOKEN串表等。(1)T
4、oken數(shù)據(jù)結(jié)構(gòu)用類實現(xiàn):symTableclasssymTable{private:char*symName;char*symStyle;intsymLength;public:symTable*next;public:symTable();symTable(char*sysName,char*sysStyle,intsysLength);symTable(symTable&s);char*getName();char*getStyle();intgetLength();voidsymAdd(sym
5、Table*symFirst);voidprint();};(2)其他數(shù)據(jù)結(jié)構(gòu)用結(jié)構(gòu)體或者數(shù)組實現(xiàn):charG[30][30];//useamatrixtostoregrammarG//存放文法,用來分析作為輸入intlength[30];//lengthusetostoreeachformula'slengthintnumber=0;booltempofinput[150];//bufferofinput//輸入???charstr_vn[30];//putallvnintoitintsize_vn
6、=0;charstr_vt[150];//putallvtintoitintsize_vt=0;boolfirst_vn[30][150];charbuffer[50];//用來存放生成CLOSURE(I)時需要的first_set也用來讀入用戶的輸入串^_^intbsize=0;structthri{intbeg;intnex;charch;};thritrans[200];intsize_trans=0;//定義項目集的形式structproj{intformula_numb;intpart;ch
7、arexpc;};/*項目集*/projitems[200][200];intCcount=0;intsize_item[200];/*狀態(tài)轉(zhuǎn)換表*/structaction{charch;intnxt_sta;};actionaction_table[200][200];intsize_act_table[200];structstr//詞法string結(jié)構(gòu)體{intnum;//編號stringword;//字符串內(nèi)容str*next;};structaction//語法action表結(jié)構(gòu)體{cha
8、rsr;//移進或歸約intstate;//轉(zhuǎn)到的狀態(tài)編號};intgo_to[46][11];//語法go_to表structike//語法分析棧結(jié)構(gòu)體,雙鏈{ike*pre;intnum;//狀態(tài)intword;//符號編碼ike*next;};ike*stack_head,*stack_tail;//分析棧首尾指針structL//語義四元式的數(shù)據(jù)結(jié)構(gòu){intk;stringop;//操作符stringop1;//操作數(shù)stringop2;//操作