注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)自制編程語言 基于C語言

自制編程語言 基于C語言

自制編程語言 基于C語言

定 價(jià):¥89.00

作 者: 鄭鋼 著
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115487377 出版時(shí)間: 2018-09-01 包裝: 平裝
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  本書是一本專門介紹自制編程語言的圖書,書中深入淺出地講述了如何開發(fā)一門編程語言,以及運(yùn)行這門編程語言的虛擬機(jī)。本書主要內(nèi)容包括:腳本語言的功能、詞法分析器、類、對(duì)象、原生方法、自上而下算符優(yōu)先、語法分析、語義分析、虛擬機(jī)、內(nèi)建類、垃圾回收、命令行及調(diào)試等技術(shù)。本書適合程序員閱讀,也適合對(duì)編程語言原理感興趣的計(jì)算機(jī)從業(yè)人員學(xué)習(xí)。

作者簡介

  鄭鋼,網(wǎng)名大剛,畢業(yè)于北京大學(xué),前百度運(yùn)維開發(fā)工程師,《操作系統(tǒng)真象還原》作者。愛父母,愛老婆,愛運(yùn)動(dòng),愛鉆研。

圖書目錄

第0章 一些可能令人迷惑的問題 1

0.0 成功的基石不是堅(jiān)持,而是“不放棄” 1

0.1 你懂編程語言的“心”嗎 2

0.2 編程語言的來歷 2

0.3 語言一定要用更底層的語言來編寫嗎 2

0.4 編譯型程序和腳本程序的異同 8

0.5 腳本語言的分類 10

0.6 為什么CPU要用數(shù)字而不是字符串作為指令 11

0.7 為什么腳本語言比編譯型語言慢 11

0.8 既然腳本語言比較慢,為什么大家還要用 12

0.9 什么是中間代碼 12

0.10 什么是編譯器的前端、后端 13

0.11 詞法分析、語法分析、語義分析和生成代碼并不是串行執(zhí)行 13

0.12 什么是符號(hào)表 14

0.13 什么是關(guān)系中的閉包 14

0.14 什么是程序中的閉包 15

0.15 什么是字母表 16

0.16 什么是語言 17

0.17 正規(guī)式就是正則表達(dá)式 17

0.18 什么是正規(guī)(表達(dá))式和正規(guī)集 17

0.19 什么是有窮自動(dòng)機(jī) 18

0.20 有窮自動(dòng)機(jī)與詞法分析的關(guān)系 19

0.21 詞法分析用有窮自動(dòng)機(jī)(有窮狀態(tài)自動(dòng)機(jī))的弊端 19

0.22 什么是文法 20

0.23 BNF和EBNF,非終結(jié)符和終結(jié)符,開始符號(hào)及產(chǎn)生式 21

0.24 什么是句型、句子、短語 23

0.25 什么是語法分析 24

0.26 語法分析中的推導(dǎo)和歸約為什么都要最“左” 25

0.27 什么是語義分析 26

0.28 什么是語法制導(dǎo) 27

0.29 詞法分析器吃的是lex,擠出來的是token 27

0.30 什么是“遍” 28

0.31 文法為什么可以變換 28

0.32 為什么消除左遞歸和提取左因子 28

0.33 FIRST集、FOLLOW集、LL(1)文法 29

0.34 最右推導(dǎo)、最左歸約、句柄 31

0.35 算符優(yōu)先分析法 32

0.36 算符優(yōu)先文法 33

0.37 非終結(jié)符中常常定義的因子和項(xiàng)是什么 33

0.38 什么是抽象語法樹 33

0.39 編譯器如何使用或?qū)崿F(xiàn)文法中的產(chǎn)生式 34

0.40 程序計(jì)數(shù)器pc與ip的區(qū)別 35

第 1章 設(shè)計(jì)一種面向?qū)ο竽_本語言 36

1.1 腳本語言的功能 36

1.2 關(guān)鍵字 37

1.3 腳本的執(zhí)行方式 38

1.4 “純手工”的開發(fā)環(huán)境 38

1.5 定義sparrow語言的文法 38

第2章 實(shí)現(xiàn)詞法分析器 46

2.1 柔性數(shù)組 46

2.2 什么是字節(jié)序 47

2.3 一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)(本節(jié)源碼stepByStep/c2/a) 48

2.4 定義虛擬機(jī)結(jié)構(gòu)(本節(jié)源碼stepByStep/c2/b) 56

2.5 實(shí)現(xiàn)源碼讀?。ū竟?jié)源碼stepByStep/c2/c) 57

2.6 unicode與UTF-8 59

2.6.1 什么是unicode 59

2.6.2 什么是UTF-8 59

2.6.3 UTF-8編碼規(guī)則 60

2.6.4 實(shí)現(xiàn)UTF-8編碼、解碼(本節(jié)源碼stepByStep/c2/d) 61

2.7 實(shí)現(xiàn)詞法分析器parser(本節(jié)源碼stepByStep/c2/e) 66

2.7.1 lex和token 66

2.7.2 字符串和字符串內(nèi)嵌表達(dá)式 66

2.7.3 單詞識(shí)別流程 67

2.7.4 定義token和parser 68

2.7.5 解析關(guān)鍵字及獲取字符 71

2.7.6 解析標(biāo)識(shí)符和unicode碼點(diǎn) 73

2.7.7 解析字符串、內(nèi)嵌表達(dá)式、轉(zhuǎn)義字符 75

2.7.8 跳過注釋和空行 77

2.7.9 獲取token 79

2.7.10 token匹配和初始化parser 84

2.8 構(gòu)建主程序(本節(jié)源碼stepByStep/c2/f) 85

2.9 編譯、測試(本節(jié)源碼stepByStep/c2/f) 88

2.9.1 一個(gè)簡單的makefile 88

2.9.2 測試paser 92

第3章 類與對(duì)象 95

3.1 對(duì)象在C語言中的概貌 95

3.2 實(shí)現(xiàn)對(duì)象頭(本節(jié)源碼stepByStep/c3/a) 96

3.3 實(shí)現(xiàn)class定義(本節(jié)源碼stepByStep/c3/a) 99

3.4 實(shí)現(xiàn)字符串對(duì)象(本節(jié)源碼stepByStep/c3/a) 101

3.5 模塊對(duì)象和實(shí)例對(duì)象(本節(jié)源碼stepByStep/c3/a) 103

3.6 upvalue、openUpvalue和closedUpvalue 106

3.7 實(shí)現(xiàn)函數(shù)對(duì)象、閉包對(duì)象與調(diào)用框架(本節(jié)源碼stepByStep/c3/a) 107

3.8 完善詞法分析器之?dāng)?shù)字解析(本節(jié)源碼stepByStep/c3/b) 111

3.9 完善詞法分析器之字符串解析和獲取token(本節(jié)源碼stepByStep/c3/b) 114

3.10 最終版詞法分析器的功能驗(yàn)證(本節(jié)源碼stepByStep/c3/b) 116

3.11 實(shí)現(xiàn)list列表對(duì)象(本節(jié)源碼stepByStep/c3/c) 118

3.12 range對(duì)象(本節(jié)源碼stepByStep/c3/c) 121

3.13 遲到的class.c(本節(jié)源碼stepByStep/c3/c) 122

3.14 map對(duì)象(本節(jié)源碼stepByStep/c3/c) 124

3.14.1 哈希表 124

3.14.2 map對(duì)象頭文件及entry 125

3.14.3 沖突探測鏈與偽刪除 126

3.14.4 map對(duì)象的實(shí)現(xiàn) 128

3.15 線程對(duì)象(本節(jié)源碼stepByStep/c3/c) 134

3.15.1 線程、協(xié)程淺述 134

3.15.2 運(yùn)行時(shí)棧 137

3.15.3 用戶線程的實(shí)現(xiàn) 138

第4章 原生方法及基礎(chǔ)實(shí)現(xiàn) 142

4.1 解釋器流程(本節(jié)源碼stepBystep/c4/a) 142

4.2 符號(hào)表 144

4.2.1 模塊的符號(hào)表 144

4.2.2 類方法的符號(hào)表 144

4.2.3 模塊變量符號(hào)表 146

4.2.4 局部變量符號(hào)表 147

4.2.5 常量符號(hào)表 147

4.3 方法在運(yùn)行時(shí)棧中的參數(shù) 147

4.4 定義模塊變量(本節(jié)源碼stepByStep/c4/b) 148

4.5 原生方法(本節(jié)源碼stepByStep/c4/b) 154

4.5.1 定義裸類 154

4.5.2 定義返回值與方法綁定的宏 155

4.5.3 定義原生方法 157

4.5.4 符號(hào)表操作 159

4.5.5 定義類、綁定方法、綁定基類 160

4.6 元類及實(shí)現(xiàn)(本節(jié)源碼stepByStep/c4/b) 161

4.6.1 meta-class類、class類、object類 161

4.6.2 創(chuàng)建元類,綁定類方法 163

4.7 加載模塊(本節(jié)源碼stepByStep/c4/c) 164

4.8 虛擬機(jī)簡介 166

4.8.1 虛擬機(jī)分類及優(yōu)缺點(diǎn) 166

4.8.2 為什么要采用虛擬機(jī) 168

4.8.3 虛擬機(jī)的簡單優(yōu)化 170

4.9 字節(jié)碼 171

第5章 自上而下算符優(yōu)先——TDOP 177

5.1 自上而下算符優(yōu)先—TDOP 177

5.2 來自Douglas Crockford的教程 177

5.3 TDOP原理 194

5.3.1 一些概念 194

5.3.2 一個(gè)小例子 196

5.3.3 expression的思想 197

5.3.4 while(rbp <>

5.3.5 進(jìn)入expression時(shí)當(dāng)前token的類別 201

5.3.6 TDOP總結(jié) 202

第6章 實(shí)現(xiàn)語法分析與語義分析 204

6.1 定義指令(本節(jié)源碼stepByStep/c6/a) 204

6.2 核心腳本(本節(jié)源碼stepByStep/c6/a) 206

6.3 寫入指令(本節(jié)源碼stepByStep/c6/a) 212

6.4 編譯模塊(本節(jié)源碼stepByStep/c6/a) 216

6.5 語義分析的本質(zhì) 218

6.6 注冊編譯函數(shù)(本節(jié)源碼stepByStep/c6/b) 218

6.7 賦值運(yùn)算的條件 221

6.8 實(shí)現(xiàn)expression及其周邊(本節(jié)源碼stepByStep/c6/c) 223

6.9 局部變量作用域管理 228

6.10 變量聲明、中綴、前綴及混合運(yùn)算符方法簽名(本節(jié)源碼stepByStep/c6/d) 229

6.11 解析標(biāo)識(shí)符(本節(jié)源碼stepByStep/c6/e) 233

6.11.1 處理參數(shù)列表及相關(guān) 233

6.11.2 實(shí)現(xiàn)運(yùn)算符和標(biāo)識(shí)符的簽名函數(shù) 235

6.11.3 upvalue的查找與添加 239

6.11.4 變量的加載與存儲(chǔ) 242

6.11.5 編譯代碼塊及結(jié)束編譯單元 243

6.11.6 各種方法調(diào)用 246

6.11.7 標(biāo)識(shí)符的編譯 249

6.12 編譯內(nèi)嵌表達(dá)式(本節(jié)源碼stepByStep/c6/f) 256

6.13 編譯bool及null(本節(jié)源碼stepByStep/c6/g) 258

6.14 this、繼承、基類(本節(jié)源碼stepByStep/c6/h) 259

6.15 編譯小括號(hào)、中括號(hào)及l(fā)ist列表字面量(本節(jié)源碼stepByStep/c6/i) 260

6.16 編譯方法調(diào)用和map字面量(本節(jié)源碼stepByStep/c6/j) 263

6.17 編譯數(shù)學(xué)運(yùn)算符(本節(jié)源碼stepByStep/c6/k) 266

6.18 編譯變量定義(本節(jié)源碼stepByStep/c6/l) 270

6.19 編譯語句 274

6.19.1 編譯if語句(本節(jié)源碼stepByStep/c6/m) 274

6.19.2 編譯while語句(本節(jié)源碼stepByStep/c6/n) 275

6.19.3 編譯return、break和continue語句(本節(jié)源碼stepByStep/c6/o) 280

6.19.4 編譯for循環(huán)語句(本節(jié)源碼stepByStep/c6/p) 284

6.19.5 編譯代碼塊及單一語句(本節(jié)源碼stepByStep/c6/q) 288

6.20 編譯類定義(本節(jié)源碼stepByStep/c6/r) 289

6.20.1 方法的聲明與定義 289

6.20.2 構(gòu)造函數(shù)與創(chuàng)建對(duì)象 291

6.20.3 編譯方法 293

6.20.4 編譯類定義 296

6.21 編譯函數(shù)定義(本節(jié)源碼stepByStep/c6/s) 298

6.22 編譯模塊導(dǎo)入(本節(jié)源碼stepByStep/c6/t) 300

第7章 虛擬機(jī) 306

7.1 創(chuàng)建類與堆??蚣埽ū竟?jié)源碼stepByStep/c7/a) 306

7.2 upvalue的創(chuàng)建與關(guān)閉(本節(jié)源碼stepByStep/c7/b) 309

7.3 修正操作數(shù)(本節(jié)源碼stepByStep/c7/c) 312

7.4 執(zhí)行指令(本節(jié)源碼stepByStep/c7/d) 314

7.4.1 一些基礎(chǔ)工作 314

7.4.2 解碼、譯碼、執(zhí)行(本節(jié)源碼stepByStep/c7/d) 316

7.5 運(yùn)行虛擬機(jī)(本節(jié)源碼stepByStep/c7/e) 334

第8章 內(nèi)建類及其方法 337

8.1 Bool類及其方法(本節(jié)源碼stepByStep/c8/a) 337

8.2 線程類及其方法(本節(jié)源碼stepByStep/c8/b) 338

8.3 函數(shù)類及其方法和函數(shù)調(diào)用重載(本節(jié)源碼stepByStep/c8/c) 345

8.4 Null類及其方法(本節(jié)源碼stepByStep/c8/d) 347

8.5 Num類及其方法(本節(jié)源碼stepByStep/c8/e) 348

8.6 String類及其方法(本節(jié)源碼stepByStep/c8/f) 355

8.7 List類及其方法(本節(jié)源碼stepByStep/c8/g) 369

8.8 Map類及其方法(本節(jié)源碼stepByStep/c8/h) 374

8.9 range類及其方法(本節(jié)源碼stepByStep/c8/i) 380

8.10 System類及其方法(本節(jié)源碼stepByStep/c8/j) 383

8.11 收尾與測試(本節(jié)源碼stepByStep/c8/k) 388

第9章 垃圾回收 393

9.1 垃圾回收淺述 393

9.2 理論基礎(chǔ) 395

9.3 標(biāo)記—清掃回收算法 396

9.4 一些基礎(chǔ)結(jié)構(gòu)(本節(jié)源碼stepByStep/c9/a) 397

9.5 實(shí)現(xiàn)GC(本節(jié)源碼stepByStep/c9/a) 400

9.6 添加臨時(shí)根對(duì)象與觸發(fā)GC 411

第 10章 命令行及調(diào)試 415

10.1 釋放虛擬機(jī)(本節(jié)源碼stepByStep/c10/a) 415

10.2 簡單的命令行界面(本節(jié)源碼stepByStep/c10/a) 415

10.3 調(diào)試(本節(jié)源碼stepByStep/c10/b) 417

本目錄推薦

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