出版時(shí)間:2012-3-20 出版社:華中科技大學(xué)出版社 作者:Terence Parr 頁數(shù):388 譯者:李袁奎,堯飄海
Tag標(biāo)簽:無
前言
隨著你不斷編寫語言應(yīng)用,這個(gè)過程中所蘊(yùn)涵的模式就會(huì)逐漸變得清晰而明朗。其實(shí),大多數(shù)的語言應(yīng)用在架構(gòu)上都是相似的。每次編寫語言應(yīng)用的時(shí)候,我都不斷告訴自己:“先建立解析器,用它在內(nèi)存中把數(shù)據(jù)結(jié)構(gòu)建立起來。然后從中抽取信息,必要時(shí)還要改變其結(jié)構(gòu)。最后再寫一個(gè)能根據(jù)這些信息自動(dòng)輸出代碼或者報(bào)告的工具”??窗?,這不就是模式?在這些任務(wù)中總能發(fā)現(xiàn)一些相似的算法和數(shù)據(jù)結(jié)構(gòu)?! ∫坏┱莆樟诉@些語言實(shí)現(xiàn)的設(shè)計(jì)模式或者架構(gòu),編寫起語言應(yīng)用來就得心應(yīng)手了。如果你想快速掌握編寫語言應(yīng)用的能力,這本書正適合你。本書奉行實(shí)用主義,從本質(zhì)上挖掘并提煉語言應(yīng)用中的設(shè)計(jì)模式。你會(huì)了解模式的重要性,學(xué)習(xí)如何實(shí)現(xiàn)這些模式,如何組合這些模式。很快你就能成為開發(fā)語言應(yīng)用的行家里手! 創(chuàng)造新的語言其實(shí)不需要深厚的理論知識(shí)做鋪墊。你可能不信,畢竟所有語言應(yīng)用方面的書都會(huì)占用大量的篇幅講解編譯器知識(shí)。我承認(rèn),為通用編程語言編寫編譯器確實(shí)需要扎實(shí)的計(jì)算機(jī)科學(xué)知識(shí)。然而,大多數(shù)程序員并不需要編寫這種編譯器。因此本書的重心是解決程序員平時(shí)最可能遇到的問題:配置文件讀取、數(shù)據(jù)讀取、模型驅(qū)動(dòng)的代碼生成、源代碼之間的翻譯、源代碼分析和解釋器的實(shí)現(xiàn)。同理,我們沒有使用Scheme等學(xué)術(shù)界推崇的語言,而是跟隨業(yè)界的發(fā)展采用Java編寫所有的示例,以便你能快速地在實(shí)際項(xiàng)目中大顯身手。
內(nèi)容概要
本書旨在傳授開發(fā)語言應(yīng)用(工具)的經(jīng)驗(yàn)和理念,幫助讀者構(gòu)建自己的語言應(yīng)用。這里的語言應(yīng)用并非特指用編譯器或解釋器實(shí)現(xiàn)編程語言,而是泛指任何處理、分析、翻譯輸入文件的程序,比如配置文件讀取器、數(shù)據(jù)讀取器、模型驅(qū)動(dòng)的代碼生成器、源碼到源碼的翻譯器、源碼分析工具、解釋器,以及諸如此類的工具。為此,作者舉例講解已有語言應(yīng)用的工作機(jī)制,拆解、歸納出31種易于理解且常用的設(shè)計(jì)模式(每種都包括通用數(shù)據(jù)結(jié)構(gòu)、算法、策略)。雖然示例是用Java編寫的,但相信讀者可以觸類旁通,利用這些設(shè)計(jì)模式構(gòu)建針對(duì)其他編程語言(既包括特定領(lǐng)域語言,也包括通用編程語言)的應(yīng)用。
作者簡(jiǎn)介
Terence
Parr是美國(guó)舊金山大學(xué)的計(jì)算機(jī)教授、研究生導(dǎo)師,他一直致力于從事ANTLR項(xiàng)目(antlr.org)和模板引擎(stringtemplate.org)的設(shè)計(jì)和開發(fā)工作。Terence曾擔(dān)任IBM、洛克希德馬丁、NeXT、雷諾汽車等公司的技術(shù)顧問,另著有《ANTLR權(quán)威指南》。
書籍目錄
第1部分 讀取輸入
第1章 初探語言應(yīng)用
1.1 大局觀
1.2 模式概覽
1.3 深入淺出語言應(yīng)用
1.4 為語言應(yīng)用選擇合適的模式
第2章 基本解析模式
2.1 識(shí)別式子的結(jié)構(gòu)
2.2 構(gòu)建遞歸下降語法解析器
2.3 使用文法DSL來構(gòu)建語法解析器
2.4 詞法單元和句子
第3章 高階解析模式
3.1 利用任意多的向前看符號(hào)進(jìn)行解析
3.2 記憶式解析
3.3 采用語義信息指導(dǎo)解析過程
第2部分 分析輸入
第4章 從語法樹構(gòu)建中間表示
4.1 為什么要構(gòu)建樹
4.2 構(gòu)建抽象語法樹
4.3 簡(jiǎn)要介紹ANTLR
4.4 使用ANTLR文法構(gòu)建AST
第5章 遍歷并改寫樹形結(jié)構(gòu)
5.1 遍歷樹以及訪問順序
5.2 封裝訪問節(jié)點(diǎn)的代碼
5.3 根據(jù)文法自動(dòng)生成訪問者
5.4 將遍歷與匹配解耦
第6章 記錄并識(shí)別程序中的符號(hào)
6.1 收集程序?qū)嶓w的信息
6.2 根據(jù)作用域劃分符號(hào)
6.3 解析符號(hào)
第7章 管理數(shù)據(jù)聚集的符號(hào)表
7.1 為結(jié)構(gòu)體構(gòu)建作用域樹
7.2 為類構(gòu)建作用域樹
第8章 靜態(tài)類型檢查
第3部分 解釋執(zhí)行
第9章 構(gòu)建高級(jí)解釋器
9.1 高級(jí)解釋器存儲(chǔ)系統(tǒng)的設(shè)計(jì)
9.2 高級(jí)解釋器中的符號(hào)記錄
9.3 處理指令
第10章 構(gòu)建字節(jié)碼解釋器
10.1 設(shè)計(jì)字節(jié)碼解釋器
10.2 定義匯編語言語法
10.3 字節(jié)碼機(jī)器的架構(gòu)
10.4 如何深入
第4部分 生成輸出
第11章 語言的翻譯
11.1 語法制導(dǎo)的翻譯
11.2 基于規(guī)則的翻譯
11.3 模型驅(qū)動(dòng)的翻譯
11.4 創(chuàng)建嵌套的輸出模型
第12章 使用模板生成DSL
12.1 熟悉StringTemplate
12.2 StringTemplate的性質(zhì)
12.2 從一個(gè)簡(jiǎn)單的輸入模型生成模板
12.4 在輸入模型不同的情況下復(fù)用模板
12.5 使用樹文法來創(chuàng)建模板
12.6 對(duì)數(shù)據(jù)列表使用模板
12.7 編寫可改變輸出結(jié)果的翻譯器
第13章 知識(shí)匯總
13.1 在蛋白質(zhì)結(jié)構(gòu)中查找模式
13.2 使用腳本構(gòu)建三維場(chǎng)景
13.3 處理XML
13.4 讀取通用的配置文件
13.5 對(duì)代碼進(jìn)行微調(diào)
13.6 為Java添加新的類型
13.7 美化源代碼
13.8 編譯為機(jī)器碼
參考文獻(xiàn)
索引
媒體關(guān)注與評(píng)論
別看那些編譯原理的書了!這本書教你編寫真正實(shí)用的解析器、翻譯器、解釋器等語言應(yīng)用,Terence Parr 在書中細(xì)致地講解了先進(jìn)的語言工具和語言應(yīng)用中設(shè)計(jì)模式的用法。無論是編寫自己的領(lǐng)域?qū)S谜Z言(DSL),還是挖掘已有代碼、查錯(cuò)或是尋寶,都能從這本簡(jiǎn)單易懂的書中找到示例和模式,因?yàn)樗旧细采w了解析技術(shù)的方方面面。 ——Python語言之父Guido Van Rossum‘ 我的“龍書”被打入冷宮了! ——Android平臺(tái)Dalvik虛擬機(jī)的設(shè)計(jì)者Dan Bornstein 本書對(duì)每個(gè)語言設(shè)計(jì)者來說都是一筆無價(jià)的財(cái)富?! ?mdash;—泰勒大學(xué)計(jì)算機(jī)科學(xué)系副教授Tom Nurkkala博士 Terence清晰地闡釋了語言設(shè)計(jì)中的概念。如果你想獨(dú)創(chuàng)一門語言卻又無從下手,或者覺得它高不可攀,那么,從這本書開始吧?! ?mdash;—Adam Keys 這本書行文風(fēng)格淺顯卻又不失韻味,以這個(gè)經(jīng)久不衰的熱門話題為中心,娓娓道來,頗有大師風(fēng)范?!毒幊陶Z言實(shí)現(xiàn)模式》不光講述創(chuàng)造語言的方法,還指引我們?cè)谶@個(gè)過程中該思考些什么。要想創(chuàng)造一個(gè)強(qiáng)壯的、可維護(hù)的專用語言,這本書是無價(jià)之寶?! ?mdash;—Breaulty研究機(jī)構(gòu)科學(xué)軟件開發(fā)部門主管Kyle Ferrio博士
編輯推薦
雖然《編程語言實(shí)現(xiàn)模式》不專門討論如何設(shè)計(jì)編程語言,但讀者在閱讀的過程中將吸收豐富的相關(guān)知識(shí)。比較不同編程語言的特點(diǎn)、了解編程語言的發(fā)展歷史是學(xué)習(xí)設(shè)計(jì)編程語言的好途徑。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載