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

自制編程語言 基于C語言

自制編程語言 基于C語言

定 價:¥89.00

作 者: 鄭鋼 著
出版社: 人民郵電出版社
叢編項:
標 簽: 暫缺

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

內(nèi)容簡介

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

作者簡介

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

圖書目錄

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

0.0 成功的基石不是堅持,而是“不放棄” 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 什么是符號表 14

0.13 什么是關系中的閉包 14

0.14 什么是程序中的閉包 15

0.15 什么是字母表 16

0.16 什么是語言 17

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

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

0.19 什么是有窮自動機 18

0.20 有窮自動機與詞法分析的關系 19

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

0.22 什么是文法 20

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

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

0.25 什么是語法分析 24

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

0.27 什么是語義分析 26

0.28 什么是語法制導 27

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

0.30 什么是“遍” 28

0.31 文法為什么可以變換 28

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

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

0.34 最右推導、最左歸約、句柄 31

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

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

0.37 非終結符中常常定義的因子和項是什么 33

0.38 什么是抽象語法樹 33

0.39 編譯器如何使用或實現(xiàn)文法中的產(chǎn)生式 34

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

第 1章 設計一種面向對象腳本語言 36

1.1 腳本語言的功能 36

1.2 關鍵字 37

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

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

1.5 定義sparrow語言的文法 38

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

2.1 柔性數(shù)組 46

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

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

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

2.5 實現(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 實現(xiàn)UTF-8編碼、解碼(本節(jié)源碼stepByStep/c2/d) 61

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

2.7.1 lex和token 66

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

2.7.3 單詞識別流程 67

2.7.4 定義token和parser 68

2.7.5 解析關鍵字及獲取字符 71

2.7.6 解析標識符和unicode碼點 73

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

2.7.8 跳過注釋和空行 77

2.7.9 獲取token 79

2.7.10 token匹配和初始化parser 84

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

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

2.9.1 一個簡單的makefile 88

2.9.2 測試paser 92

第3章 類與對象 95

3.1 對象在C語言中的概貌 95

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

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

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

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

3.6 upvalue、openUpvalue和closedUpvalue 106

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

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

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

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

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

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

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

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

3.14.1 哈希表 124

3.14.2 map對象頭文件及entry 125

3.14.3 沖突探測鏈與偽刪除 126

3.14.4 map對象的實現(xiàn) 128

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

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

3.15.2 運行時棧 137

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

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

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

4.2 符號表 144

4.2.1 模塊的符號表 144

4.2.2 類方法的符號表 144

4.2.3 模塊變量符號表 146

4.2.4 局部變量符號表 147

4.2.5 常量符號表 147

4.3 方法在運行時棧中的參數(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 符號表操作 159

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

4.6 元類及實現(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 虛擬機簡介 166

4.8.1 虛擬機分類及優(yōu)缺點 166

4.8.2 為什么要采用虛擬機 168

4.8.3 虛擬機的簡單優(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 一個小例子 196

5.3.3 expression的思想 197

5.3.4 while(rbp <>

5.3.5 進入expression時當前token的類別 201

5.3.6 TDOP總結 202

第6章 實現(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 語義分析的本質 218

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

6.7 賦值運算的條件 221

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

6.9 局部變量作用域管理 228

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

6.11 解析標識符(本節(jié)源碼stepByStep/c6/e) 233

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

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

6.11.3 upvalue的查找與添加 239

6.11.4 變量的加載與存儲 242

6.11.5 編譯代碼塊及結束編譯單元 243

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

6.11.7 標識符的編譯 249

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

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

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

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

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

6.17 編譯數(shù)學運算符(本節(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 構造函數(shù)與創(chuàng)建對象 291

6.20.3 編譯方法 293

6.20.4 編譯類定義 296

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

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

第7章 虛擬機 306

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

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

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

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

7.4.1 一些基礎工作 314

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

7.5 運行虛擬機(本節(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 理論基礎 395

9.3 標記—清掃回收算法 396

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

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

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

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

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

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

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

本目錄推薦

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