編譯技術(shù)課程設(shè)計(jì)報(bào)告_第1頁(yè)
編譯技術(shù)課程設(shè)計(jì)報(bào)告_第2頁(yè)
編譯技術(shù)課程設(shè)計(jì)報(bào)告_第3頁(yè)
編譯技術(shù)課程設(shè)計(jì)報(bào)告_第4頁(yè)
編譯技術(shù)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

編譯技術(shù)課程設(shè)計(jì)班 級(jí) 計(jì)算機(jī)0802 學(xué) 號(hào) 姓 名 龔 科 指導(dǎo)老師 朱 玉 全 二零一一年 七 月一、目的是理論與實(shí)踐并重的課程,而其實(shí)驗(yàn)課要綜合運(yùn)用一、二年級(jí)所學(xué)的多門課程的內(nèi)容,用來(lái)完成一個(gè)小型編譯程序。從而鞏固和加強(qiáng)對(duì)詞法分析、語(yǔ)法分析、語(yǔ)義分析、代碼生成和報(bào)錯(cuò)處理等理論的認(rèn)識(shí)和理解;培養(yǎng)學(xué)生對(duì)完整系統(tǒng)的獨(dú)立分析和設(shè)計(jì)的能力,進(jìn)一步培養(yǎng)學(xué)生的獨(dú)立編程能力。二、任務(wù)及要求基本要求:1 詞法分析器 產(chǎn)生下述小語(yǔ)言的單詞序列這個(gè)小語(yǔ)言的所有的單詞符號(hào),以及它們的種別編碼和內(nèi)部值如下表: 單詞符號(hào)種別編碼助記符內(nèi)碼值DIMIFDOSTOPEND標(biāo)識(shí)符常數(shù)(整)=+*,()1234567891011121314$DIM$IF$DO$STOP$END$ID$INT$ASSIGN$PLUS$STAR$POWER$COMMA$LPAR$RPAR-內(nèi)部字符串標(biāo)準(zhǔn)二進(jìn)形式-對(duì)于這個(gè)小語(yǔ)言,有幾點(diǎn)重要的限制:首先,所有的關(guān)鍵字(如IFWHILE等)都是“保留字”。所謂的保留字的意思是,用戶不得使用它們作為自己定義的標(biāo)示符。例如,下面的寫法是絕對(duì)禁止的: IF(5)=x 其次,由于把關(guān)鍵字作為保留字,故可以把關(guān)鍵字作為一類特殊標(biāo)示符來(lái)處理。也就是說(shuō),對(duì)于關(guān)鍵字不專設(shè)對(duì)應(yīng)的轉(zhuǎn)換圖。但把它們(及其種別編碼)預(yù)先安排在一張表格中(此表叫作保留字表)。當(dāng)轉(zhuǎn)換圖識(shí)別出一個(gè)標(biāo)識(shí)符時(shí),就去查對(duì)這張表,確定它是否為一個(gè)關(guān)鍵字。再次,如果關(guān)鍵字、標(biāo)識(shí)符和常數(shù)之間沒(méi)有確定的運(yùn)算符或界符作間隔,則必須至少用一個(gè)空白符作間隔(此時(shí),空白符不再是完全沒(méi)有意義的了)。例如,一個(gè)條件語(yǔ)句應(yīng)寫為 IF i0 i= 1;而絕對(duì)不要寫成 IFi0 i=1;因?yàn)閷?duì)于后者,我們的分析器將無(wú)條件地將IFI看成一個(gè)標(biāo)識(shí)符。這個(gè)小語(yǔ)言的單詞符號(hào)的狀態(tài)轉(zhuǎn)換圖,如下圖: 2 語(yǔ)法分析器 能識(shí)別由加+ 減- 乘* 除/ 乘方 括號(hào)()操作數(shù)所組成的算術(shù)表達(dá)式,其文法如下:EE+T|E-T|TTT*F|T/F|FFPF|Pp(E)|i 使用的算法可以是:預(yù)測(cè)分析法;遞歸下降分析法;算符優(yōu)先分析法;LR分析法等。3 中間代碼生成器 產(chǎn)生上述算術(shù)表達(dá)式的中間代碼(四元式序列)較高要求:1 擴(kuò)充上述小語(yǔ)言的單詞;2 增加語(yǔ)法分析器的功能,能識(shí)別條件語(yǔ)句和循環(huán)語(yǔ)句等;3 增加中間代碼生成器的功能,能產(chǎn)生條件語(yǔ)句和循環(huán)語(yǔ)句等的中間代碼(四元式序列)4 增加報(bào)錯(cuò)功能;5 將中間代碼翻譯成匯編語(yǔ)言。三、實(shí)現(xiàn)過(guò)程說(shuō)明數(shù)據(jù)定義清單:#define ACC -2/*種別編碼*/#define sy_if 0#define sy_then 1#define sy_else 2#define sy_while 3#define sy_begin 4#define sy_do 5#define sy_end 6#define a 7#define semicolon 8#define e 9#define jinghao 10#define S 11#define L 12#define tempsy 15#define EA 18 /*E and*/#define E0 19 /*E or*/#define plus 34#define times 36#define becomes 38#define op_and 39#define op_or 40#define op_not 41#define rop 42#define lparent 48#define rparent 49#define ident 56#define intconst 57#define minus 58#define div 59#define chengfang 60/*/char ch=0;/*從字符緩沖區(qū)讀取當(dāng)前字符*/int count=0;/*詞法分析結(jié)果緩沖區(qū)計(jì)數(shù)器*/static char spelling10=;/*存放識(shí)別的字*/static char line81=;/*一行字符緩沖區(qū),最多80個(gè)字符*/char *pline;/*字符緩沖區(qū)指針*/static char ntab110010;/*變量名表,共100項(xiàng),每項(xiàng)長(zhǎng)度10*/struct ntabint tc;/*真值*/int fc;/*假值*/ntab2200;/*在布爾表達(dá)式E中保存有關(guān)布爾變量的真、假值*/int label=0;/*指向ntab2的指針*/struct rwords/*存放臨時(shí)變量的表的定義*/char sp10;int sy;/*(保留字表)匹配表的結(jié)構(gòu),用來(lái)與輸入緩沖區(qū)中的單詞進(jìn)行匹配*/*匹配表初始化,大小為10*/struct rwords reswords10=if,sy_if, do,sy_do,else,sy_else,while,sy_while,then,sy_then,begin,sy_begin,end,sy_end,and,op_and,or,op_or,not,op_not;struct aaint sy1;/*存放名字*/int pos;/*存放名字所對(duì)應(yīng)的地址*/buf1000,/*詞法分析結(jié)果緩沖區(qū)*/n,/*讀取二元式的當(dāng)前字符*/n1,/*當(dāng)前表達(dá)式中的字符*/E,/*非終結(jié)符*/sstack100,/*算術(shù)或布爾表達(dá)式加工處理使用的符號(hào)棧*/ibuf100, /*算術(shù)或布爾表達(dá)式使用的緩沖區(qū)*/stack1000;/*語(yǔ)法分析加工處理使用的符號(hào)棧*/struct aa oth;/*四元式中空白位置*/struct fourexpchar op10;struct aa arg1;struct aa arg2;int result;fexp200;/*四元式的結(jié)構(gòu)定義*/int ssp=0;/*指向sstack棧指針*/struct aa *pbuf=buf;/*指向詞法分析緩沖區(qū)的指針*/int nlength=0;/*詞法分析中記錄單詞的長(zhǎng)度*/int lnum=0;/*源程序行數(shù)記數(shù),源程序長(zhǎng)度*/int tt1=0;/*變量名表指針*/FILE *cfile;/*源程序文件,為結(jié)束符*/int newt=0;/*臨時(shí)變量計(jì)數(shù)器*/int nxq=100;/*nxq指向下一個(gè)形成的四元式的地址*/ /*每次執(zhí)行g(shù)en()時(shí),地址自動(dòng)增1*/int lr; /*掃描LR分析表1過(guò)程中保存的當(dāng)前狀態(tài)值*/int lr1; /*掃描LR分析表2或表3所保存的當(dāng)前狀態(tài)值*/int sp=0; /*查找LR分析表時(shí)狀態(tài)棧的棧頂指針*/int stack1100;/*狀態(tài)棧1的定義*/int sp1=0;/*狀態(tài)棧1的棧頂指針*/int num=0;/*算術(shù)或布爾表達(dá)式緩沖區(qū)指針*/struct llint nxq1;/*記錄下一條四元式的地址*/int tc1; /*真值鏈*/int fc1; /*假值鏈*/labelmark10; /*記錄語(yǔ)句嵌套層次的數(shù)組,*/ /*即記錄嵌套中每層的布爾表達(dá)式E的首地址*/int labeltemp10;/*記錄語(yǔ)句嵌套層次的數(shù)組,*/ /*即記錄每層else之前的四元式地址*/int pointmark=-1,/*labelmark數(shù)組指針*/pointtemp=-1;/*labeltemp數(shù)組指針*/int sign=0; /*sign=1,為賦值語(yǔ)句;sign=2,為布爾表達(dá)式。*/*程序語(yǔ)句LR分析表*/static int action1913=/*0*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,-1,-1,/*1*/-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1,/*2*/-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,/*3*/-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,/*4*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8,/*5*/-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1,/*6*/-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*7*/-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,/*8*/-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,/*9*/-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1,/*10*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1,/*11*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1,/*12*/-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1,/*13*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16,/*14*/-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*15*/-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1,/*16*/-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1,/*17*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1,/*18*/-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1;/*算術(shù)表示式的LR分析表*/static int action11610=/*0*/12,-1,-1,-1,-1,-1,14,-1,-1,1,/*1*/-1,2,3,4,5,6,-1,-1,ACC,-1,/*2*/12,-1,-1,-1,-1,-1,13,-1,-1,7,/*3*/12,-1,-1,-1,-1,-1,13,-1,-1,8,/*4*/12,-1,-1,-1,-1,-1,13,-1,-1,9,/*5*/12,-1,-1,-1,-1,-1,13,-1,-1,10,/*6*/12,-1,-1,-1,-1,-1,13,-1,-1,11,/*7*/-1,101,101,4,5,6,-1,101,101,-1,/*8*/-1,102,102,4,5,6,-1,102,102,-1,/*9*/-1,103,103,103,103,6,-1,103,103,-1,/*10*/ -1,104,104,104,104,6,-1,104,104,-1,/*11*/ -1,105,105,105,105,105,-1,105,105,-1,/*12*/ -1,107,107,107,107,107,-1,107,107,-1,/*13*/ 12,-1,-1,-1,-1,-1,13,-1,-1,-14,/*14*/ -1,2,3,4,5,6,-1,15,-1,-1,/*15*/ -1,106,106,106,106,106,-1,106,106,-1;/*布爾表示式的LR分析表*/static int action21611=/*0*/1,-1,4,-1,5,-1,-1,-1,13,7,8,/*1*/-1,2,-1,101,-1,101,101,101,-1,-1,-1,/*2*/3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*3*/-1,-1,-1,102,-1,102,102,102,-1,-1,-1,/*4*/1,-1,4,-1,5,-1,-1,-1,11,7,8,/*5*/1,-1,4,-1,5,-1,-1,-1,6,7,8,/*6*/-1,-1,-1,104,-1,9,10,104,-1,-1,-1,/*7*/1,-1,4,-1,5,-1,-1,-1,14,7,8,/*8*/1,-1,4,-1,5,-1,-1,-1,15,7,8,/*9*/105,-1,105,-1,105,-1,-1,-1,-1,-1,-1,/*10*/107,-1,107,-1,107,-1,-1,-1,-1,-1,-1,/*11*/-1,-1,-1,12,-1,9,10,-1,-1,-1,-1,/*12*/-1,-1,-1,103,-1,103,103,103,-1,-1,-1,/*13*/-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1,/*14*/-1,-1,-1,106,-1,9,10,106,-1,-1,-1,/*15*/-1,-1,-1,108,-1,9,10,108,-1,-1,-1;函數(shù)清單:void main(); /*主程序*/void readline(); /* 從文件讀一行到緩沖區(qū) */void readch(); /* 從緩沖區(qū)讀取一個(gè)字符 */int find(char spel); /* 標(biāo)識(shí)符和關(guān)鍵字的識(shí)別 */void identifier(); /* 字符串的識(shí)別 */void number(); /* 數(shù)字的識(shí)別 */void scan(); /* 掃描主函數(shù) */void readnu(); /* 讀取二元式的一個(gè)字符 */int newtemp(); /* 中間變量的生成 */int gen(char op1,struct aa arg11,struct aa arg22,int result1); /* 生成四元式 */int merg(int p1,int p2); /* 布爾表示式的匹配 */void lrparse1(int num); /* 賦值語(yǔ)句的分析 */int lrparse2(int num); /* 布爾表達(dá)式的分析 */int test(int value); /* 測(cè)試字符是否為表達(dá)式中的值(不包括;) */int lrparse();/* 程序語(yǔ)句處理 */void disp1(); /* 顯示詞法分析結(jié)果 */void disp2(); /* 四元式分析結(jié)果 */void disp3(); /* 變量名表顯示 */主要函數(shù)流程圖:主函數(shù):結(jié)束四元式的分析,顯示結(jié)果語(yǔ)法分析lrparse()從二元式讀一個(gè)字符初始化狀態(tài)棧顯示詞法分析結(jié)果掃描主函數(shù)scan從緩沖區(qū)讀取一個(gè)字符readch打開(kāi)文件pas.dat開(kāi)始詞法分析掃描函數(shù)scan:結(jié)束讀取下一符號(hào)分情況識(shí)別(帶不帶=)數(shù)字的識(shí)別number()字符串識(shí)別identifier()ch為其它符號(hào)?ch為數(shù)字?ch為字母?ch= ch=掃描程序scan Y N詞法分析標(biāo)識(shí)符及關(guān)鍵字識(shí)別函數(shù)identifier:若ss1=1,返回ii-1,否則返回1順序查看數(shù)組ntab。若ss1=1,則為關(guān)鍵字,若不為1,則ii+ss1=0; ii=0;標(biāo)識(shí)符和關(guān)鍵字的識(shí)別賦值語(yǔ)句的語(yǔ)法分析函數(shù)lrparse1結(jié)束A-i:=Elr=ACC)&stack1sp1=1?規(guī)約后為非終結(jié)符E-(E)E-iE-E+Elr=107?lr=106?lr=101?lr=100?堆棧管理,并遞歸進(jìn)行管理lr1=108?lr1=0?出錯(cuò)lr1=-1?讀SLR(1)表,得lr1賦值語(yǔ)句的分析lrparse1:對(duì)應(yīng)文法:S-E;E-E+E;E-E-E;E-E*E;E-E/E;E-EE;E-(E); YE-i; N Y N N Y. Y Y Y Y N Y布爾表達(dá)式的語(yǔ)法分析函數(shù)lrparse2:結(jié)束return 1lr=ACC?規(guī)約后為非終結(jié)符EO-E(1)orE-EO E(2)E-ilr=108?lr=107?lr=101?lr=100?堆棧管理,并遞歸進(jìn)行管理lr1=109?lr1=0?出錯(cuò)lr1=-1?讀SLR(1)表,得lr1布爾表達(dá)式的分析lrparse2對(duì)應(yīng)文法:S-E;E-i;E-i rop i;E-(E);B-not E;E-E and;E-E or;E-EE; Y Y N Y N N Y. Y Y Y Y N Y注:老師給出的賦值語(yǔ)句文法為:EE+T|E-T|TTT*F|T/F|FFPF|Pp(E)|i我將此文法給些為:(0)S-E;(1)E-E+E;(2)E-E-E;(3)E-E*E;(4)E-E/E;(5)E-EE;(6)E-(E);(7)E-i;并計(jì)算其SLR分析表:狀態(tài) ACTIONGOTO i + - * / ( ) #E0S12s141 1S2S3S4S5S6Acc 2S12S137 3S12S138 4S12S139 5S12S1310 6S12S1311 7R1R1S4S5S6R1R1 8R2R2S4S5S6R2R2 9R3R3R3R3S6R3R310R4R4R4R4S6R4R411R5R5R5R5R5R5R512R7R7R7R7R7R7R713S12S1314S2S3S4S5S6S1515R6R6R6R6R6R6R6四、源程序清單/ ht.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/小型編譯程序:高級(jí)語(yǔ)言到四元式的編譯#include stdio.h/*如果使用TC的話,需要配置頭文件路徑*/#include string.h#define ACC -2/*/#define sy_if 0#define sy_then 1#define sy_else 2#define sy_while 3#define sy_begin 4#define sy_do 5#define sy_end 6#define a 7#define semicolon 8#define e 9#define jinghao 10#define S 11#define L 12#define tempsy 15#define EA 18 /*E and*/#define E0 19 /*E or*/#define plus 34#define times 36#define becomes 38#define op_and 39#define op_or 40#define op_not 41#define rop 42#define lparent 48#define rparent 49#define ident 56#define intconst 57#define minus 58#define div 59#define chengfang 60/*/char ch=0;/*從字符緩沖區(qū)讀取當(dāng)前字符*/int count=0;/*詞法分析結(jié)果緩沖區(qū)計(jì)數(shù)器*/static char spelling10=;/*存放識(shí)別的字*/static char line81=;/*一行字符緩沖區(qū),最多80個(gè)字符*/char *pline;/*字符緩沖區(qū)指針*/static char ntab110010;/*變量名表,共100項(xiàng),每項(xiàng)長(zhǎng)度10*/struct ntabint tc;/*真值*/int fc;/*假值*/ntab2200;/*在布爾表達(dá)式E中保存有關(guān)布爾變量的真、假值*/int label=0;/*指向ntab2的指針*/struct rwords/*存放臨時(shí)變量的表的定義*/char sp10;int sy;/*(保留字表)匹配表的結(jié)構(gòu),用來(lái)與輸入緩沖區(qū)中的單詞進(jìn)行匹配*/*匹配表初始化,大小為10*/struct rwords reswords10=if,sy_if, do,sy_do,else,sy_else,while,sy_while,then,sy_then,begin,sy_begin,end,sy_end,and,op_and,or,op_or,not,op_not;struct aaint sy1;/*存放名字*/int pos;/*存放名字所對(duì)應(yīng)的地址*/buf1000,/*詞法分析結(jié)果緩沖區(qū)*/n,/*讀取二元式的當(dāng)前字符*/n1,/*當(dāng)前表達(dá)式中的字符*/E,/*非終結(jié)符*/sstack100,/*算術(shù)或布爾表達(dá)式加工處理使用的符號(hào)棧*/ibuf100, /*算術(shù)或布爾表達(dá)式使用的緩沖區(qū)*/stack1000;/*語(yǔ)法分析加工處理使用的符號(hào)棧*/struct aa oth;/*四元式中空白位置*/struct fourexpchar op10;struct aa arg1;struct aa arg2;int result;fexp200;/*四元式的結(jié)構(gòu)定義*/int ssp=0;/*指向sstack棧指針*/struct aa *pbuf=buf;/*指向詞法分析緩沖區(qū)的指針*/int nlength=0;/*詞法分析中記錄單詞的長(zhǎng)度*/int lnum=0;/*源程序行數(shù)記數(shù),源程序長(zhǎng)度*/int tt1=0;/*變量名表指針*/FILE *cfile;/*源程序文件,為結(jié)束符*/*FILE *mfile;*/int newt=0;/*臨時(shí)變量計(jì)數(shù)器*/int nxq=100;/*nxq指向下一個(gè)形成的四元式的地址*/ /*每次執(zhí)行g(shù)en()時(shí),地址自動(dòng)增1*/int lr;/*掃描LR分析表1過(guò)程中保存的當(dāng)前狀態(tài)值*/int lr1;/*掃描LR分析表2或表3所保存的當(dāng)前狀態(tài)值*/int sp=0;/*查找LR分析表時(shí)狀態(tài)棧的棧頂指針*/int stack1100;/*狀態(tài)棧1的定義*/int sp1=0;/*狀態(tài)棧1的棧頂指針*/int num=0;/*算術(shù)或布爾表達(dá)式緩沖區(qū)指針*/struct llint nxq1;/*記錄下一條四元式的地址*/int tc1;/*真值鏈*/int fc1;/*假值鏈*/labelmark10;/*記錄語(yǔ)句嵌套層次的數(shù)組,*/ /*即記錄嵌套中每層的布爾表達(dá)式E的首地址*/int labeltemp10;/*記錄語(yǔ)句嵌套層次的數(shù)組,*/ /*即記錄每層else之前的四元式地址*/int pointmark=-1,/*labelmark數(shù)組指針*/ pointtemp=-1;/*labeltemp數(shù)組指針*/int sign=0;/*sign=1,為賦值語(yǔ)句;sign=2,為布爾表達(dá)式。*/*程序語(yǔ)句LR分析表*/static int action1913=/*0*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,-1,-1,/*1*/-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1,/*2*/-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,/*3*/-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,/*4*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8,/*5*/-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1,/*6*/-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*7*/-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,/*8*/-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,/*9*/-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1,/*10*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1,/*11*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1,/*12*/-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1,/*13*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16,/*14*/-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*15*/-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1,/*16*/-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1,/*17*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1,/*18*/-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1;/*算術(shù)表示式的LR分析表*/static int action11610=/*0*/12,-1,-1,-1,-1,-1,14,-1,-1,1,/*1*/-1,2,3,4,5,6,-1,-1,ACC,-1,/*2*/12,-1,-1,-1,-1,-1,13,-1,-1,7,/*3*/12,-1,-1,-1,-1,-1,13,-1,-1,8,/*4*/12,-1,-1,-1,-1,-1,13,-1,-1,9,/*5*/12,-1,-1,-1,-1,-1,13,-1,-1,10,/*6*/12,-1,-1,-1,-1,-1,13,-1,-1,11,/*7*/-1,101,101,4,5,6,-1,101,101,-1,/*8*/-1,102,102,4,5,6,-1,102,102,-1,/*9*/-1,103,103,103,103,6,-1,103,103,-1,/*10*/ -1,104,104,104,104,6,-1,104,104,-1,/*11*/ -1,105,105,105,105,105,-1,105,105,-1,/*12*/ -1,107,107,107,107,107,-1,107,107,-1,/*13*/ 12,-1,-1,-1,-1,-1,13,-1,-1,-1,/*14*/ -1,2,3,4,5,6,-1,15,-1,-1,/*15*/ -1,106,106,106,106,106,-1,106,106,-1;/*布爾表示式的LR分析表*/static int action21611=/*0*/1,-1,4,-1,5,-1,-1,-1,13,7,8,/*1*/-1,2,-1,101,-1,101,101,101,-1,-1,-1,/*2*/3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*3*/-1,-1,-1,102,-1,102,102,102,-1,-1,-1,/*4*/1,-1,4,-1,5,-1,-1,-1,11,7,8,/*5*/1,-1,4,-1,5,-1,-1,-1,6,7,8,/*6*/-1,-1,-1,104,-1,9,10,104,-1,-1,-1,/*7*/1,-1,4,-1,5,-1,-1,-1,14,7,8,/*8*/1,-1,4,-1,5,-1,-1,-1,15,7,8,/*9*/105,-1,105,-1,105,-1,-1,-1,-1,-1,-1,/*10*/107,-1,107,-1,107,-1,-1,-1,-1,-1,-1,/*11*/-1,-1,-1,12,-1,9,10,-1,-1,-1,-1,/*12*/-1,-1,-1,103,-1,103,103,103,-1,-1,-1,/*13*/-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1,/*14*/-1,-1,-1,106,-1,9,10,106,-1,-1,-1,/*15*/-1,-1,-1,108,-1,9,10,108,-1,-1,-1;/*從文件讀一行到緩沖區(qū)*/void readline()char ch1;pline=line;ch1=fgetc(cfile); while(ch1!=n)*pline=ch1;pline+;ch1=fgetc(cfile); *pline=0;pline=line;/*從緩沖區(qū)讀取一個(gè)字符*/void readch()if(ch=0)readline();lnum+;ch=*pline;pline+;/*標(biāo)識(shí)符和關(guān)鍵字的識(shí)別*/int find(char spel)int ss1=0;int ii=0;while(ss1=0)&(ii=a)&(ch=0)&(ch=9);pline-;spellingk=0;while(ss=0)&(iii10)if(!strcmp(spelling,reswordsiii.sp) ss=1;iii+;/*關(guān)鍵字匹配*/if(ss=1)bufcount.sy1=reswordsiii-1.sy;elsebufcount.sy1=ident;j=find(spelling);if(j=-1)bufcount.pos=tt1;strcpy(ntab1tt1,spelling);tt1+;nlength+;else bufcount.pos=j;count+;for(k=0;k=0)&(ch=9);bufcount.sy1=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論