注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)編譯器之旅:打造自己的編程語(yǔ)言(微課視頻版)

編譯器之旅:打造自己的編程語(yǔ)言(微課視頻版)

編譯器之旅:打造自己的編程語(yǔ)言(微課視頻版)

定 價(jià):¥59.00

作 者: 于東亮
出版社: 清華大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書(shū)可以去


ISBN: 9787302667223 出版時(shí)間: 2024-08-01 包裝: 平裝-膠訂
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  本書(shū)以簡(jiǎn)單的算法、清晰的架構(gòu),講述了把高級(jí)語(yǔ)言轉(zhuǎn)化成Linux程序的全過(guò)程,以及其中蘊(yùn)含的數(shù)學(xué)原理。本書(shū)共11章,按照源碼編譯的順序分為入門(mén)篇和進(jìn)階篇。入門(mén)篇(第1~4章)詳細(xì)介紹了詞法分析、語(yǔ)法分析、語(yǔ)義分析,涵蓋了編譯器前端的所有內(nèi)容。進(jìn)階篇(第5~11章)進(jìn)一步說(shuō)明了怎么把抽象語(yǔ)法樹(shù)轉(zhuǎn)化成可執(zhí)行程序的全過(guò)程,包含了三地址碼的生成、中間代碼優(yōu)化、寄存器分配、機(jī)器碼的生成、ELF文件格式、連接器和虛擬機(jī)的實(shí)現(xiàn)。第12章記錄了作者對(duì)泛編譯器問(wèn)題的進(jìn)一步思考。本書(shū)適合初學(xué)者入門(mén)編譯原理,也可用于資深程序員在發(fā)明一門(mén)新語(yǔ)言時(shí)的技術(shù)資料,并可用作高等院校和培訓(xùn)機(jī)構(gòu)的教學(xué)參考書(shū)。

作者簡(jiǎn)介

  于東亮,SCF編譯器作者,資深C程序員和FFmpeg工程師,畢業(yè)于天津大學(xué),長(zhǎng)期從事Linux下的編程工作。先后制作了“C語(yǔ)言技術(shù)內(nèi)幕”“Linux環(huán)境的編程詳解”“怎么用C語(yǔ)言寫(xiě)一個(gè)簡(jiǎn)單EDA”“編譯器入門(mén)”等原創(chuàng)視頻合集。本書(shū)為作者的第一部實(shí)體書(shū),以SCF編譯器為例講述了一門(mén)高級(jí)語(yǔ)言的發(fā)明過(guò)程。

圖書(shū)目錄

入門(mén)篇
第1章編譯器簡(jiǎn)介(19min)3
1.1編程語(yǔ)言的發(fā)展史3
1.2編譯器在IT行業(yè)里的核心地位3
1.3編譯器的代碼架構(gòu)4
第2章詞法分析(34min)7
2.1“理想語(yǔ)言”的詞法分析7
2.2實(shí)際編程語(yǔ)言的詞法擴(kuò)展8
2.2.1編程語(yǔ)言的標(biāo)志符9
2.2.2關(guān)鍵字9
2.2.3數(shù)字10
2.2.4數(shù)據(jù)結(jié)構(gòu)11
2.3詞法分析的數(shù)學(xué)解釋12
第3章語(yǔ)法分析(123min)14
3.1語(yǔ)句類型的劃分14
3.2語(yǔ)句的嵌套和遞歸分析16
3.2.1變量聲明語(yǔ)句的分析16
3.2.2類型定義語(yǔ)句的分析17
3.2.3順序塊的分析18
3.2.4表達(dá)式的分析18
3.2.5運(yùn)算符的優(yōu)先級(jí)和結(jié)合性19
3.2.6表達(dá)式樹(shù)的構(gòu)造步驟20
3.2.7完整的抽象語(yǔ)法樹(shù)20
3.2.8抽象語(yǔ)法樹(shù)的數(shù)據(jù)結(jié)構(gòu)21
3.2.9變量和類型的數(shù)據(jù)結(jié)構(gòu)22
3.2.10變量的語(yǔ)法檢查23
3.2.11星號(hào)和乘法的區(qū)分24
3.3語(yǔ)法的靈活編輯和有限自動(dòng)機(jī)框架24
3.3.1有限自動(dòng)機(jī)的簡(jiǎn)介24
3.3.2語(yǔ)法的編輯25
3.3.3編程語(yǔ)言的語(yǔ)法圖26
3.3.4SCF框架怎么實(shí)現(xiàn)“遞歸”27
3.3.5語(yǔ)法分析框架的模塊上下文29
3.3.6for循環(huán)的語(yǔ)法分析模塊30
3.3.7小括號(hào)的多種含義36
3.4語(yǔ)法分析的數(shù)學(xué)解釋36
第4章語(yǔ)義分析(72min)38
4.1類型檢查38
4.2語(yǔ)義分析框架40
4.2.1語(yǔ)義分析的回調(diào)函數(shù)40
4.2.2語(yǔ)義分析中的遞歸43
4.3運(yùn)算符重載46
4.3.1運(yùn)算符重載的實(shí)現(xiàn)46
4.3.2函數(shù)調(diào)用47
4.3.3重載函數(shù)的查找47
4.3.4代碼實(shí)現(xiàn)48
4.3.5SCF編譯器的類對(duì)象51
4.4new關(guān)鍵字51
4.5多值函數(shù)55
4.5.1應(yīng)用程序二進(jìn)制接口56
4.5.2語(yǔ)法層面的支持56
4.5.3語(yǔ)義層面的支持57
進(jìn)階篇
第5章三地址碼的生成(84min)63
5.1回填技術(shù)63
5.1.1回填的數(shù)據(jù)結(jié)構(gòu)63
5.1.2三地址碼的數(shù)據(jù)結(jié)構(gòu)64
5.1.3回填的步驟65
5.2ifelse的三地址碼65
5.3循環(huán)的入口和出口68
5.4指針與數(shù)組的賦值72
5.5new關(guān)鍵字的三地址碼74
5.6跳轉(zhuǎn)的優(yōu)化77
5.6.1跳轉(zhuǎn)的優(yōu)化簡(jiǎn)介77
5.6.2邏輯運(yùn)算符的短路優(yōu)化78
5.6.3死代碼消除80
5.6.4代碼實(shí)現(xiàn)80
第6章基本塊的劃分(19min)83
6.1比較、跳轉(zhuǎn)導(dǎo)致的基本塊劃分83
6.2函數(shù)調(diào)用84
6.3基本塊的流程圖84
第7章中間代碼優(yōu)化(100min)86
7.1代碼框架86
7.2內(nèi)聯(lián)函數(shù)88
7.3有向無(wú)環(huán)圖93
7.3.1公共子表達(dá)式93
7.3.2數(shù)據(jù)結(jié)構(gòu)94
7.3.3有向無(wú)環(huán)圖的生成95
7.4圖的搜索算法97
7.4.1基本塊的數(shù)據(jù)結(jié)構(gòu)97
7.4.2寬度優(yōu)先搜索98
7.4.3深度優(yōu)先搜索99
7.5指針?lè)治?00
7.5.1指針解引用的分析100
7.5.2數(shù)組和結(jié)構(gòu)體的指針?lè)治?06
7.6跨函數(shù)的指針?lè)治?09
7.7變量活躍度分析114
7.7.1變量的活躍度114
7.7.2單個(gè)基本塊的變量活躍度分析115
7.7.3基本塊流程圖上的分析117
7.7.4代碼實(shí)現(xiàn)118
7.8自動(dòng)內(nèi)存管理120
7.9DAG優(yōu)化125
7.9.1無(wú)效運(yùn)算125
7.9.2相同子表達(dá)式的判斷126
7.9.3出口活躍變量的優(yōu)化126
7.9.4后 的優(yōu)化127
7.9.5邏輯運(yùn)算符的優(yōu)化127
7.9.6DAG優(yōu)化的代碼實(shí)現(xiàn)128
7.10循環(huán)分析133
7.10.1循環(huán)的識(shí)別133
7.10.2循環(huán)的優(yōu)化138
第8章寄存器分配(23min)143
8.1不同CPU架構(gòu)的寄存器組143
8.2變量之間的沖突144
8.3圖的著色算法148
8.3.1簡(jiǎn)單著色算法148
8.3.2改進(jìn)的著色算法150
第9章機(jī)器碼的生成(103min)155
9.1RISC架構(gòu)的優(yōu)勢(shì)155
9.2寄存器溢出155
9.2.1寄存器的數(shù)據(jù)結(jié)構(gòu)156
9.2.2寄存器的沖突156
9.2.3寄存器的溢出158
9.3X86_64的機(jī)器碼生成158
9.3.1X86_64的機(jī)器指令158
9.3.2機(jī)器碼的生成160
9.3.3目標(biāo)文件176
9.4ARM64的機(jī)器碼生成180
9.4.1指令特點(diǎn)180
9.4.2機(jī)器碼生成181
第10章ELF格式和可執(zhí)行程序的連接(94min)184
10.1ELF格式184
10.1.1文件頭184
10.1.2節(jié)頭表186
10.1.3程序頭表188
10.1.4ELF格式的實(shí)現(xiàn)190
10.2連接器198
10.2.1連接198
10.2.2靜態(tài)連接202
10.2.3動(dòng)態(tài)連接205
10.2.4編譯器的主流程215
10.3可執(zhí)行文件的運(yùn)行219
10.3.1進(jìn)程創(chuàng)建219
10.3.2程序的加載和運(yùn)行220
10.3.3動(dòng)態(tài)庫(kù)函數(shù)的加載221
10.3.4源代碼的編譯、連接、運(yùn)行222
第11章Naja字節(jié)碼和虛擬機(jī)(67min)224
11.1Naja字節(jié)碼224
11.2虛擬機(jī)229
11.2.1虛擬機(jī)的數(shù)據(jù)結(jié)構(gòu)229
11.2.2虛擬機(jī)的運(yùn)行230
11.2.3動(dòng)態(tài)庫(kù)函數(shù)的加載236
第12章信息編碼的數(shù)學(xué)哲學(xué)239
12.1信息編碼格式的轉(zhuǎn)換239
12.2多項(xiàng)式時(shí)間的算法241
12.3自然指數(shù)e和梯度下降算法241
12.4復(fù)雜問(wèn)題的簡(jiǎn)單解法242

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) www.stefanvlieger.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)