




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1課 程 設(shè) 計(jì) 報(bào) 告課程名稱課程名稱 編譯程序設(shè)計(jì)原理編譯程序設(shè)計(jì)原理 課題名稱課題名稱 帶括號(hào)的四則混合運(yùn)算帶括號(hào)的四則混合運(yùn)算 專專 業(yè)業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 班班 級(jí)級(jí) 學(xué)學(xué) 號(hào)號(hào) 姓姓 名名 指導(dǎo)教師指導(dǎo)教師 2014 年年 6 月月 19 日日 2湖南工程學(xué)院湖南工程學(xué)院課課 程程 設(shè)設(shè) 計(jì)計(jì) 任任 務(wù)務(wù) 書(shū)書(shū)課程名稱課程名稱 編譯程序設(shè)計(jì)原理編譯程序設(shè)計(jì)原理 課課 題題 帶括號(hào)的四則混合運(yùn)算帶括號(hào)的四則混合運(yùn)算 專業(yè)班級(jí)專業(yè)班級(jí) 學(xué)生姓名學(xué)生姓名 學(xué)學(xué) 號(hào)號(hào) 指導(dǎo)老師指導(dǎo)老師 審審 批批 任務(wù)書(shū)下達(dá)日期 2014 年 6 月 16 日任務(wù)完成日期 2014 年 6
2、 月 19 日22011 級(jí)編譯原理課程設(shè)計(jì)任務(wù)書(shū)一、課程設(shè)計(jì)的性質(zhì)和目的編譯原理課程設(shè)計(jì)是計(jì)算機(jī)專業(yè)課程,通過(guò)課程設(shè)計(jì)使學(xué)生進(jìn)一步鞏固課堂所學(xué)知識(shí),全面熟悉、掌握編譯程序編寫(xiě)的基本設(shè)計(jì)方法和技巧,進(jìn)一步提高分析問(wèn)題、解決問(wèn)題及上機(jī)操作能力,為將來(lái)從事高層次的計(jì)算機(jī)軟件開(kāi)發(fā)工作打下一定的專業(yè)基礎(chǔ)。二、設(shè)計(jì)課題課題一:應(yīng)用編譯原理的方法實(shí)現(xiàn)帶括號(hào)的四則混合運(yùn)算 給定條件:1、 詞法符號(hào)定義如下:INTC D+ FLOATC (D+.D+) | (D+.) | ( .D+) FLOATC ( (D+.D+) | (D+.) | ( .D+)| (D+) ) ( E | e ) ( + | | )
3、D+ OPADD +OPSUB OPMUL *OPDIV /LPAREN (RPAREN )LINE nASSIGN =2、 表達(dá)式文法定義如下:01. S E02. E T03. E E OPADD T04. E E OPSUB T05. T P06. T T OPMUL P07. T T OPDIV P08. P INTC09. P FLOATC10. P LPAREN E RPAREN基本要求:1、 以 ASSIGN 作為文法結(jié)束符號(hào); 2、 應(yīng)用詞法分析技術(shù)識(shí)別單詞;3、 應(yīng)用 SLR(1)分析技術(shù)判別表達(dá)式的合法性;4、 應(yīng)用尾動(dòng)作文法技術(shù)計(jì)算表達(dá)式的類型與值;5、 要求表達(dá)式的類型
4、與值嚴(yán)格一致。3課題二:Micro 語(yǔ)言詞法語(yǔ)法分析 給定條件:1、 詞法符號(hào)定義如下:ID L(L|D)*INTC D+REALC D+ D+PLUS +MULT *LPAREN (RPAREN )COLON :ASSIGN :SEMI ;LINE nSTOP FEOF EOF2、 表達(dá)式文法定義如下:01. PROGBEGIN DECL BODY END STOP02. DECLDECL VAR ID COLON TYPE SEMI03. DECLVAR ID COLON TYPE SEMI04. TYPEREAL 05. TYPEINTEGER 06. BODYBODY SEMI STM
5、07. BODYSTM08. STMID ASSIGN EXP09. STMWRITE LPAREN EXP RPAREN10. STMREAD LPAREN ID RPAREN11. EXPEXP PLUS FACT12. EXPFACT13. FACTFACT MULT PRIM14. FACTPRIM15. PRIMID16. PRIMINTC17. PRIMREALC18. PRIMLPAREN EXP RPAREN基本要求:1、 以 FEOF 作為文法結(jié)束符號(hào); 2、 應(yīng)用詞法分析技術(shù)識(shí)別單詞; 3、 應(yīng)用 SLR(1)分析方法進(jìn)行語(yǔ)法分析;4、 報(bào)錯(cuò)要指明所在行。4三、課程設(shè)計(jì)報(bào)告
6、要求1、 課程設(shè)計(jì)報(bào)告必須按本系規(guī)定的格式要求打印成冊(cè);2、 課程設(shè)計(jì)報(bào)告每人一份,正文必須包含如下幾個(gè)方面的內(nèi)容:1)基本設(shè)計(jì)思想;2)主要數(shù)據(jù)結(jié)構(gòu);3)總結(jié)與體會(huì)。3、 課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書(shū)、目錄、正文、源程序清單。四、選題及考核辦法1、 一人一組,學(xué)號(hào)為奇數(shù)者做課題一,學(xué)號(hào)為偶數(shù)者做課題二。2、 成績(jī)考核按個(gè)人課題完成情況、設(shè)計(jì)報(bào)告質(zhì)量及對(duì)課程設(shè)計(jì)的態(tài)度等綜合評(píng)定。五、設(shè)計(jì)進(jìn)度安排1、 講課時(shí)間安排: 19 周周五上午2、 上機(jī)調(diào)試時(shí)間安排: 19 周周六周日上午3、 答辯時(shí)間安排: 20 周周一上午4、 其余時(shí)間:查閱資料,確定方案,設(shè)計(jì)課題相關(guān)程序。5目錄一 設(shè)計(jì)內(nèi)容與
7、設(shè)計(jì)要求.61.1 課程設(shè)計(jì)的性質(zhì)和目的課程設(shè)計(jì)的性質(zhì)和目的.61.2 設(shè)計(jì)課題設(shè)計(jì)課題.61.3 進(jìn)度安排進(jìn)度安排.7二 基本設(shè)計(jì)思想.82.1 詞法分析詞法分析.82.2 語(yǔ)法分析語(yǔ)法分析.9三 主要數(shù)據(jù)結(jié)構(gòu).14四 調(diào)試運(yùn)行結(jié)果.15五 總結(jié)與體會(huì).16參考文獻(xiàn).176一 設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求1.11.1 課程設(shè)計(jì)的性質(zhì)和目的課程設(shè)計(jì)的性質(zhì)和目的編譯原理課程設(shè)計(jì)是計(jì)算機(jī)專業(yè)課程,通過(guò)課程設(shè)計(jì)使學(xué)生進(jìn)一步鞏固課堂所學(xué)知識(shí),全面熟悉、掌握編譯程序編寫(xiě)的基本設(shè)計(jì)方法和技巧,進(jìn)一步提高分析問(wèn)題、解決問(wèn)題及上機(jī)操作能力,為將來(lái)從事高層次的計(jì)算機(jī)軟件開(kāi)發(fā)工作打下一定的專業(yè)基礎(chǔ)。1.21.2 設(shè)計(jì)課題設(shè)
8、計(jì)課題課題一:應(yīng)用編譯原理的方法實(shí)現(xiàn)帶括號(hào)的四則混合運(yùn)算 給定條件:1、詞法符號(hào)定義如下:INTC D+ FLOATC (D+.D+) | (D+.) | ( .D+) FLOATC ( (D+.D+) | (D+.) | ( .D+)| (D+) ) ( E | e ) ( + | | ) D+ OPADD +OPSUB OPMUL *OPDIV /LPAREN (RPAREN )LINE nASSIGN =2、表達(dá)式文法定義如下:01. S E02. E T03. E E OPADD T04. E E OPSUB T05. T P06. T T OPMUL P07. T T OPDIV P
9、08. P INTC09. P FLOATC10. P LPAREN E RPAREN基本要求:1、以 ASSIGN 作為文法結(jié)束符號(hào); 2、應(yīng)用詞法分析技術(shù)識(shí)別單詞;3、應(yīng)用 SLR(1)分析技術(shù)判別表達(dá)式的合法性;4、應(yīng)用尾動(dòng)作文法技術(shù)計(jì)算表達(dá)式的類型與值;5、要求表達(dá)式的類型與值嚴(yán)格一致。71.31.3 進(jìn)度安排進(jìn)度安排計(jì)算機(jī)計(jì)算機(jī) 0701/0702 班:班:第 18 周:星期五 8:0012:00 星期六 8:0012:00 第 19 周:星期天 8:0012:00 計(jì)算機(jī)計(jì)算機(jī) 0703 班:班: 第 18 周:星期五 14:0018:00 星期六 14:0018:00第 19 周
10、:星期天 14:0018:008二二 基本設(shè)計(jì)思想基本設(shè)計(jì)思想本計(jì)算器采用編譯原理的方法構(gòu)建,先用有窮自動(dòng)機(jī)輔助進(jìn)行詞法,把字符串形式的算術(shù)表達(dá)式的格式標(biāo)準(zhǔn)化,分離出一個(gè)個(gè)詞法單元。然后采用 SLR(1)文法分析法進(jìn)行文法分析,檢查表達(dá)式的正確性。并在過(guò)程中計(jì)算出已分析出的部分表達(dá)式的值。最終得出表達(dá)式的值。2.12.1 詞法分析詞法分析由于各詞法元素都可以用正則表達(dá)式來(lái)表示,所以做詞法分析時(shí)采用正則表達(dá)式形式化表示各個(gè)元素以便于程序?qū)崿F(xiàn)。四則混合運(yùn)算各詞法元素的正則表達(dá)式如下所示:INTC D+ FLOATC D+.D+ | D+. | .D+ FLOATC ( D+.D+ | D+. |
11、.D+ | D+ ) ( E | e ) ( + | | ) D+ OPADD +OPSUB OPMUL *OPDIV /LPAREN (RPAREN )LINE nASSIGN =正則表達(dá)式把能夠把各詞法元素的格式用形式化的方法表示出來(lái),是格式的判斷能夠用程序來(lái)完成,但最終寫(xiě)程序時(shí),用正則表達(dá)式直接分析對(duì)人來(lái)說(shuō)仍然是不太直接,不方便,所以把正則表達(dá)式轉(zhuǎn)化為有限自動(dòng)機(jī),以是寫(xiě)程序?qū)崿F(xiàn)詞法分析方便。如圖 1.1 為四則混合運(yùn)算的有限自動(dòng)機(jī)。9圖 2.1 四則混合運(yùn)算的有限自動(dòng)機(jī)2.22.2 語(yǔ)法分析語(yǔ)法分析 四則混合運(yùn)算算術(shù)表達(dá)式符合 SLR(1)文法但不符合 LR(0)文法,所以語(yǔ)法分析采用
12、SLR(1)語(yǔ)法分析方法。四則混合運(yùn)算算術(shù)表達(dá)式的產(chǎn)生式如下: 12)0D1DD2E|e46DD7+8-11(INTCFLOATCOPADDOPMULOPDIVLINEASSIGN3 DE|e5+|-DFLOATC9*10/13n14=OPSUBRPARENLPAREN1001. S E02. E T03. E E OPADD T04. E E OPSUB T05. T P06. T T OPMUL P07. T T OPDIV P08. P INTC09. P FLOATC10. P LPAREN E RPAREN通過(guò)文法的產(chǎn)生式可以把四則混合運(yùn)算算術(shù)表達(dá)式的文法中各個(gè)非終極符的FIRST
13、集合和 FOLLOW 集合一一求出來(lái),以便進(jìn)行下一步分析。其FIRST 集和FOLLOW 集如表 1.1 所示:表 2.1 四則混合運(yùn)算算術(shù)表達(dá)式文法中非終極符的 FIRST 集和 FOLLOW 集符號(hào)FIRST 集合FOLLOW 集合SINTC FLOATC LPARENASSIGNEINTC FLOATC LPARENASSIGN OPADD OPSUB RPARENTINTC FLOATC LPARENASSIGN OPADD OPSUB RPAREN OPMUL OPDIVPINTC FLOATC LPARENASSIGN OPADD OPSUB RPAREN OPMUL OPDIV根
14、據(jù)文法的產(chǎn)生式和 FIRST 集、FOLLOW 集即可確定文法的規(guī)約活前綴 DFA (SLR(1)_DFA) ,如圖 1.2 所示。10S EE TE E OPADD TE E OPSUB TT PT T OPMUL PT T OPDIV PP INTCP FLOATCP LPAREN E RPARENE S1TS2PS3INTCS4FLOATCS5LPARENS61S EE E OPADD TE E OPSUB TASSIGNR1OPADDS7OPSUBS82E TT TOPMUL PT TOPDIV PASSIGNR2OPADDR2OPSUBR2RPARENR2OPMULS9OPDIVS1
15、04P INTCASSIGNR8OPADDR8OPSUBR8RPARENR8OPMULR8OPDIVR83T PASSIGNR5OPADDR5OPSUBR5RPARENR5OPMULR5OPDIVR55P FLOATCASSIGNR9OPADDR9OPSUBR9RPARENR9OPMULR9OPDIVR96P LPAREN E RPARENE TE E OPADD TE E OPSUB TT PT T OPMUL PT T OPDIV PP INTCP FLOATCP LPAREN E RPARENE S11TS2PS3INTCS4FLOATCS5LPARENS67E E OPADD TT P
16、T T OPMUL PT T OPDIV PP INTCP FLOATCP LPAREN E RPARENTS12PS3INTCS4FLOATCS5LPARENS63圖 2.2 SLR(1)_DFA9T T OPMUL PP INTCP FLOATCP LPAREN E RPARENPS14INTCS4FLOATCS5LPARENS611P LPAREN E RPARENE E OPADD TE E OPSUB TRPARENS16OPADDS7OPSUBS810T T OPDIV PP INTCP FLOATCP LPAREN E RPARENPS15INTCS4FLOATCS5LPAREN
17、S612E E OPADD TT T OPMUL PT T OPDIV PASSIGNR3OPADDR3OPSUBR3RPARENR3OPMULS9OPDIVS108E E OPSUB TT PT T OPMUL PT T OPDIV PP INTCP FLOATCP LPAREN E RPARENTS13PS3INTCS4FLOATCS5LPARENS613E E OPSUB TT T OPMUL PT T OPDIV PASSIGNR4OPADDR4OPSUBR4RPARENR4OPMULS9OPDIVS1014T T OPMUL P ASSIGNR6OPADDR6OPSUBR6RPARE
18、NR6OPMULR6OPDIVR615T T OPDIV P ASSIGNR7OPADDR7OPSUBR7RPARENR7OPMULR7OPDIVR716P LPAREN E RPARENASSIGNR10OPADDR10OPSUBR10RPARENR10OPMULR10OPDIVR104根據(jù) SLR(1)_DFA 即可用構(gòu)造文法的相應(yīng) action 表和 goto 表如表 1.3 和表 1.3 所示。表 2.2 SLR(1)_actionINTCFLOATCOPADDOPSUBOPMULOPDIVLPARENRPARENASSIGN0S4S5S31S7S8R12R2R2R2R23R5R5R5
19、R5R5R54R8R8R8R8R8R85R9R9R9R9R9R96S4S5S67S4S5S68S4S5S69S4S5S610S4S5S611S7S8S1612R3R3S9S10R3R313R4R4S9S10R4R414R6R6R6R6R6R615R7R7R7R7R7R716R10R10R10R10R10R10表 2.3 SLR(1)_gotoETP01231234561123712381339141015111213有了文法的 action 表和 goto 表,就可以根據(jù)表中所指示的狀態(tài)轉(zhuǎn)移情況,編寫(xiě)程序并完成相應(yīng)功能。5三三 主要數(shù)據(jù)結(jié)構(gòu)主要數(shù)據(jù)結(jié)構(gòu)程序的主要數(shù)據(jù)結(jié)構(gòu)為棧。1 詞法分析中用一
20、個(gè)棧來(lái)保存分析中到達(dá)的狀態(tài)。 static char lexstackBUFSIZE;2 語(yǔ)法分析中一個(gè)狀態(tài)棧用來(lái)保存已到達(dá)的狀態(tài),一個(gè)符號(hào)棧用來(lái)保存已讀入的符號(hào)或規(guī)約產(chǎn)生的符號(hào)中還沒(méi)被規(guī)約掉的語(yǔ)法符號(hào)。 struct int state; TokenType token; stackBUFSIZE;由于狀態(tài)棧,與符號(hào)棧的出入棧是同步的所以兩個(gè)棧寫(xiě)在同一個(gè)結(jié)構(gòu)中。當(dāng)讀入一個(gè)字符或前一個(gè)規(guī)約產(chǎn)生一個(gè)符號(hào),之后若不能直接規(guī)約這將該符號(hào)入棧到token 并跳轉(zhuǎn)到新的狀態(tài),原狀態(tài)入棧 state。當(dāng)一個(gè)活前綴被規(guī)約,被規(guī)約符號(hào)出棧,相應(yīng)狀態(tài)也出棧。6四 調(diào)試運(yùn)行結(jié)果 正確的輸入結(jié)果,得到值 407五
21、總結(jié)與體會(huì)編譯原理這門(mén)學(xué)科對(duì)于我來(lái)說(shuō)算是比較難懂的了,對(duì)于自己在過(guò)去一周的課程設(shè)計(jì)中,我學(xué)到了不少的東西,當(dāng)然是通過(guò)和同學(xué)交流討論所學(xué)習(xí)到的,雖然不是很精通,但是多少還是了解了一點(diǎn)皮毛,對(duì)于老師給我們的那段代碼,我還是自己很好的看了一下,對(duì)于程序的某些部分還是不怎么熟悉,所以在自己編譯和調(diào)試過(guò)程中出現(xiàn)了不少的問(wèn)題和錯(cuò)誤。雖然這樣,本次的課程設(shè)計(jì)還是讓我受益匪淺的,因?yàn)樗鼧O大的提升了我的編程能力和對(duì)程序的閱讀理解能力。這樣也使我對(duì)編譯原理中的詞法分析和語(yǔ)法分析部分比較深刻的了解和熟悉。真的,通過(guò)此次課程設(shè)計(jì)我學(xué)到了很多東西,當(dāng)然自己還有許多不足的地方需要以后進(jìn)一步的提高,這對(duì)我今后不管是學(xué)習(xí)還是
22、生活都會(huì)很有幫助,當(dāng)然我也深刻的認(rèn)識(shí)到了寫(xiě)代碼必須要有比較過(guò)硬的理論基礎(chǔ)作為鋪墊才能編寫(xiě)出好的程序。如果不熟練的掌握它們,很難寫(xiě)出高水平的代碼,這樣就不能很好的提高自己和鍛煉自己。而這恰恰是我現(xiàn)在所缺乏的一種能力;希望以后很好的提升自己這方面的能力。在整個(gè)課程設(shè)計(jì)過(guò)程中多虧老師耐心的指導(dǎo),否則我也很難完成任務(wù),在這里我要感謝老師的悉心指導(dǎo),這才讓我能夠很好的調(diào)試好代碼,當(dāng)然除了老師的幫助外還有許多熱心的同學(xué),他們同樣是我的榜樣,是他們給我的意見(jiàn)和見(jiàn)解,讓我的程序能夠更加完善。嗯,這些都是我的一點(diǎn)小小的體會(huì),希望我們的指導(dǎo)老師周鐵山老師身體健康,工作順利,希望自己以后在學(xué)習(xí)中更上一層樓。8參考文
23、獻(xiàn)1 金成植,金英.編譯程序設(shè)計(jì)原理M.北京:高等教育出版社,20072 胡元義,柯麗芳.編譯原理學(xué)習(xí)指導(dǎo)M.西安電子科技大學(xué)出版社,20043 陳意云,張昱.編譯原理實(shí)驗(yàn)教程M.北京:高等教育出版社,20094(美)Andrew W. Appel,(美)Maia Ginsburg.編譯原理 C 語(yǔ)言描述.北京:人民郵電出版社,20069附錄(源程序)#include #include #include #define BUFSIZE 256static FILE *in;static FILE *out; typedef enum NONE=-3, FEOF, ERROR, INTC,FLO
24、ATC,OPADD,OPSUB,OPMUL,OPDIV,LPAREN,RPAREN,LINE,ASSIGN, S,E,T,P/文法的非終極符 11-13 LexType;#define Macro_caseD 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9LexType lex(char *word) static int lexstacktop=-1; static char lextrywordBUFSIZE; static char lexstackBUFSIZE; static LexT
25、ype lextryflagBUFSIZE; static char lexcurch= ; static LexType lexstateflag= ERROR, INTC, FLOATC, ERROR,ERROR, ERROR, FLOATC,OPADD, OPSUB,OPMUL,OPDIV,LPAREN,RPAREN,LINE,ASSIGN; int state=0; int lexindex=0; doif (lexstacktop=-1) lexcurch=fgetc(in); else lexcurch=lexstacklexstacktop-;while(lexcurch= |l
26、excurch=t); while (1) switch (state) case 0: switch (lexcurch) case Macro_caseD: state=1;break; case .: state=3;break; case +: state=7;break; case -: state=8;break; case *: state=9;break; case /: state=10;break; case (: state=11;break; case ): state=12;break; case n: state=13;break; case =: state=14
27、;break; default: state=-1;break; ; break; case 1: switch (lexcurch) case Macro_caseD: state=1;break;10 case .: state=2;break; case E: case e: state=4;break; default: state=-1;break; ; break; case 2: switch (lexcurch) case Macro_caseD: state=2;break; case E: case e: state=4;break; default: state=-1;b
28、reak; ; break; case 3: switch (lexcurch) case Macro_caseD: state=2;break; default: state=-1;break; ; break; case 4: switch (lexcurch) case Macro_caseD: state=6;break; case +: case -: state=5;break; default: state=-1;break; ; break; case 5: switch (lexcurch) case Macro_caseD: state=6;break; default:
29、state=-1;break; ; break; case 6: switch (lexcurch) case Macro_caseD: state=6;break; default: state=-1;break; ; break; default: state=-1;break; if (state=-1) break; lextrywordlexindex+=lexcurch; /*maybe overflow*/lextryflaglexindex-1=lexstateflagstate; if (lexstacktop=-1) lexcurch=fgetc(in); else lex
30、curch=lexstacklexstacktop-; if (lexindex=0 & lexcurch=EOF)return FEOF; lextrywordlexindex=lexcurch; lextryflaglexindex=ERROR; while (lexindex0 & lextryflaglexindex=ERROR) lexstack+lexstacktop=lextrywordlexindex-; /*maybe overflow*/ lextrywordlexindex+1=0; strcpy(word,lextryword); return lext
31、ryflaglexindex;static int lineno=1;typedef struct11 LexType type; enum INT,FLOAT valuetype; union int intv; float floatv; value; TokenType;static TokenType curtoken,buftoken=NONE;void getnexttoken(char *word)if (buftoken.type=NONE) do curtoken.type=lex(word); if (curtoken.type=INTC) curtoken.valuety
32、pe=INT; v=atoi(word); if (curtoken.type=FLOATC) curtoken.valuetype=FLOAT; curtoken.value.floatv=atof(word); if (curtoken.type=ERROR) fprintf(out,Error line:%d %sn,lineno,word); if (curtoken.type=LINE) lineno+; while(curtoken.type=ERROR|curtoken.type=LINE); else memcpy(&curtoken
33、,&buftoken,sizeof(TokenType); buftoken.type=NONE; #define ERRORPROCESS fprintf(out,pError line:%dn,lineno); return#define shift(num) memcpy(&(stacktop.token),&curtoken,sizeof(TokenType); stack+top.state=num; getnexttoken(word);#define Macro_caseAASR ASSIGN: case OPADD: case OPSUB: case R
34、PAREN#define Macro_caseAASRMD Macro_caseAASR: case OPMUL: case OPDIV#define Macro_NextcaseMDto9_10AndOther case OPMUL: shift(9); break; case OPDIV: shift(10); break#define Macro_NextcaseIFLto456AndOther case INTC: shift(4); break; case FLOATC: shift(5); break; case LPAREN: shift(6); break; default:
35、ERRORPROCESS#define Macro_chhgInETPgoto(State) memcpy(&buftoken,&curtoken,sizeof(TokenType); memcpy(&curtoken,&(stack-top.token),sizeof(TokenType);curtoken.type=Statevoid parse(void) struct int state; TokenType token; stackBUFSIZE; int top=0; char word80; float ta,tb;12 stacktop.stat
36、e=0; getnexttoken(word); while (1) switch(stacktop.state) case 0: switch(curtoken.type) case E: shift(1); break; case T: shift(2); break; case P: shift(3); break; Macro_NextcaseIFLto456AndOther; break; case 1: switch(curtoken.type) case ASSIGN: /* R1 */ Macro_chhgInETPgoto(S); if (curtoken.valuetype
37、=INT)/ ACCEPT fprintf(out, %dn,v); if (curtoken.valuetype=FLOAT) fprintf(out, %fn,curtoken.value.floatv); return; case OPADD: shift(7); break; case OPSUB: shift(8); break; default: ERRORPROCESS; break; case 2: switch(curtoken.type) case Macro_caseAASR:/R2 Macro_chhgInETPgoto(E); br
38、eak; Macro_NextcaseMDto9_10AndOther; break; case 3: switch(curtoken.type) case Macro_caseAASRMD: Macro_chhgInETPgoto(T);break; default: ERRORPROCESS; break; case 4: switch(curtoken.type) case Macro_caseAASRMD: Macro_chhgInETPgoto(P);break; default: ERRORPROCESS; break; case 5: switch(curtoken.type)
39、case Macro_caseAASRMD: Macro_chhgInETPgoto(P);break; default: ERRORPROCESS; break;13 case 6: switch(curtoken.type) case E: shift(11); break; case T: shift(2); break; case P: shift(3); break; Macro_NextcaseIFLto456AndOther; break; case 7: switch(curtoken.type) case T: shift(12); break; case P: shift(
40、3); break; Macro_NextcaseIFLto456AndOther; break; case 8: switch(curtoken.type) case T: shift(13); break; case P: shift(3); break; Macro_NextcaseIFLto456AndOther; break; case 9: switch(curtoken.type) case P: shift(14); break; Macro_NextcaseIFLto456AndOther; break; case 10: switch(curtoken.type) case
41、 P: shift(15); break; Macro_NextcaseIFLto456AndOther; break; case 11: switch(curtoken.type) case RPAREN: shift(16); break; case OPADD: shift(7); break; case OPSUB: shift(8); break; default: ERRORPROCESS; break; case 12: switch(curtoken.type) case Macro_caseAASR:/* R3 */memcpy(&buftoken,&curt
42、oken,sizeof(TokenType);if ( stacktop-3.token.valuetype=INT & stacktop-1.token.valuetype=INT)curtoken.valuetype=INT;v=v +v;elsecurtoken.valuetype=FLOAT;if (stacktop-3.token.valuetype=INT) ta=(float)(v)
43、; else ta=stacktop-3.token.value.floatv; if (stacktop-1.token.valuetype=INT) tb=(float)(v); else tb=stacktop-1.token.value.floatv;curtoken.value.floatv =ta+tb;14 curtoken.type=E;top=top-3; break; Macro_NextcaseMDto9_10AndOther; break; case 13: switch(curtoken.type) case Mac
44、ro_caseAASR:/* R4 */memcpy(&buftoken,&curtoken,sizeof(TokenType); curtoken.type=E;if ( stacktop-3.token.valuetype=INT & stacktop-1.token.valuetype=INT)curtoken.valuetype=INT;v=v;elseif (stacktop-3.token.valuetype=INT
45、) ta=(float)(v); else ta=stacktop-3.token.value.floatv; if (stacktop-1.token.valuetype=INT) tb=(float)(v); else tb=stacktop-1.token.value.floatv;curtoken.value.floatv =ta-tb;top=top-3; break; Macro_NextcaseMDto9_10AndOther; break; case 14: switch(c
46、urtoken.type) case Macro_caseAASRMD: /* R6 */memcpy(&buftoken,&curtoken,sizeof(TokenType); curtoken.type=T;if ( stacktop-3.token.valuetype=INT & stacktop-1.token.valuetype=INT)curtoken.valuetype=INT;v=v *v;elsecurtoken.valu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高速微量冷凍離心機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年鋁合金琴盒項(xiàng)目可行性研究報(bào)告
- 維修合同范本正規(guī)
- 中國(guó)H滑觸線集電器項(xiàng)目投資可行性研究報(bào)告
- 2025至2030年中國(guó)金色鐵桿電光花數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年校辦市場(chǎng)前景預(yù)測(cè)及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2025年椰子水果C果凍項(xiàng)目可行性研究報(bào)告
- 2025年摩托車掛檔桿項(xiàng)目可行性研究報(bào)告
- 2025年打火機(jī)用氣項(xiàng)目可行性研究報(bào)告
- 05 13 唐詩(shī)五首2024-2025學(xué)年八年級(jí)語(yǔ)文上冊(cè)同步教學(xué)設(shè)計(jì)(河北專版)
- 2025年益陽(yáng)醫(yī)學(xué)高等專科學(xué)校高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 餐飲業(yè)的供應(yīng)鏈管理與優(yōu)化
- 2025年紹興市上虞大眾勞動(dòng)事務(wù)代理(所)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 心律失常介入并發(fā)癥及預(yù)防
- 《分娩機(jī)轉(zhuǎn)》課件
- 口腔醫(yī)院市場(chǎng)營(yíng)銷新入職員工培訓(xùn)
- 軍隊(duì)文職備考(面試)近年考試真題(參考300題)
- 金融業(yè)稅收優(yōu)惠政策指引
- 葉圣陶杯作文
- 腦梗死臨床表現(xiàn)護(hù)理
- 新高考英語(yǔ)|語(yǔ)法專項(xiàng)之括號(hào)法突破長(zhǎng)難句 講解課件-2025屆高三英語(yǔ)上學(xué)期一輪復(fù)習(xí)專項(xiàng)
評(píng)論
0/150
提交評(píng)論