編譯原理-LR分析法(附源碼).doc
《編譯原理-LR分析法(附源碼).doc》由會員分享,可在線閱讀,更多相關(guān)《編譯原理-LR分析法(附源碼).doc(4頁珍藏版)》請在裝配圖網(wǎng)上搜索。
LR分析 實驗報告 一、實驗項目名稱LR分析二、實驗?zāi)康?掌握用 LR 分析法對表達(dá)式文法進(jìn)行自底向上語法分析的算法,加深對 LR 分析法的三、實驗環(huán)境 Windows 10Microsoft Visual Studio 2015四、實驗內(nèi)容 本次實驗的 SLR(1)文法為表達(dá)式拓廣文法: (0) SE (1) EE+T (2) ET (3) TT*F (4) TF (5) F(E) (6) Fi 改進(jìn)后的 SLR(1)分析表如教材 142 頁圖 7.8。 編寫識別表達(dá)式拓廣文法的合法句子的 SLR(1)分析程序,對輸入的任意符號串,給 出分析過程及分析結(jié)果。分析過程要求輸出步驟、狀態(tài)棧、符號棧、輸入串和語法動作。 如果該符號串不是表達(dá)式文法的合法句子,要給出盡量詳細(xì)的錯誤提示。五、實驗步驟 將改進(jìn)后的 SLR(1)分析表存到一個數(shù)組中,本次實驗的文法是寫在程序中的,不可改變,這種方法降低了實驗代碼的難度。六、源程序清單、測試數(shù)據(jù)、結(jié)果 #define _CRT_SECURE_NO_WARNINGS#include#includechar*action126 = /*ACTION*/S5#,NULL,NULL,S4#,NULL,NULL,NULL,S6#,NULL,NULL,NULL,acc,NULL,r2#,S7#,NULL,r2#,r2#,NULL,r4#,r4#,NULL,r4#,r4#,S5#,NULL,NULL,S4#,NULL,NULL,NULL,r6#,r6#,NULL,r6#,r6#,S5#,NULL,NULL,S4#,NULL,NULL,S5#,NULL,NULL,S4#,NULL,NULL,NULL,S6#,NULL,NULL,S11#,NULL,NULL,r1#,S7#,NULL,r1#,r1#, NULL,r3#,r3#,NULL,r3#,r3#, NULL,r5#,r5#,NULL,r5#,r5#, ;int goto1123 = /*GOTO*/1,2,3,0,0,0,0,0,0,0,0,0,8,2,3,0,0,0,0,9,3,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0 ;char vt6 = i,+,(,),*,# ;/*存放終結(jié)符*/char vn3 = E,T,F, ;/*存放非終結(jié)符*/char *LR7 = S-E#,E-E+T#,E-T#,T-T*F#,T-F#,F-(E),F-i ;/*存放產(chǎn)生式*/int a10;char b10, c10, c1;int top1, top2, top3, top, m, n;void lr() int g, h, i, j, k, l, p, y, z, count;char x, copy10, copy110;top1 = 0; top2 = 0; top3 = 0; top = 0;a0 = 0; y = a0; b0 = #;count = 0; z = 0;printf(-請輸入表達(dá)式(以#結(jié)尾)-n);do scanf(%c, &c1);ctop3 = c1;top3 = top3 + 1; while (c1 != #);printf(步驟t狀態(tài)棧tt符號棧tt輸入串ttACTIONtGOTOn);do y = z; m = 0; n = 0; /*y,z指向狀態(tài)棧棧頂*/g = top; j = 0; k = 0;x = ctop;count+;printf(%dt, count);while (m = top1) /*輸出狀態(tài)棧*/printf(%d, am);m = m + 1;printf(tt);while (n = top2) /*輸出符號棧*/printf(%c, bn); n = n + 1;printf(tt);while (g = top3) /*輸出輸入串*/printf(%c, cg);g = g + 1;printf(tt);while (x != vtj & j = 6)j+;if (j = 6 & x != vtj)printf(errorn);return;if (actionyj = NULL) printf(errorn);return;elsestrcpy(copy, actionyj);if (copy0 = S)/*處理移進(jìn)*/z = copy1 - 0;top1 = top1 + 1; top2 = top2 + 1;atop1 = z; btop2 = x; top = top + 1; i = 0;while (copyi != #)printf(%c, copyi); i+;printf(n);if (copy0 = r)/*處理歸約*/i = 0; while (copyi != #)printf(%c, copyi);i+;h = copy1 - 0;strcpy(copy1, LRh);while (copy10 != vnk)k+;l = strlen(LRh) - 4;top1 = top1 - l + 1;top2 = top2 - l + 1;y = atop1 - 1;p = goto1yk;atop1 = p;btop2 = copy10;z = p;printf(t);printf(%dn, p);while (actionyj != acc);printf(accn); getchar(); 七、實驗小結(jié)和思考 實現(xiàn)LR(1)文法很困難,我是直接將文法寫在程序中直接輸出分析表,而讓程序?qū)崿F(xiàn)對輸入符號串的分析,在編程過程中也遇到了很多困難,如對某些終結(jié)符的動作或是規(guī)約函數(shù)的實現(xiàn),最后通過上網(wǎng)查找參考資料,都得到了解決。- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
0 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 編譯 原理 LR 分析 源碼
鏈接地址:http://m.appdesigncorp.com/p-6665296.html