自己動手寫編譯器、鏈接器 自己动手写编译器、链接器
王博俊、張宇
買這商品的人也買了...
-
$507編譯原理, 2/e (Compilers : Principles, Techniques, and Tools, 2/e)
-
$403自製編程語言
-
$354$336 -
$229代碼之髓(編程語言核心概念)
-
$490$382 -
$199編譯技術
-
$620$558 -
$222自製搜尋引擎
-
$862編譯系統透視:圖解編譯原理
-
$594$564 -
$383LLVM Cookbook中文版
-
$301深入理解 BootLoader
-
$352自己動手構造編譯系統:編譯、彙編與鏈接
-
$507貝葉斯方法:概率編程與貝葉斯推斷 (Bayesian Methods for Hackers: Probabilistic Programming and Bayesian Inference)
-
$352面向機器智能的 TensorFlow 實踐
-
$414$393 -
$440$374 -
$507現代編譯原理 C語言描述 (修訂版)
-
$149編譯原理, 4/e
-
$1,000$850 -
$880$695 -
$714$678 -
$620$490 -
$534$507 -
$680$530
相關主題
商品描述
<內容簡介>
《自己動手寫編譯器、鏈接器》講述了一個真實編譯器的開發過程,源語言是以C語言為監本,進行適當簡化定義的一門新語言,稱之為SC語言(簡化的C語言),目標講言是大家熟悉的Intel x86機器語言。在《自己動手寫編譯器、鏈接器》中,讀者將看到從SC語言定義,到SCC編譯器開發的完整過程。《自己動手寫編譯器、鏈接器》介紹的SCC編譯器,沒有借助Lex與Yacc這些編譯器自動生成工具,純手工編寫而成,更便於學習和理解。為了生成可以直接運行EXE文件,《自己動手寫編譯器、鏈接器》還實現了一個鏈接器。讀完《自己動手寫編譯器、鏈接器》讀者將知道一門全新的語言如何定義,一個真實的編譯器、鏈接器如何編寫。
<章節目錄>
第1章引言
1.1Helloworld編譯過程分析
1.1.1HelloWorld程序源文件
1.1.2詞法分析
1.1.3語法分析
1.1.4語義分析
1.1.5鏈接器
1.2SCC編譯器簡介
1.2.1SCC編譯器架構
1.2.2SCC編譯器開發環境
1.2.3SCC編譯器運行環境
第2章文法知識
2.1語言概述
2.2形式語言
2.2.1字母表和符號串
2.2.2文法與語言的形式定義
2.2.3文法與語言的類型
2.2.4程序設計語言描述工具
2.3詞法分析方法
2.3.1詞法定義例舉
2.3.2狀態轉換圖
2.3.3詞法分析程序流程圖
2.4語法分析方法
2.4.1LL分析器
2.4.2LL(k)文法
2.4.3LL(1)文法
2.4.4遞歸子程序法
2.4.5文法的等價變換
第3章SC語言定義
3.1SC語言的藍本選擇
3.1.1K&R C
3.1.2C89
3.1.3C99
3.2SC語言對C89簡化原則
3.3SC語言的字符集
3.3.1基本字符集
3.3.2擴展字符集
3.4SC語言詞法定義
3.4.1關鍵字
3.4.2標識符
3.4.3整數常量
3.4.4字符常量
3.4.5字符串常量
3.4.6運算符及分隔符
3.4.7註釋
3.5SC語言語法定義
3.5.1外部定義
3.5.2語句
3.5.3表達式
3.6SC語言與C語言功能對比
3.6.1關鍵字
3.6.2數據類型
3.6.3存儲類型
3.6.4常量
3.6.5變量
3.6.6函數
3.6.7語句
3.6.8表達式
第4章SC語言詞法分析
4.1詞法分析任務的官方說法
4.2單詞編碼
4.3詞法分析用到的數據結構
4.3.1動態字符串
4.3.2動態數組
4.3.3哈希表
4.3.4單詞表
4.4錯誤處理,未雨綢繆
4.5詞法分析過程
4.5.1詞法分析主程序
4.5.2預處理
4.5.3解析標識符
4.5.4解析整數
4.5.5解析字符串
4.5.6詞法分析流程圖
4.6詞法著色
4.7控製程序
4.8詞法分析成果展示
第5章SC語言語法分析
5.1外部定義
5.1.1翻譯單元
5.1.2外部聲明
5.1.3類型區分符
5.1.4結構區分符
5.1.5函數調用約定
5.1.6結構成員對齊
5.1.7聲明符
5.1.8初值符
5.2語句
5.2.1覆合語句
5.2.2表達式語句
5.2.3選擇語句
5.2.4循環語句
5.2.5跳轉語句
5.3表達式
5.3.1賦值表達式
5.3.2相等類表達式
5.3.3關系表達式
5.3.4加減類表達式
5.3.5乘除類表達式
5.3.6一元表達式
5.3.7後綴表達式
5.3.8初值表達式
5.4語法縮進
5.4.1用到的全局變量及枚舉
5.4.2語法縮進程序
5.5總控程序
5.6成果展示
第6章符號表
6.1符號表簡介
6.1.1收集符號屬性
6.1.2語義的合法性檢查
6.2符號表用到的主要數據結構
6.2.1棧結構
6.2.2符號表結構
6.2.3數據類型結構
6.2.4存儲類型
6.3符號表的構造過程
6.3.1外部聲明
6.3.2類型區分符
6.3.3結構區分符
6.3.4聲明符
6.3.5變量初始化
6.3.6覆合語句
6.3.7sizeof表達式
6.3.8初等表達式
6.4控製程序
6.5成果展示
第7章生成COFF目標文件
7.1COFF文件結構
7.1.1基本概念
7.1.2總體結構
7.1.3COFF文件頭
7.1.4節頭表
7.1.5代碼節內容
7.1.6數據節與導入節內容
7.1.7COFF符號表
7.1.8COFF字符串表
7.1.9COFF重定位信息
7.2生成COFF目標文件
7.2.1生成節表
7.2.2生成符號表
7.2.3生成重定位信息
7.2.4生成目標文件
7.3成果展示
……
第8章x86機器語言
第9章SCC語義分析
第10章鏈接器
第11章SC語言程序開發
參考文獻
附錄A SC語言文法定義中英文對照表
目錄大綱
目錄
第1章引言1
1.1HelloWorld編譯過程分析1
1.1.1HelloWorld程序源文件1
1.1.2詞法分析2
1.1.3語法分析3
1.1.4語義分析3
1.1.5鏈接器4
1.2SCC編譯器簡介7
1.2.1SCC編譯器架構7
1.2.2SCC編譯器開發環境7
1.2.3SCC編譯器運行環境8
第2章文法知識10
2.1語言概述10
2.2形式語言11
2.2.1字母表和符號串11
2.2.2文法與語言的形式定義12
2.2.3文法與語言的類型13
2.2.4程序設計語言描述工具15
2.3詞法分析方法16
2.3.1詞法定義例舉17
2.3.2狀態轉換圖17
2.3.3詞法分析程序流程圖17
2.4語法分析方法18
2.4.1LL分析器18
2.4.2LL(k)文法19
2.4.3LL(1)文法19
2.4.4遞歸子程序法21
2.4.5文法的等價變換24目錄自己動手寫編譯器、鏈接器第3章SC語言定義26
3.1SC語言的藍本選擇26
3.1.1K&R C26
3.1.2C8926
3.1.3C9927
3.2SC語言對C89簡化原則27
3.3SC語言的字符集27
3.3.1基本字符集28
3.3.2擴展字符集28
3.4SC語言詞法定義29
3.4.1關鍵字29
3.4.2標識符30
3.4.3整數常量31
3.4.4字符常量31
3.4.5字符串常量32
3.4.6運算符及分隔符32
3.4.7註釋33
3.5SC語言語法定義33
3.5.1外部定義33
3.5.2語句35
3.5.3表達式39
3.6SC語言與C語言功能對比46
3.6.1關鍵字46
3.6.2數據類型46
3.6.3存儲類型47
3.6.4常量47
3.6.5變量47
3.6.6函數48
3.6.7語句48
3.6.8表達式50
第4章SC語言詞法分析52
4.1詞法分析任務的官方說法52
4.2單詞編碼53
4.3詞法分析用到的數據結構55
4.3.1動態字符串56
4.3.2動態數組58
4.3.3哈希表61
4.3.4單詞表62
4.4錯誤處理,未雨綢繆67
4.5詞法分析過程72
4.5.1詞法分析主程序72
4.5.2預處理76
4.5.3解析標識符79
4.5.4解析整數80
4.5.5解析字符串80
4.5.6詞法分析流程圖82
4.6詞法著色84
4.7控製程序85
4.8詞法分析成果展示86
第5章SC語言語法分析87
5.1外部定義87
5.1.1翻譯單元87
5.1.2外部聲明88
5.1.3類型區分符90
5.1.4結構區分符92
5.1.5函數調用約定95
5.1.6結構成員對齊95
5.1.7聲明符96
5.1.8初值符100
5.2語句101
5.2.1復合語句102
5.2.2表達式語句103
5.2.3選擇語句104
5.2.4循環語句104
5.2.5跳轉語句105
5.3表達式107
5.3.1賦值表達式108
5.3.2相等類表達式109
5.3.3關系表達式109
5.3.4加減類表達式110
5.3.5乘除類表達式111
5.3.6一元表達式112
5.3.7後綴表達式113
5.3.8初值表達式114
5.4語法縮進116
5.4.1用到的全局變量及枚舉116
5.4.2語法縮進程序117
5.5總控程序118
5.6成果展示119
第6章符號表120
6.1符號表簡介121
6.1.1收集符號屬性121
6.1.2語義的合法性檢查122
6.2符號表用到的主要數據結構123
6.2.1棧結構123
6.2.2符號表結構127
6.2.3數據類型結構132
6.2.4存儲類型133
6.3符號表的構造過程134
6.3.1外部聲明134
6.3.2類型區分符137
6.3.3結構區分符138
6.3.4聲明符144
6.3.5變量初始化149
6.3.6復合語句150
6.3.7sizeof表達式150
6.3.8初等表達式152
6.4控製程序153
6.5成果展示155
第7章生成COFF目標文件157
7.1COFF文件結構157
7.1.1基本概念157
7.1.2總體結構158
7.1.3COFF文件頭158
7.1.4節頭表161
7.1.5代碼節內容168
7.1.6數據節與導入節內容168
7.1.7COFF符號表169
7.1.8COFF字符串表173
7.1.9COFF重定位信息173
7.2生成COFF目標文件175
7.2.1生成節表176
7.2.2生成符號表178
7.2.3生成重定位信息182
7.2.4生成目標文件183
7.3成果展示185
第8章x86機器語言187
8.1x86機器語言簡介187
8.2通用指令格式188
8.2.1指令前綴188
8.2.2操作碼190
8.2.3ModR/M字節190
8.2.4SIB字節191
8.2.5偏移量與立即數193
8.3x86寄存器193
8.3.1數據寄存器193
8.3.2變址寄存器193
8.3.3指針寄存器194
8.3.4段寄存器194
8.3.5指令指針寄存器194
8.3.6標志寄存器195
8.4指令參考196
8.4.1符號說明196
8.4.2數據傳送指令198
8.4.3算術運算指令200
8.4.4邏輯運算指令203
8.4.5控制轉移指令205
8.4.6串操作指令208
8.4.7處理器控制指令208
8.5生成x86機器語言208
8.5.1操作數棧209
8.5.2生成通用指令210
8.5.3生成數據傳送指令213
8.5.4生成算術與邏輯運算指令217
8.5.5生成控制轉移指令221
8.5.6寄存器使用224
8.5.7本章用到的全局變量227
8.6成果展示227
第9章SCC語義分析229
9.1外部定義229
9.1.1聲明與函數定義229
9.1.2初值符232
9.1.3函數體234
9.2語句237
9.2.1表達式語句237
9.2.2選擇語句 238
9.2.3循環語句 239
9.2.4跳轉語句241
9.3表達式 244
9.3.1賦值表達式244
9.3.2相等類表達式245
9.3.3關系表達式246
9.3.4加減類表達248
9.3.5乘除類表達式249
9.3.6一元表達式250
9.3.7後綴表達式253
9.3.8初值表達式257
9.4成果展示259
第10章鏈接器261
10.1鏈接方式與庫文件261
10.2PE文件格式263
10.2.1總體結構263
10.2.2DOS部分264
10.2.3NT頭265
10.2.4節頭表272
10.2.5代碼節272
10.2.6數據節274
10.2.7導入節274
10.3鏈接器代碼實現278
10.3.1生成PE文件頭278
10.3.2加載目標文件281
10.3.3加載引入庫文件282
10.3.4解析外部符號285
10.3.5計算節區的RVA地址288
10.3.6重定位符號地址291
10.3.7修正需要重定位的地址292
10.3.8寫PE文件293
10.3.9生成EXE文件295
10.4SCC編譯器、鏈接器總控程序297
10.5成果展示301
10.6全書代碼架構302
第11章SC語言程序開發304
11.1SC語言程序開發流程304
11.2SCC編譯器測試程序304
11.2.1表達式測試304
11.2.2語句測試308
11.2.3結構體測試310
11.2.4函數參數傳遞測試312
11.2.5字符串測試314
11.2.6全局變量測試315
11.3語言舉例316
11.3.1可接收命令行參數的控制台程序316
11.3.2可接收命令行參數的Win32應用程序317
11.3.3HelloWindows窗口程序318
11.3.4文件復製程序323
11.3.5九九乘法表325
11.3.6打印菱形326
11.3.7屏幕捕捉程序328
參考文獻336
附錄ASC語言文法定義中英文對照表337