本書主要著力于敘述編譯器具體的設(shè)計(jì)和編程細(xì)節(jié),并不側(cè)重探究編譯器的設(shè)計(jì)理論。本書以目前較為流行的兩款微處理器(MCU)為例,設(shè)計(jì)、開發(fā)相應(yīng)的C語言編譯器工具包:(1) 加強(qiáng)型PIC16Fxxxx系列MCU、8位微處理器、RISC系統(tǒng)結(jié)構(gòu)、小端式體系(little-endian)。(2) STM8系列MCU、8位微處理器、CISC系統(tǒng)結(jié)構(gòu)、大端式體系(big-endian)。本書以實(shí)際目標(biāo)處理器為對(duì)象,介紹和展現(xiàn)編譯器設(shè)計(jì)的全部詳細(xì)過程。
蘇孟晉,出生于上海,祖籍江蘇常州。1978年考入浙江大學(xué)計(jì)算機(jī)專業(yè)就讀,1982年獲學(xué)士學(xué)位。同年開始在上海同濟(jì)大學(xué)計(jì)算機(jī)專業(yè)供職,1987年獲講師職稱。1990年赴美留學(xué),于1992年獲碩士學(xué)位。
第一篇 PIC16Fxxxx編譯器(cc16e.exe)的設(shè)計(jì)
第1章 工具準(zhǔn)備和系統(tǒng)設(shè)置............................................................................................2
1.1 GNU C/C++編譯工具的選擇..................................................................................2
1.1.1 MinGW ........................................................................................................ 2
1.1.2 DJGPP .......................................................................................................... 2
1.1.3 Cygwin ......................................................................................................... 2
1.2 解析工具構(gòu)造器 ...................................................................................................... 3
1.3 工具的安裝 .............................................................................................................. 3
1.4 目標(biāo)編譯器運(yùn)行前的系統(tǒng)設(shè)置 .............................................................................. 4
第2章 預(yù)處理器的設(shè)計(jì)...................................................................................................5
2.1 預(yù)處理器(C/C++版) ........................................................................................... 6
2.1.1 項(xiàng)目文件及其設(shè)置......................................................................................6
2.1.2 任務(wù)和算法.................................................................................................. 7
2.2 源程序預(yù)處理器(flex 版) ................................................................................. 11
2.2.1 正規(guī)表達(dá)式簡(jiǎn)介........................................................................................12
2.2.2 預(yù)處理器設(shè)計(jì)實(shí)戰(zhàn)....................................................................................14
2.3 本章小結(jié) ................................................................................................................ 20
第3章 編譯器設(shè)計(jì)初步實(shí)踐..........................................................................................21
3.1 設(shè)計(jì)簡(jiǎn)介 ................................................................................................................ 21
3.2 一個(gè)簡(jiǎn)單的 C 語言關(guān)鍵字識(shí)別器........................................................................22
3.2.1 工程項(xiàng)目文件............................................................................................22 3.2.2 項(xiàng)目運(yùn)行主程序........................................................................................23
小型編譯器設(shè)計(jì)實(shí)踐
3.2.3 詞法解析自動(dòng)機(jī)部分................................................................................23
3.2.4 詞法解析 C 語言部分 ............................................................................... 24
3.3 編譯器雛形(flex 和 bison 的使用) .................................................................. 25
3.3.1 問題的提出和任務(wù)....................................................................................25
3.3.2 工程文件 makefile.....................................................................................26
3.3.3 詞法解析規(guī)則部分....................................................................................26
3.3.4 詞法解析的啟動(dòng)........................................................................................27
3.3.5 語法解析器文本及其基本格式 ................................................................ 27
3.3.6 語法解析器文本各區(qū)域的內(nèi)容 ................................................................ 28
3.4 語法解析和詞法解析之間的數(shù)值傳遞 ................................................................ 30
3.4.1 語法解析器文本的定義部分 .................................................................... 31
3.4.2 語法解析器識(shí)別規(guī)則部分 ........................................................................ 32
3.4.3 詞法解析器解析規(guī)則部分 ........................................................................ 33
3.5 編譯樹的構(gòu)建 ........................................................................................................ 34
3.5.1 編譯樹中的數(shù)據(jù)類型和結(jié)構(gòu) .................................................................... 34
3.5.2 節(jié)點(diǎn)生成和處理函數(shù)................................................................................35
3.5.3 語法解析器文本的定義部分 .................................................................... 36
3.5.4 語法解析器文本的語法解析識(shí)別規(guī)則部分 ............................................ 36
3.6 源程序語句代碼的截取和嵌入 ............................................................................ 38
3.6.1 緩沖區(qū)與相關(guān)函數(shù)....................................................................................38
3.6.2 截取源程序代碼并送入緩沖區(qū)中 ............................................................ 38
3.6.3 讀取源代碼緩沖內(nèi)容................................................................................39
3.6.4 增加新定義并擴(kuò)充 node 數(shù)據(jù)結(jié)構(gòu) .......................................................... 39
3.6.5 支持函數(shù)和程序........................................................................................40
3.6.6 在源程序片段中嵌入節(jié)點(diǎn) ........................................................................ 41
3.7 編譯樹的顯示 ........................................................................................................ 41
3.7.1 用于顯示編譯樹的函數(shù) ............................................................................ 42 3.7.2 編譯樹的顯示操作....................................................................................42
第4章 編譯器設(shè)計(jì)實(shí)戰(zhàn).................................................................................................44 4.1 對(duì) C 語言的詞法解析............................................................................................44
VIII
4.1.1 詞法解析宏定義部分................................................................................44
4.1.2 各種常數(shù)解析識(shí)別....................................................................................45
4.1.3 C 語言關(guān)鍵字和標(biāo)識(shí)符解析 .................................................................... 46
4.1.4 C 語言各種操作運(yùn)算符識(shí)別 .................................................................... 46
4.1.5 關(guān)于字符和字符串常數(shù)的處理 ................................................................ 47
4.2 對(duì) C 語言的語法解析............................................................................................ 47
4.2.1 描述特征的 attrib 完整結(jié)構(gòu) ..................................................................... 48
4.2.2 各類 node 數(shù)據(jù)結(jié)構(gòu)的完善 ...................................................................... 48
4.2.3 語法解析定義部分的完善 ........................................................................ 49
4.2.4 函數(shù)聲明/定義的完善............................................................................... 51
4.2.5 運(yùn)算語法和運(yùn)算符優(yōu)先確定 .................................................................... 52
4.2.6 變量定義語法規(guī)則的完善 ........................................................................ 53
4.3 支持預(yù)處理等語句的語法解析 ............................................................................ 56
4.3.1 用于預(yù)處理語句的新增變量 .................................................................... 56
4.3.2 用于預(yù)處理語句的新增解析狀態(tài) ............................................................ 57
4.3.3 用于預(yù)處理語句的解析 ............................................................................ 57
4.3.4 用于預(yù)處理語句的節(jié)點(diǎn)和數(shù)據(jù)類型 ........................................................ 58
4.4 支持結(jié)構(gòu)化數(shù)據(jù)的語法解析 ................................................................................ 61
4.5 支持對(duì) typedef 的語法解析 ...........................