




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編譯原理課程設(shè)計(jì)報(bào)告課題名稱:C-語言掃描器和分析器提交文檔學(xué)生姓名: 提交文檔學(xué)生學(xué)號: 同組成員名單: 指導(dǎo)教師姓名: 指導(dǎo)教師評閱成績:指導(dǎo)教師評閱意見: 提交報(bào)告時(shí)間:2015年6月15日1課程設(shè)計(jì)目標(biāo)1.1實(shí)用性分析 系統(tǒng)基本上實(shí)現(xiàn)了Cminus的詞法分析器和語法分析器的功能,在詞法分析階段,能正確識別詞法單元Token,遇到非法字符和不匹配token時(shí)能準(zhǔn)確定位錯(cuò)誤的位置和發(fā)生錯(cuò)誤的原因。在語法分析部分能由詞法分析器的正確輸入得到源文件的語法分析樹。1.2要求 開發(fā)環(huán)境:Ubuntu14.04LTS+eclipse+GCC 運(yùn)行環(huán)境:Win7/Ubuntu/WindowsXP1.3目標(biāo) 實(shí)現(xiàn)Cminus的詞法分析器和語法分析器2分析與設(shè)計(jì)2.1系統(tǒng)設(shè)計(jì)思想 根據(jù)Cminus的語法定義得到正則表達(dá)式,轉(zhuǎn)換為NFA后化簡為DFA,從而實(shí)現(xiàn)語言的詞法分析器,使用遞歸下降程序分析定義和實(shí)現(xiàn)語言的文法,實(shí)現(xiàn)語言的語法分析器,在詞法分析階段通過DFA定義了簡單從錯(cuò)誤處理功能,如Token不匹配等錯(cuò)誤,可以定位錯(cuò)誤發(fā)生的位置行數(shù)以及錯(cuò)誤發(fā)生的原因。源文件2.2程序流程圖源文件逐行讀取源文件逐行讀取源文件讀取一個(gè)字符 否讀取一個(gè)字符輸出錯(cuò)誤信息輸出錯(cuò)誤信息DONE?DONE? 是mmatch(token)是否合法 否 是否合法printToken()是printToken()2.3詞法分析2.3.1token的類型typedefenum{ ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE,//關(guān)鍵字 ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI,BT,LQ,BQ, UEQ,DOU,LZGH,RZGH,LDGH,RDGH,//特殊字符}TokenType;2.3.2DFA分析//DFA中的狀態(tài)typedefenum{ START,//開始狀態(tài) INID, INNUM, DONE, INASSIGN, INCOMMENT,//注釋狀態(tài) ZHU, ZZHU}StateType;2.3.3代碼結(jié)構(gòu)分析2.4語法分析2.4.1節(jié)點(diǎn)的定義和類型typedefenum{Stmtk,Expk}Nodekind;typedefenum{IfK,ElseK,IntK,ReturnK,VoidK,WhileK,AssignK,HanK,HanshutiK}Stmtkind;typedefenum{Opk,Constk,Idk,Vark}Expkind;typedefenum{Void,Integer,Boolean}ExpType;typedefstructtreeNode{ structtreeNode*child[MAXCHILDREN]; structtreeNode*sibling; intlineno;Nodekindnodekind; union{Stmtkindstmt;Expkindexp;}kind; union{TokenTypeop; intval; char*name;}attr;ExpTypetype;}TreeNode;2.4.2遞歸下降語法分析 根據(jù)Cminus的語法規(guī)則得到BNF如下: program->declaration-listdeclaration-list->declaration-listdeclaration|declarationdeclaration->var-declaration|fun-declarationvar-declaration->type-specifierID;|type-specifierID[NUM];type-specifier->int|voidfun-declaration->type-specifierID(params)|compound-stmtparams->param-list|voidparam-list->param-list,param|paramparam->type-specifierID|type-specifierID[]compound-stmt->{local-declarationsstatement-list}local-declarations->local-declarationsvar-declaration|emptystatement-list->statement-liststatement|emptystatement->expression-stmt|compound-stmt|selection-stmt|iteration-stmt|return-stmtexpression-stmt->expression;|;selection-stmt->if(expression)statement|if(expression)statementelsestatementiteration-stmt->while(expression)statementreturn-stmt->return;|returnexpression;expression->var=expression|simple-expressionvar->ID|ID[expression]simple-expression->additive-expressionrelopadditive-expression|additive-expressionrelop-><=|<|>|>=|==|!=additive-expression->additive-expressionaddopterm|termaddop->+|-term->termmulopfactor|factormulop->*|/factor->(expression)|var|call|NUMcall->ID(args)args->arg-list|emptyarg-list->arg-list,expression|expression2.4.3代碼結(jié)構(gòu)分析 1、在globals.h中定義Token類型、語法分析樹節(jié)點(diǎn)類型、DFA狀態(tài)和lineno等全局變量。 2、在util.h和util.c中定義和實(shí)現(xiàn)了printToken、newStmtNode、newExpNode、copyString、printSpace、printTree幾個(gè)工具函數(shù)。 3、在scan.h和scan.c中定義和實(shí)現(xiàn)了getToken用于進(jìn)行詞法分析。 4、在parse.h和parse.c中定義和實(shí)現(xiàn)了parse函數(shù)以及文法的實(shí)現(xiàn)函數(shù)。 5、最后再main.c中進(jìn)行調(diào)用和調(diào)試。3程序代碼實(shí)現(xiàn) 見附件4測試結(jié)果4.1測試數(shù)據(jù)選擇測試用例為課本中C-的程序例子:test.cm4.2測試結(jié)果分析4.2.1詞法分析測試1.正確結(jié)果:2.當(dāng)注釋不匹配時(shí),詞法分析會報(bào)錯(cuò),如下圖所示:3.當(dāng)出現(xiàn)非法字符時(shí)(C-語言中不可能出現(xiàn)的字符),會報(bào)錯(cuò),如下圖所示:4.2.2詞法分析測試1.正確結(jié)果2.當(dāng)語法分析階段出現(xiàn)錯(cuò)誤時(shí),語法樹的生成將會終止。5總結(jié)5.1收獲 通過實(shí)現(xiàn)Cminus的詞法分析器和語法分析器,掌握了編譯原理的理論知識,通過動手實(shí)現(xiàn)練習(xí)了正則表達(dá)式的設(shè)計(jì),從正則表達(dá)式到NFA再到DFA的轉(zhuǎn)換,理解了BNF文法和文法的二義性的消除。在詞法分析過程中掌握了基本的調(diào)試功能。通過語法分析,理解了遞歸下降分析和LL(1)文法。 在調(diào)試過程中體驗(yàn)到了合作的作用,尤其是在debug的時(shí)候,能從不同的角度去檢查代碼可以加快bug的排查。在練習(xí)過程中學(xué)學(xué)習(xí)到了工程化開發(fā)方法。同時(shí),項(xiàng)目嘗試在Ubuntu下完成,更加充分地學(xué)習(xí)了Linux系統(tǒng)的用法和特色。5.2特色1、代碼整潔清晰,結(jié)構(gòu)化和規(guī)范化,有完整的注釋和說明,輸出結(jié)果完整清晰,便于調(diào)試和查看修改。 2、可以選擇將輸出重定向到其他文件,如使用如下shell命令運(yùn)行: ./cminusinput.cm[output]#其中output為可選的輸出文件名 3、程序識別文件名,只接收后綴名為.cm為源文件,可以在輸入階段對源文件進(jìn)行關(guān)聯(lián)。5.3不足 1、只實(shí)現(xiàn)了基本的功能,不能檢查to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- WPS實(shí)操測試的試題及答案
- 作品中政治隱喻的藝術(shù)手法試題及答案
- 辦公文檔結(jié)構(gòu)設(shè)計(jì)的基本技巧試題及答案
- 文學(xué)中的象征手法試題及答案
- 辦公軟件操作的注意事項(xiàng)與建議試題及答案
- 國產(chǎn)法律與國際法試題及答案
- 計(jì)算機(jī)一級Photoshop靈活應(yīng)用技巧試題及答案
- 作家對社會話語權(quán)的影響試題及答案
- WPS快捷操作指引試題及答案
- 2025年計(jì)算機(jī)WPS文檔合并功能詳解試題及答案
- 2025年財(cái)務(wù)會計(jì)師入職考試試題及答案
- 安徽省1號卷A10聯(lián)盟2025屆高三5月最后一卷地理試題及答案
- 倉庫定置目視化管理
- 2025年5月12日陜西省公務(wù)員面試真題及答案解析
- 2025-2030中國海上風(fēng)電行業(yè)市場深度調(diào)研及投資策略與投資前景研究報(bào)告
- 【語文】第23課《“蛟龍”探?!氛n件 2024-2025學(xué)年統(tǒng)編版語文七年級下冊
- 大部分分校:地域文化形考任務(wù)一-國開(CQ)-國開期末復(fù)習(xí)資料
- 2024年江蘇省南通市中考地理試題(含答案)
- 跨文化商務(wù)交際智慧樹知到期末考試答案章節(jié)答案2024年西安工業(yè)大學(xué)
- MOOC 財(cái)務(wù)報(bào)表分析-華中科技大學(xué) 中國大學(xué)慕課答案
- XX公司粗苯泄漏著火事故演練方案定
評論
0/150
提交評論