資源簡介
1. 課程設(shè)計(jì)目標(biāo)
實(shí)驗(yàn)建立C-編譯器。只含有掃描程序(scanner)和語法分析(parser)部分。
2. 分析與設(shè)計(jì)
C-編譯器設(shè)計(jì)的整體框架,本實(shí)驗(yàn)實(shí)現(xiàn)掃描處理和語法分析程序(圖中粗黑部分)。
2.1 、掃描程序scanner部分
2.1.1系統(tǒng)設(shè)計(jì)思想
設(shè)計(jì)思想:根據(jù)DFA圖用switch-case結(jié)構(gòu)實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換。
慣用詞法:
① 語言的關(guān)鍵字:else if int return void while
② 專用符號:+ - * / < >= == != = ; , ( ) [ ] { } /* */
③ 其他標(biāo)記是ID和NUM,通過下列正則表達(dá)式定義:
ID = letter letter*
NUM = digit digit*
letter = a|..|z|A|..|Z
digit = 0|..|9
大寫和小寫字母是有區(qū)別的
④ 空格由空白、換行符和制表符組成。空格通常被忽略,除了它必須分開ID、NUM關(guān)鍵字。
⑤ 注釋用通常的C語言符號/ * . . . * /圍起來。注釋可以放在任何空白出現(xiàn)的位置(即注釋不能放在標(biāo)記內(nèi))上,且可以超過一行。注釋不能嵌套
說明:當(dāng)輸入的字符使DFA到達(dá)接受狀態(tài)的時候,則可以確定一個單詞了。初始狀態(tài)設(shè)置為START,當(dāng)需要得到下一個token時,取得次token的第一個字符,并且按照DFA與對此字符的類型分析,轉(zhuǎn)換狀態(tài)。重復(fù)此步驟,直到DONE為止,輸出token類型。當(dāng)字符為“/”時,狀態(tài)轉(zhuǎn)換為SLAH再判斷下一個字符,如果為“*”則繼續(xù)轉(zhuǎn)到INCOMMENT,最后以“*”時轉(zhuǎn)到ENDCOMMENT狀態(tài),表明是注釋,如果其他的則是字符停滯于當(dāng)前字符,并且輸出“/”。
2.1.2程序流程圖
代碼片段和文件信息
評論
共有 條評論