編輯推薦
隻需14天,從零開始設計和實現腳本語言
從解釋器到編譯器,支持函數、數組、對象等高級功能
東京大學&東京工業大學教授執筆
日本編譯器專傢中田育男作序推薦
內容簡介
《兩周自製腳本語言》是一本優秀的編譯原理入門讀物。全書穿插瞭大量輕鬆風趣的對話,讀者可以隨書中的人物一起從簡單的語言解釋器開始,逐步添加新功能,最終完成一個支持函數、數組、對象等高級功能的語言編譯器。《兩周自製腳本語言》與眾不同的實現方式不僅大幅簡化瞭語言處理器的復雜度,還有助於拓展讀者的視野。
《兩周自製腳本語言》適閤對編譯原理及語言處理器設計有興趣的讀者以及正在學習相關課程的大中專院校學生。同時,已經學習過相關知識,有一定經驗的開發者,也一定能從本書新穎的實現方式中受益良多。
作者簡介
韆葉滋
東京工業大學研究生院信息技術理工係研究科教授,兼任東京大學研究生院信息技術理工係研究科教授。著有《麵嚮切麵入門——從Java語言?麵嚮對象步入AspectJ語言程序設計》《簡明Java程序設計——Great Ideas for Java Programming》《GUI庫機製——軟件設計案例研習》等。
內頁插圖
精彩書評
這是一本優秀的編譯原理入門讀物,它嘗試以一種現代的方式設計一種現代的語言,即使讀者對編譯器已有一定程度的瞭解,也一定能從中學到很多。——日本編譯器專傢 中田育男
目錄
目 錄
第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
前言/序言
本書是一本編譯原理的入門讀物。過去,大傢普遍認為編譯器與解釋器之間存在很大的差異,因此會分彆編寫針對編譯器與解釋器的圖書。不過,最近編譯器與解釋器之間的界限越來越模糊,我們隻要稍微瞭解一下常見的程序設計語言,就會發現兩者已不再是對立的概念。
因此,與其說本書是編譯原理的入門書,不如說是語言處理器的入門讀物更為恰當。語言處理器是用於執行程序設計語言的軟件,它同時包含瞭編譯器與解釋器。本書看似用瞭大量篇幅講解解釋器的原理,其實是在講解編譯器與解釋器通用的理論。第1 章將詳細介紹各章節的具體內容。
本書采用瞭Java 語言來實現語言處理器。在設計語言處理器時,C 語言或C++ 語言更為常見,加之本書沒有藉助yacc 等常用的工具來生成語言處理器,因此讀者也許會認為本書的實用性不足。
本書在介紹語言處理器的設計方式時,盡可能采用瞭較新穎的手段。C 語言或C++ 語言結閤yacc 的方式性能較差,且是上世紀80 年代的實現方式。在那之後,程序設計語言飛速發展,已不可同日而語,其運行性能也大幅提升。入門讀物也應該與時俱進,講解與過去不同的設計方式,展現它們的實踐價值。
時至今日,軟件領域的發展依然日新月異,並逐漸滲透至生活的方方麵麵,這一勢頭無疑將持續下去。在此期間,各類技術必將不斷發展,為瞭跟上技術更新的步伐,軟件應當以略微領先於時代的設計思路開發。
很久以前,筆者曾使用C++ 語言開發過適用於工作站的語言處理器,當時,時鍾頻率僅有100 兆赫,內存也不過幾百兆字節。那套軟件幸運地在各種環境下運行瞭十年以上。有一天,我收到瞭一封郵件。我記得好像是一個德國的年輕人,他洋洋灑灑寫瞭很多,批評那套軟件的設計有不少問題。還說開發者應當閤理使用模闆,並靈活運用各種庫,要學習使用設計模式,還要用XML 來錶示抽象語法樹,等等。
他指齣我太節省內存,隻顧著提升性能,結果程序難以閱讀。從當時的主流軟硬件標準來看,這些批評確實閤情閤理,但那套係統畢竟是十年前的産物。在當時軟硬件性能孱弱的情況下,如果遵循他的建議,最終完成的語言處理器恐怕會被打上缺乏使用價值的標簽(順便一提,提齣批評的那位年輕人雖然說瞭很多,卻沒有寫一行代碼)。
然而,從這件事中我深刻體會到,軟件有著驚人的生命力,即使在開發時采用瞭最佳設計,最終還是會隨著時代的進步而被迅速淘汰。因此,前文說軟件應當以略微領先於時代的設計思路開發有其閤理性。當然,我們也可以不關心他人的批評,盡可能縮短軟件的生命周期,並積極拋棄過時的內容。具體采用哪種策略因人而異。
希望讀者能夠在閱讀本書時始終記住這些理念。讀過本書之後,如果大傢覺得收獲良多,我將深感榮幸與喜悅。
2012 年 新春
韆葉滋
兩周自製腳本語言 下載 mobi epub pdf txt 電子書
評分
☆☆☆☆☆
有所啓迪,真要自己編一門語言麼?真要想編的話,這本書還是頗有參考價值的
評分
☆☆☆☆☆
看來介紹買的,拓展知識麵
評分
☆☆☆☆☆
還不錯,比編譯原理更適閤自學入門
評分
☆☆☆☆☆
本書寫的很好,對於理解編程語言和編譯器有很大幫助。通過看代碼和動手實驗能夠對編譯器的整體結構和工作流程有進一步的瞭解。
評分
☆☆☆☆☆
好東東沒的說~以後還會常來光顧的~
評分
☆☆☆☆☆
《30天自製操作係統》適閤操作係統愛好者和程序設計人員閱讀。
評分
☆☆☆☆☆
收到貨瞭,京東快遞非常快,還專門派人送的
評分
☆☆☆☆☆
還可以 學到很多知識
評分
☆☆☆☆☆
沒事時隨便看看買的,紙張比A4短