基本介紹
內容簡介
只需14天,從零開始設計和實現腳本語言
從解釋器到編譯器,支持函式、數組、對象等高級功能
東京大學&東京工業大學教授執筆
日本編譯器權威專家中田育男作序推薦
《兩周自製腳本語言》是一本優秀的編譯原理入門讀物。全書穿插了大量輕鬆風趣的對話,讀者可以隨書中的人物一起從最簡單的語言解釋器開始,逐步添加新功能,最終完成一個支持函式、數組、對象等高級功能的語言編譯器。本書與眾不同的實現方式不僅大幅簡化了語言處理器的複雜度,還有助於拓展讀者的視野。
作者簡介
千葉滋(作者)
東京工業大學研究生院信息技術理工系研究科教授,兼任東京大學研究生院信息技術理工系研究科教授。著有《面向切面入門——從Java語言?面向對象步入AspectJ語言程式設計》《簡明Java程式設計——Great Ideas for Java Programming》《GUI庫機制——軟體設計案例研習》等。
陳筱煙(譯者)
畢業於復旦大學計算機科學與技術系,主要研究方向為跨設備人機互動理論。從大學時期開始接觸Java、JavaScript程式開發,目前對Web套用及智慧型手機套用開發有濃厚興趣,並參與Android開發文檔翻譯項目。業餘開發的移動套用在Google Play商店中已有數十萬次下載。譯作有《JavaScript編程全解》《App,這樣設計才好賣》等。
媒體推薦
這是一本優秀的編譯原理入門讀物,它嘗試以一種現代的方式設計一種現代的語言,即使讀者對編譯器已有一定程度的了解,也一定能從中學到很多。
——日本編譯器權威專家 中田育男
圖書目錄
第1部分 基礎篇
第1天 來,我們一起做些什麼吧 1
1.1 機器語言與彙編語言 2
1.2 解釋器與編譯器 3
1.3 開發語言處理器 5
1.4 語言處理器的結構與本書的框架 6
第2天 設計程式設計語言 10
2.1 麻雀雖小、五臟俱全的程式設計語言 11
2.2 句尾的分號 12
2.3 含糊不得的語言 14
第3天 分割單詞 17
3.1 Token對象 18
3.2 通過正則表達式定義單詞 19
3.3 藉助java.util.regex設計詞法分析器 22
3.4 詞法分析器試運行 27
第4天 用於表示程式的對象 30
4.1 抽象語法樹的定義 31
4.2 設計節點類 34
4.3 BNF 38
4.4 語法分析與抽象語法樹 42
第5天 設計語法分析器 44
5.1 Stone語言的語法 45
5.2 使用解析器與組合子 46
5.3 由語法分析器生成的抽象語法樹 53
5.4 測試語法分析器 59
第6天 通過解釋器執行程式 62
6.1 eval方法與環境對象 63
6.2 各種類型的eval方法 65
6.3 關於GluonJ 69
6.4 執行程式 72
第7天 添加函式功能 75
7.1 擴充語法規則 76
7.2 作用域與生存周期 81
7.3 執行函式 83
7.4 計算斐波那契數 89
7.5 為閉包提供支持 90
7.6 實現閉包 92
第8天 關聯Java語言 95
8.1 原生函式 96
8.2 編寫使用原生函式的程式 98
第9天 設計面向對象語言 101
9.1 設計用於操作類與對象的語法 102
9.2 實現類所需的語法規則 103
9.3 實現eval方法 104
9.4 通過閉包表示對象 110
9.5 運行包含類的程式 114
第10天 無法割捨的數組 115
10.1 擴展語法分析器 116
10.2 僅通過修改器來實現數組 119
第2部分 性能最佳化篇
第11天 最佳化變數讀寫性能 123
11.1 通過簡單數組來實現環境 124
11.2 用於記錄全局變數的環境 127
11.3 事先確定變數值的存放位置 130
11.4 修正eval方法並最終完成性能最佳化 134
第12天 最佳化對象操作性能 137
12.1 減少記憶體占用 138
12.2 能否通過事先查找變數的保存位置來最佳化性能 141
12.3 定義lookup方法 144
12.4 整合所有修改並執行 147
12.5 內聯快取 152
第13天 設計中間代碼解釋器 156
13.1 中間代碼與機器語言 157
13.2 Stone虛擬機 158
13.3 通過棧實現環境 167
13.4 暫存器的使用 170
13.5 引用變數的值 173
13.6 if語句與while語句 173
13.7 函式的定義與調用 175
13.8 轉換為虛擬機器語言 177
13.9 通過虛擬機執行 184
第14天 為Stone語言添加靜態類型支持以最佳化性能 187
14.1 指定變數類型 188
14.2 通過數據類型檢查發現錯誤 193
14.3 運行程式時執行類型檢查 204
14.4 對類型省略的變數進行類型推論 208
14.5 Java二進制代碼轉換 214
14.6 綜合所有修改再次運行程式 226
第3部分 解說篇(自習時間)
第15天 手工設計詞法分析器 229
15.1 修改自動機 230
15.2 自動機程式 233
15.3 正則表達式的極限 235
第16天 語法分析方式 236
16.1 正則表達式與BNF 237
16.2 語法分析算法 238
16.3 LL語法分析 239
16.4 算符優先分析法與自底向上語法分析 244
第17天 Parser庫的內部結構 251
17.1 組合子分析 252
17.2 解析器組合子的內部 252
第18天 GluonJ的使用方法 263
18.1 設定類路徑 264
18.2 啟動設定 265
18.3 GluonJ語言 267
18.4 功能總結 268
第19天 抽象語法樹與設計模式 271
19.1 理想的設計 272
19.2 Interpreter模式 273
19.3 Visitor模式 276
19.4 使用反射 282
19.5 面向切面語言 284