編譯原理課程設(shè)計報告-6_第1頁
編譯原理課程設(shè)計報告-6_第2頁
編譯原理課程設(shè)計報告-6_第3頁
編譯原理課程設(shè)計報告-6_第4頁
編譯原理課程設(shè)計報告-6_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

編譯原理課程設(shè)計報告課題名稱:C-語言掃描器和分析器提交文檔學生姓名: 提交文檔學生學號: 同組成員名單: 指導教師姓名: 指導教師評閱成績:指導教師評閱意見: 提交報告時間:2015年6月15日1課程設(shè)計目標1.1實用性分析 系統(tǒng)基本上實現(xiàn)了Cminus的詞法分析器和語法分析器的功能,在詞法分析階段,能正確識別詞法單元Token,遇到非法字符和不匹配token時能準確定位錯誤的位置和發(fā)生錯誤的原因。在語法分析部分能由詞法分析器的正確輸入得到源文件的語法分析樹。1.2要求 開發(fā)環(huán)境:Ubuntu14.04LTS+eclipse+GCC 運行環(huán)境:Win7/Ubuntu/WindowsXP1.3目標 實現(xiàn)Cminus的詞法分析器和語法分析器2分析與設(shè)計2.1系統(tǒng)設(shè)計思想 根據(jù)Cminus的語法定義得到正則表達式,轉(zhuǎn)換為NFA后化簡為DFA,從而實現(xiàn)語言的詞法分析器,使用遞歸下降程序分析定義和實現(xiàn)語言的文法,實現(xiàn)語言的語法分析器,在詞法分析階段通過DFA定義了簡單從錯誤處理功能,如Token不匹配等錯誤,可以定位錯誤發(fā)生的位置行數(shù)以及錯誤發(fā)生的原因。源文件2.2程序流程圖源文件逐行讀取源文件逐行讀取源文件讀取一個字符 否讀取一個字符輸出錯誤信息輸出錯誤信息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é)點的定義和類型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é)點類型、DFA狀態(tài)和lineno等全局變量。 2、在util.h和util.c中定義和實現(xiàn)了printToken、newStmtNode、newExpNode、copyString、printSpace、printTree幾個工具函數(shù)。 3、在scan.h和scan.c中定義和實現(xiàn)了getToken用于進行詞法分析。 4、在parse.h和parse.c中定義和實現(xiàn)了parse函數(shù)以及文法的實現(xiàn)函數(shù)。 5、最后再main.c中進行調(diào)用和調(diào)試。3程序代碼實現(xiàn) 見附件4測試結(jié)果4.1測試數(shù)據(jù)選擇測試用例為課本中C-的程序例子:test.cm4.2測試結(jié)果分析4.2.1詞法分析測試1.正確結(jié)果:2.當注釋不匹配時,詞法分析會報錯,如下圖所示:3.當出現(xiàn)非法字符時(C-語言中不可能出現(xiàn)的字符),會報錯,如下圖所示:4.2.2詞法分析測試1.正確結(jié)果2.當語法分析階段出現(xiàn)錯誤時,語法樹的生成將會終止。5總結(jié)5.1收獲 通過實現(xiàn)Cminus的詞法分析器和語法分析器,掌握了編譯原理的理論知識,通過動手實現(xiàn)練習了正則表達式的設(shè)計,從正則表達式到NFA再到DFA的轉(zhuǎn)換,理解了BNF文法和文法的二義性的消除。在詞法分析過程中掌握了基本的調(diào)試功能。通過語法分析,理解了遞歸下降分析和LL(1)文法。 在調(diào)試過程中體驗到了合作的作用,尤其是在debug的時候,能從不同的角度去檢查代碼可以加快bug的排查。在練習過程中學學習到了工程化開發(fā)方法。同時,項目嘗試在Ubuntu下完成,更加充分地學習了Linux系統(tǒng)的用法和特色。5.2特色1、代碼整潔清晰,結(jié)構(gòu)化和規(guī)范化,有完整的注釋和說明,輸出結(jié)果完整清晰,便于調(diào)試和查看修改。 2、可以選擇將輸出重定向到其他文件,如使用如下shell命令運行: ./cminusinput.cm[output]#其中output為可選的輸出文件名 3、程序識別文件名,只接收后綴名為.cm為源文件,可以在輸入階段對源文件進行關(guān)聯(lián)。5.3不足 1、只實現(xiàn)了基本的功能,不能檢查to

溫馨提示

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

評論

0/150

提交評論