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