用 Go語言自製編譯器 Writing A Compiler In Go

[德]索斯藤·鮑爾(Thorsten Ball)

  • 用 Go語言自製編譯器-preview-1
  • 用 Go語言自製編譯器-preview-2
用 Go語言自製編譯器-preview-1

買這商品的人也買了...

商品描述

本書是《用Go語言自製解釋器》的續篇。在自製解釋器時,你已經為Monkey語言實現了類C語法、變量綁定、基本數據類型、算術運算、內置函數、閉包等特性。是時候讓Monkey繼續成長了!在本書中,Monkey將繼續“進化”,並最終成長為成熟的程序設計語言。在已有詞法分析器、語法分析器和抽象語法樹的基礎上,你將為Monkey語言定義字節碼指令,指定操作數,編寫反匯編程序,構建執行字節碼的虛擬機。通過動手學習,你將能夠體驗從無到有實現類C語言的樂趣。

作者簡介

索斯藤·鲍尔(Thorsten Ball)

 

Sourcegraph软件工程师,精通多门程序设计语言,包括Go、C、JavaScript和Ruby,深谙编译原理、系统编程、Unix、数据库等相关技术。现居德国,长期活跃于欧洲各大技术大会。

 

廖彬

 

毕业于中国科学院计算技术研究所,高级语言虚拟机爱好者,在语言虚拟机领域从事开发近十年,曾就职于阿里巴巴和腾讯。

目錄大綱

第 1章 編譯器與虛擬機 1

1.1 編譯器 2

1.2 虛擬機與物理機 5

1.2.1 物理機 6

1.2.2 什麽是虛擬機 11

1.2.3 為什麽要構建虛擬機 14

1.2.4 字節碼 15

1.3 虛擬機與編譯器的二元性 17

第 2章 你好,字節碼! 19

2.1 第 一條指令 20

2.1.1 以字節作為開端 21

2.1.2 最小編譯器 26

2.1.3 字節碼與反匯編程序 32

2.1.4 回歸初心,繼續前行 37

2.1.5 給機器上電 40

2.2 棧上加法 46

2.3 連接REPL 52

第3章 編譯表達式 55

3.1 棧清理 55

3.2 中綴表達式 60

3.3 布爾類型 64

3.4 比較運算符 69

3.5 前綴表達式 76

第4章 條件語句 83

4.1 跳轉 86

4.2 編譯條件語句 88

4.3 執行跳轉 103

4.4 歡迎回來,Null 值 106

第5章 追蹤名稱 115

5.1 計劃 116

5.2 編譯綁定 117

5.2.1 添加符號表 120

5.2.2 在編譯器中使用符號 123

5.3 在虛擬機中支持全局變量 126

第6章 字符串、數組和哈希表 132

6.1 字符串 132

6.2 數組 138

6.3 哈希表 142

6.4 索引運算符 149

第7章 函數 156

7.1 一個簡單的函數 156

7.1.1 函數表示 157

7.1.2 執行函數的操作碼 158

7.1.3 編譯函數字面量 161

7.1.4 編譯函數調用 176

7.1.5 虛擬機中的函數 179

7.1.6 一點獎勵 190

7.2 局部綁定 191

7.2.1 局部綁定操作碼 192

7.2.2 編譯局部綁定 195

7.2.3 在虛擬機中實現局部綁定 208

7.3 參數 218

7.3.1 編譯帶參數的函數調用 219

7.3.2 將引用解析為參數 224

7.3.3 虛擬機中的參數 227

第8章 內置函數 237

8.1 使修改變得簡單 238

8.2 做出改變:計劃 244

8.3 內置函數作用域 245

8.4 執行內置函數 250

第9章 閉包 256

9.1 問題 257

9.2 計劃 258

9.3 將一切視為閉包 260

9.4 編譯和解析自由變量 271

9.5 運行時創建閉包 283

9.6 遞歸閉包 288

第 10章 最後的測試 303