《兩周自制腳本語言》是一本優(yōu)秀的編譯原理入門讀物。全書穿插了大量輕松風(fēng)趣的對(duì)話,讀者可以隨書中的人物一起從最簡(jiǎn)單的語言解釋器開始,逐步添加新功能,最終完成一個(gè)支持函數(shù)、數(shù)組、對(duì)象等高級(jí)功能的語言編譯器!秲芍茏灾颇_本語言》與眾不同的實(shí)現(xiàn)方式不僅大幅簡(jiǎn)化了語言處理器的復(fù)雜度,還有助于拓展讀者的視野。
《兩周自制腳本語言》適合對(duì)編譯原理及語言處理器設(shè)計(jì)有興趣的讀者以及正在學(xué)習(xí)相關(guān)課程的大中專院校學(xué)生。同時(shí),已經(jīng)學(xué)習(xí)過相關(guān)知識(shí),有一定經(jīng)驗(yàn)的開發(fā)者,也一定能從本書新穎的實(shí)現(xiàn)方式中受益良多。
只需14天,從零開始設(shè)計(jì)和實(shí)現(xiàn)腳本語言
從解釋器到編譯器,支持函數(shù)、數(shù)組、對(duì)象等高級(jí)功能
東京大學(xué)&東京工業(yè)大學(xué)教授執(zhí)筆
日本編譯器權(quán)威專家中田育男作序推薦
《兩周自制腳本語言》是一本優(yōu)秀的編譯原理入門讀物。全書穿插了大量輕松風(fēng)趣的對(duì)話,讀者可以隨書中的人物一起從最簡(jiǎn)單的語言解釋器開始,逐步添加新功能,最終完成一個(gè)支持函數(shù)、數(shù)組、對(duì)象等高級(jí)功能的語言編譯器。本書與眾不同的實(shí)現(xiàn)方式不僅大幅簡(jiǎn)化了語言處理器的復(fù)雜度,還有助于拓展讀者的視野。
千葉滋(作者)
東京工業(yè)大學(xué)研究生院信息技術(shù)理工系研究科教授,兼任東京大學(xué)研究生院信息技術(shù)理工系研究科教授。著有《面向切面入門——從Java語言?面向?qū)ο蟛饺階spectJ語言程序設(shè)計(jì)》《簡(jiǎn)明Java程序設(shè)計(jì)——Great Ideas for Java Programming》《GUI庫(kù)機(jī)制——軟件設(shè)計(jì)案例研習(xí)》等。
陳筱煙(譯者)
畢業(yè)于復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系,主要研究方向?yàn)榭缭O(shè)備人機(jī)交互理論。從大學(xué)時(shí)期開始接觸Java、JavaScript程序開發(fā),目前對(duì)Web應(yīng)用及智能手機(jī)應(yīng)用開發(fā)有濃厚興趣,并參與Android開發(fā)文檔翻譯項(xiàng)目。業(yè)余開發(fā)的移動(dòng)應(yīng)用在Google Play商店中已有數(shù)十萬次下載。譯作有《JavaScript編程全解》《App,這樣設(shè)計(jì)才好賣》等。
第1部分 基礎(chǔ)篇
第1天 來,我們一起做些什么吧
1.1 機(jī)器語言與匯編語言
1.2 解釋器與編譯器
1.3 開發(fā)語言處理器
1.4 語言處理器的結(jié)構(gòu)與本書的框架
第2天 設(shè)計(jì)程序設(shè)計(jì)語言
2.1 麻雀雖小、五臟俱全的程序設(shè)計(jì)語言
2.2 句尾的分號(hào)
2.3 含糊不得的語言
第3天 分割單詞
3.1 Token對(duì)象
3.2 通過正則表達(dá)式定義單詞
3.3 借助java.util.regex設(shè)計(jì)詞法分析器
3.4 詞法分析器試運(yùn)行
第4天 用于表示程序的對(duì)象
4.1 抽象語法樹的定義
4.2 設(shè)計(jì)節(jié)點(diǎn)類
4.3 BNF
4.4 語法分析與抽象語法樹
第5天 設(shè)計(jì)語法分析器
5.1 Stone語言的語法
5.2 使用解析器與組合子
5.3 由語法分析器生成的抽象語法樹
5.4 測(cè)試語法分析器
第6天 通過解釋器執(zhí)行程序
6.1 eval方法與環(huán)境對(duì)象
6.2 各種類型的eval方法
6.3 關(guān)于GluonJ
6.4 執(zhí)行程序
第7天 添加函數(shù)功能
7.1 擴(kuò)充語法規(guī)則
7.2 作用域與生存周期
7.3 執(zhí)行函數(shù)
7.4 計(jì)算斐波那契數(shù)
7.5 為閉包提供支持
7.6 實(shí)現(xiàn)閉包
第8天 關(guān)聯(lián)Java語言
8.1 原生函數(shù)
8.2 編寫使用原生函數(shù)的程序
第9天 設(shè)計(jì)面向?qū)ο笳Z言
9.1 設(shè)計(jì)用于操作類與對(duì)象的語法
9.2 實(shí)現(xiàn)類所需的語法規(guī)則
9.3 實(shí)現(xiàn)eval方法
9.4 通過閉包表示對(duì)象
9.5 運(yùn)行包含類的程序
第10天 無法割舍的數(shù)組
10.1 擴(kuò)展語法分析器
10.2 僅通過修改器來實(shí)現(xiàn)數(shù)組
第2部分 性能優(yōu)化篇
第11天 優(yōu)化變量讀寫性能
11.1 通過簡(jiǎn)單數(shù)組來實(shí)現(xiàn)環(huán)境
11.2 用于記錄全局變量的環(huán)境
11.3 事先確定變量值的存放位置
11.4 修正eval方法并最終完成性能優(yōu)化
第12天 優(yōu)化對(duì)象操作性能
12.1 減少內(nèi)存占用
12.2 能否通過事先查找變量的保存位置來優(yōu)化性能
12.3 定義lookup方法
12.4 整合所有修改并執(zhí)行
12.5 內(nèi)聯(lián)緩存
第13天 設(shè)計(jì)中間代碼解釋器
13.1 中間代碼與機(jī)器語言
13.2 Stone虛擬機(jī)
13.3 通過棧實(shí)現(xiàn)環(huán)境
13.4 寄存器的使用
13.5 引用變量的值
13.6 if語句與while語句
13.7 函數(shù)的定義與調(diào)用
13.8 轉(zhuǎn)換為虛擬機(jī)器語言
13.9 通過虛擬機(jī)執(zhí)行
第14天 為Stone語言添加靜態(tài)類型支持以優(yōu)化性能
14.1 指定變量類型
14.2 通過數(shù)據(jù)類型檢查發(fā)現(xiàn)錯(cuò)誤
14.3 運(yùn)行程序時(shí)執(zhí)行類型檢查
14.4 對(duì)類型省略的變量進(jìn)行類型推論
14.5 Java二進(jìn)制代碼轉(zhuǎn)換
14.6 綜合所有修改再次運(yùn)行程序
第3部分 解說篇(自習(xí)時(shí)間)
第15天 手工設(shè)計(jì)詞法分析器
15.1 修改自動(dòng)機(jī)
15.2 自動(dòng)機(jī)程序
15.3 正則表達(dá)式的極限
第16天 語法分析方式
16.1 正則表達(dá)式與BNF
16.2 語法分析算法
16.3 LL語法分析
16.4 算符優(yōu)先分析法與自底向上語法分析
第17天 Parser庫(kù)的內(nèi)部結(jié)構(gòu)
17.1 組合子分析
17.2 解析器組合子的內(nèi)部
第18天 GluonJ的使用方法
18.1 設(shè)定類路徑
18.2 啟動(dòng)設(shè)定
18.3 GluonJ語言
18.4 功能總結(jié)
第19天 抽象語法樹與設(shè)計(jì)模式
19.1 理想的設(shè)計(jì)
19.2 Interpreter模式
19.3 Visitor模式
19.4 使用反射
19.5 面向切面語言