freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理課程設(shè)計--c-編譯器詞法分析與語法分析的實現(xiàn)(已修改)

2025-06-20 12:19 本頁面
 

【正文】 編譯原理課程設(shè)計報告 課題名稱: C編譯器詞法分析與語法分析的實現(xiàn) 提交文檔學(xué)生姓名: 黃臻旸 提交文檔學(xué)生學(xué)號: 1043041227 同組 成 員 名 單: 無 指導(dǎo) 教 師 姓 名: 金軍 指導(dǎo)教師評閱成績: 指導(dǎo)教師評閱意見: . . 提交報告時間: 2021 年 6 月 5 日 編譯原理課程設(shè)計報告 ...................................................................................................................1 課程設(shè)計目標 ...........................................................................................................................3 分析與設(shè)計 ..............................................................................................................................3 、說明所用的方法: ...........................................................................................................3 、系統(tǒng)總圖: .....................................................................................................................3 、 scanner部分: ........................................................................................................3 、 parse部分: ...........................................................................................................5 、代碼設(shè)計說明 .........................................................................................................7 程序代碼實現(xiàn) ......................................................................................................................... 10 、獲取輸入部分(在 ): ....................................................................................... 10 、詞法分析部分(在 ): ........................................................................................ 10 、語法分析部分(在 ): ....................................................................................... 15 、輸出與結(jié)點的建立(在 ) ..................................................................................... 29 、 TokenType、 treeNode 與結(jié)點類型的聲明(在 中) .................................................. 35 測試結(jié)果 ............................................................................................................................... 36 總結(jié) ..................................................................................................................................... 40 、收獲 ............................................................................................................................. 43 、不足 ............................................................................................................................. 43 課程設(shè)計目標 本次實驗,本 C 編譯 器主要設(shè)計并且實現(xiàn)了 C 編譯器的詞法分析功能與語法分析功能。 分析與設(shè)計 、說明所用的方法: 各部分的實現(xiàn)方法( scanner:手工實現(xiàn)、 Lex; parser:遞歸下降、 LL(1)、 LR(0)、 SLR(1)、LR(1)、 LALR(1)、 Yacc),所用編程語言 實現(xiàn)內(nèi)容 所用的實驗方法 所用編程語言 scanner 手工實現(xiàn) C 語言 parse 遞歸下降 C 語言 、系統(tǒng)總圖: 、 scanner 部分: 、實驗原理: 掃描程序的任務(wù)是從源代碼中讀取字符并形成由 編譯器的以后部分(通常是分析程序)處理的邏輯單元。由掃描程序生成的邏輯單元稱作記號( token),將字符組合成記號與在一個英語句子中將字母將字母構(gòu)成單詞并確定單次的含義很相像。 在此程序中,我將記號分成了以下類型: typedef enum {//按照書上附錄 B 程序布局,放在 ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, ID,NUM, ASSIGN,PLUS,MINUS,TIMES,OVER,LT,LET,BT,BET,EQ,NEQ, // = + * / = = == != LPAREN_1,RPAREN_1,SEMI,COM,LPAREN_2,RPAREN_2,LPAREN_3,RPAREN_3,LIN,RIN // { } 。 , [ ] ( ) /* } TokenType。 其中,關(guān)鍵字有: else、 if、 int、 return、 void、 while; 專 用符號有: +、 、 *、 /、 、 =、 、 =、 ==、 ~=、 =、 。、 ,、 (、 )、 [、 ]、 {、 }、 /*、*/ 其他標記是 ID、 NUM,通過下列正則表達式定義: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 小寫大寫字母是有區(qū)別的。 空格由空白、換行符和制表符組成。空格通常被忽略,除了他必須分開 ID、 NUM關(guān)鍵字。 注釋常用通常的 C 語言符號 /*...*/圍起來。注釋可以放在任何空白出現(xiàn)的位置(即注釋不能 放在標記內(nèi))上,且可以超過一行。注釋不能嵌套。 、實驗方法: 我通過對 scanner 部分原理的了解,確定了他的 NFA,再將 NFA 轉(zhuǎn)化成 DFA,并且將狀態(tài)數(shù)最小化。最后根據(jù)我所得的 DFA 與課后 TINY 的示例程序編寫 。 最后所得的 DFA: 、編程方法: 編程采用 C 語言。 初始狀態(tài)設(shè)置為 START,當需要得到下一個 token 時,取得此 token的第一個字符,并且按照 DFA 與對此字符的類型的分析,轉(zhuǎn)換狀態(tài)。重復(fù)此步驟,直到 DONE 為止,輸出 token類型。 此中難點在 于對于注釋的分析,因此我將判斷注釋分成幾個步驟。當字符為“ /”時,狀態(tài)轉(zhuǎn)換為 INASSIGN_1(自創(chuàng)的)再判斷下一個字符,如果為“ *”則是注釋,如果是其他的則字符停滯與當前字符( ungetNextChar()),并且輸出“ /”。在開始時一直未注意停滯與當前字符,因此總是讀不出“ /v*”中的“ v”,在調(diào)試多次后才得以解決。 、 parse 部分: 、實驗原理: C語言的各個語法規(guī)則: 1. program → declarationlist 2. declarationlist → declarationlist declaration | declaration 3. declaration → vardeclaration | fundeclaration 4. vardeclaration → typespecifier ID 。 | typespecifier ID [ NUM ] 。 5. typespecifier → int | void 6. fundeclaration → typespecifier ID ( params ) poundstmt (在課后解釋中poundstmt 前面沒有“ |”符號) 7. params → paramslist | void 8. paramlist → paramlist , param | param 9. param → typespecifier ID | typespecifier ID [ ] 10. poundstmt → { localdeclarations statementlist } 11. localdeclarations → localdeclarations vardeclaration | empty 12. statementlist → statementlist statement | empty 13. statement → expressionstmt | poundstmt | selectionstmt | iterationstmt | returnstmt 14. expressionstmt → expression 。 | 。 15. selectionstmt → if ( expression ) statement | if ( expression ) statement else statement 16. iterationstmt → while(expression) statement 17. returnstmt → return 。 | return expression 。 18. expression → var = expression | simpleexpression 19. var → ID | ID [ expression ] 20. simpleexpression → additiveexpression relop additiveexpression | additiveexpression 21. relop → = | | | = | == | != 22. additiveexpression → additiveexpression addop term | term 23. addop → + | 24. term → term mulop fa
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1