第 1章 編譯器與虛擬機 1
1.1 編譯器 2
1.2 虛擬機與物理機 5
1.2.1 物理機 6
1.2.2 什么是虛擬機 11
1.2.3 為什么要構建虛擬機 14
1.2.4 字節(jié)碼 15
1.3 虛擬機與編譯器的二元性 17
第 2章 你好,字節(jié)碼! 19
2.1 第 一條指令 20
2.1.1 以字節(jié)作為開端 21
2.1.2 最小編譯器 26
2.1.3 字節(jié)碼與反匯編程序 32
2.1.4 回歸初心,繼續(xù)前行 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 執(zhí)行跳轉 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章 字符串、數(shù)組和哈希表 132
6.1 字符串 132
6.2 數(shù)組 138
6.3 哈希表 142
6.4 索引運算符 149
第7章 函數(shù) 156
7.1 一個簡單的函數(shù) 156
7.1.1 函數(shù)表示 157
7.1.2 執(zhí)行函數(shù)的操作碼 158
7.1.3 編譯函數(shù)字面量 161
7.1.4 編譯函數(shù)調用 176
7.1.5 虛擬機中的函數(shù) 179
7.1.6 一點獎勵 190
7.2 局部綁定 191
7.2.1 局部綁定操作碼 192
7.2.2 編譯局部綁定 195
7.2.3 在虛擬機中實現(xiàn)局部綁定 208
7.3 參數(shù) 218
7.3.1 編譯帶參數(shù)的函數(shù)調用 219
7.3.2 將引用解析為參數(shù) 224
7.3.3 虛擬機中的參數(shù) 227
第8章 內置函數(shù) 237
8.1 使修改變得簡單 238
8.2 做出改變:計劃 244
8.3 內置函數(shù)作用域 245
8.4 執(zhí)行內置函數(shù) 250
第9章 閉包 256
9.1 問題 257
9.2 計劃 258
9.3 將一切視為閉包 260
9.4 編譯和解析自由變量 271
9.5 運行時創(chuàng)建閉包 283
9.6 遞歸閉包 288
第 10章 最后的測試 303