領(lǐng)域特定語言這要書是專業(yè)性十分強的,非常適合有經(jīng)驗的開發(fā)者,由世界級軟件開發(fā)大師和軟件開發(fā)“教父”MartinFowler歷時多年寫作而成,揭示了與編程語言無關(guān)的通用原則和模式,能為開發(fā)人員選擇和使用DSL提供有效的決策依據(jù)和指導(dǎo)方法。東坡小編分享領(lǐng)域特定語言pdf中文完整版電子書籍,點擊下面的地址即可免費下載閱讀。
領(lǐng)域特定語言目錄
譯者序
前言
第一部分 敘 述
第1章 入門例子
1.1 哥特式建筑安全系統(tǒng)
1.2 狀態(tài)機(jī)模型
1.3 為格蘭特小姐的控制器編寫程序
1.4 語言和語義模型
1.5使用代碼生成
1.6 使用語言工作臺
1.7 可視化
第2章 使用DSL
2.1定義DSL
2.1.1DSL的邊界
2.1.2片段DSL和獨立DSL
2.2為何需要DSL
2.2.1 提高開發(fā)效率
2.2.2與煊蜃?業(yè)墓低?br /> 2.2.3執(zhí)行環(huán)境的改變
2.2.4其他計算模型
2.3DSL的問題
2.3.1語言噪音
2.3.2構(gòu)建成本
2.3.3集中營語言
2.3.4 “一葉障目”的抽象
2.4廣義的語言處理
2.5DSL的生命周期
2.6設(shè)計優(yōu)良的DSL從何而來
第3章 實現(xiàn)DSL
3.1DSL處理之架構(gòu)
3.2解析器的工作方式
3.3文法、語法和語義
3.4解析中的數(shù)據(jù)
3.5宏
3.6測試DSL
3.6.1語義模型的測試
3.6.2解析器的測試
3.6.3腳本的測試
3.7錯誤處理
3.8DSL遷移
第4章 實現(xiàn)內(nèi)部DSL
4.1連貫API與命令–查詢API
4.2解析層的需求
4.3使用函數(shù)
4.4字面量集合
4.5基于文法選擇內(nèi)部元素
4.6閉包
4.7解析樹操作
4.8標(biāo)注
4.9為字面量提供擴(kuò)展
4.10消除語法噪音
4.11動態(tài)接收
4.12提供類型檢查
第5章 實現(xiàn)外部DSL
5.1語法分析策略
5.2輸出生成策略
5.3解析中的概念
5.3.1單獨的詞法分析
5.3.2文法和語言
5.3.3正則文法、上下文無關(guān)文法和上下文相關(guān)文法
5.3.4自頂向下解析和自底向上解析
5.4混入另一種語言
5.5XML DSL
第6章 內(nèi)部DSL vs 外部DSL
6.1學(xué)習(xí)曲線
6.2創(chuàng)建成本
6.3程序員的熟悉度
6.4與領(lǐng)域?qū)<覝贤?/p>
6.5與宿主語言混合
6.6強邊界
6.7運行時配置
6.8趨于平庸
6.9組合多種DSL
6.10總結(jié)
第7章 其他計算模型概述
7.1幾種計算模型
7.1.1決策表
7.1.2產(chǎn)生式規(guī)則系統(tǒng)
7.1.3狀態(tài)機(jī)
7.1.4依賴網(wǎng)絡(luò)
7.1.5選擇模型
第8章 代碼生成
8.1選擇生成什么
8.2如何生成
8.3混合生成代碼和手寫代碼
8.4生成可讀的代碼
8.5解析之前的代碼生成
8.6延伸閱讀
第9章 語言工作臺
9.1語言工作臺之要素
9.2模式定義語言和元模型
9.3源碼編輯和投射編輯
9.4說明性編程
9.5工具之旅
9.6語言工作臺和CASE工具
9.7我們該使用語言工作臺嗎
第二部分 通 用 主 題
第10章 各種DSL
10.1Graphviz
10.2JMock
10.3CSS
10.4HQL
10.5XAML
10.6FIT
10.7Make等
第11章 語義模型
11.1工作原理
11.2使用場景
11.3入門例子(Java)
第12章 符號表
12.1工作原理
12.2使用場景
12.3參考文獻(xiàn)
12.4以外部DSL實現(xiàn)的依賴網(wǎng)絡(luò)(Java和ANTLR)
12.5在一個內(nèi)部DSL中使用符號鍵(Ruby)
12.6用枚舉作為靜態(tài)類型符號(Java)
第13章 語境變量
13.1工作原理
13.2使用場景
13.3讀取INI文件(C#)
第14章 構(gòu)造型生成器
14.1工作原理
14.2使用場景
14.3構(gòu)建簡單的航班信息(C#)
第15章 宏
15.1工作原理
15.1.1文本宏
15.1.2語法宏
15.2使用場景
第16章 通知
16.1工作原理
16.2使用場景
16.3一個非常簡單的通知(C#)
16.4解析中的通知(Java)
第三部分 外部DSL主題
第17章 分隔符指導(dǎo)翻譯
17.1工作原理
17.2使用場景
17.3常客記分(C#)
17.3.1 語義模型
17.3.2解析器
17.4使用格蘭特小姐的控制器解析非自治語句(Java)
第18章 語法指導(dǎo)翻譯
18.1工作原理
18.1.1詞法分析器
18.1.2語法分析器
18.1.3產(chǎn)生輸出
18.1.4語義預(yù)測
18.2使用場景
18.3參考文獻(xiàn)
第19章 BNF
19.1工作原理
19.1.1多重性符號(Kleene運算符)
19.1.2其他一些有用的運算符
19.1.3解析表達(dá)式文法
19.1.4將EBNF轉(zhuǎn)換為基礎(chǔ)BNF
19.1.5行為代碼
19.2使用場景
第20章 基于正則表達(dá)式表的詞法分析器
20.1工作原理
20.2使用場景
20.3格蘭特小姐控制器的詞法處理(Java)
第21章 遞歸下降法語法解析器
21.1工作原理
21.2使用場景
21.3參考文獻(xiàn)
21.4遞歸下降和格蘭特小姐的控制器(Java)
第22章 解析器組合子
22.1工作原理
22.1.1處理動作
22.1.2函數(shù)式風(fēng)格的組合子
22.2使用場景
22.3解析器組合子和格蘭特小姐的控制器(Java)
第23章 解析器生成器
23.1工作原理
23.2使用場景
23.3Hello World(Java和ANTLR)
23.3.1編寫基本的文法
23.3.2構(gòu)建語法分析器
23.3.3為文法添加代碼動作
23.3.4使用代溝
第24章 樹的構(gòu)建
24.1工作原理
24.2使用場景
24.3使用ANTLR的樹構(gòu)建語法(Java和ANTLR)
24.3.1標(biāo)記解釋
24.3.2解析
24.3.3組裝語義模型
24.4使用代碼動作進(jìn)行樹的構(gòu)建(Java和ANTLR)
第25章 嵌入式語法翻譯
25.1工作原理
25.2使用場景
25.3格蘭特小姐的控制器(Java和ANTLR)
第26章 內(nèi)嵌解釋器
26.1工作原理
26.2使用場景
26.3計算器(ANTLR和Java)
第27章 外加代碼
27.1工作原理
27.2使用場景
27.3嵌入動態(tài)代碼(ANTLR、Java和JavaScript)
27.3.1語義模型
27.3.2語法分析器
第28章 可變分詞方式
28.1工作原理
28.1.1字符引用
28.1.2詞法狀態(tài)
28.1.3修改標(biāo)記類型
28.1.4忽略標(biāo)記類型
28.2使用場景
第29章 嵌套的運算符表達(dá)式
29.1工作原理
29.1.1使用自底向上的語法分析器
29.1.2自頂向下的語法分析器
29.2使用場景
第30章 以換行符作為分隔符
30.1工作原理
30.2使用場景
第31章 外部DSL拾遺
31.1語法縮進(jìn)
31.2模塊化文法
第四部分 內(nèi)部DSL主題
第32章 表達(dá)式生成器
32.1工作原理
32.2使用場景
32.3具有和沒有生成器的連貫日歷(Java)
32.4對于日歷使用多個生成器(Java)
第33章 函數(shù)序列
33.1工作原理
33.2使用場景
33.3簡單的計算機(jī)配置(Java)
第34章 嵌套函數(shù)
34.1工作原理
34.2使用場景
34.3簡單計算機(jī)配置范例(Java)
34.4用標(biāo)記處理多個不同的參數(shù)(C#)
34.5針對IDE支持使用子類型標(biāo)記(Java)
34.6使用對象初始化器(C#)
34.7周期性事件(C#)
34.7.1語義模型
34.7.2DSL
第35章 方法級聯(lián)
35.1工作原理
35.1.1生成器還是值
35.1.2收尾問題
35.1.3分層結(jié)構(gòu)
35.1.4漸進(jìn)式接口
35.2使用場景
35.3簡單的計算機(jī)配置范例(Java)
35.4帶有屬性的方法級聯(lián)(C#)
35.5漸進(jìn)式接口(C#)
第36章 對象范圍
36.1工作原理
36.2使用場景
36.3安全代碼(C#)
36.3.1 語義模型
36.3.2DSL
36.4使用實例求值(Ruby)
36.5使用實例初始化器(Java)
第37章 閉包
37.1工作原理
37.2使用場景
第38章 嵌套閉包
38.1工作原理
38.2使用場景
38.3用嵌套閉包來包裝函數(shù)序列(Ruby)
38.4簡單的C#示例(C#)
38.5使用方法級聯(lián)(Ruby)
38.6帶顯式閉包參數(shù)的函數(shù)序列(Ruby)
38.7采用實例級求值(Ruby)
第39章 列表的字面構(gòu)造
39.1工作原理
39.2使用場景
第40章 Literal Map
40.1工作原理
40.2使用場景
40.3使用List和Map表達(dá)計算機(jī)的配置信息(Ruby)
40.4演化為Greenspun式(Ruby)
第41章 動態(tài)接收
41.1工作原理
41.2使用場景
41.3積分——使用方法名解析(Ruby)
41.3.1模型
41.3.2生成器
41.4積分——使用方法級聯(lián)(Ruby)
41.4.1模型
41.4.2生成器
41.5去掉安全儀表盤控制器中的引用(JRuby)
第42章 標(biāo)注
42.1工作原理
42.1.1定義標(biāo)注
42.1.2處理標(biāo)注
42.2使用場景
42.3用于運行時處理的特定語法(Java)
42.4使用類方法(Ruby)
42.5動態(tài)代碼生成(Ruby)
第43章 解析樹操作
43.1工作原理
43.2使用場景
43.3由C#條件生成IMAP查詢(C#)
43.3.1語義模型
43.3.2以C#構(gòu)建
43.3.3退后一步
第44章 類符號表
44.1 工作原理
44.2使用場景
44.3在靜態(tài)類型中實現(xiàn)類符號表(Java)
第45章 文本潤色
45.1工作原理
45.2使用場景
45.3使用潤色的折扣規(guī)則(Ruby)
第46章 為字面量提供擴(kuò)展
46.1工作原理
46.2使用場景
46.3食譜配料(C#)
第五部分 其他計算模型
第47章 適應(yīng)性模型
47.1工作原理
47.1.1在適應(yīng)性模型中使用命令式代碼
47.1.2工具
47.2使用場景
第48章 決策表
48.1工作原理
48.2使用場景
48.3為一個訂單計算費用(C#)
48.3.1模型
48.3.2解析器
第49章 依賴網(wǎng)絡(luò)
49.1工作原理
49.2使用場景
49.3分析飲料(C#)
49.3.1語義模型
49.3.2解析器
第50章 產(chǎn)生式規(guī)則系統(tǒng)
50.1工作原理
50.1.1鏈?zhǔn)讲僮?/p>
50.1.2矛盾推導(dǎo)
50.1.3規(guī)則結(jié)構(gòu)里的模式
50.2使用場景
50.3俱樂部會員校驗(C#)
50.3.1模型
50.3.2解析器
50.3.3演進(jìn)DSL
50.4適任資格的規(guī)則:擴(kuò)展俱樂部成員(C#)
50.4.1模型
50.4.2解析器
第51章 狀態(tài)機(jī)
51.1工作原理
51.2使用場景
51.3安全面板控制器(Java)
第六部分 代 碼 生 成
第52章 基于轉(zhuǎn)換器的代碼生成
52.1工作原理
52.2使用場景
52.3安全面板控制器(Java生成的C)
第53章 模板化的生成器
53.1工作原理
53.2使用場景
53.3生成帶有嵌套條件的安全控制面板狀態(tài)機(jī)(Velocity和Java生成的C)
第54章 嵌入助手
54.1工作原理
54.2使用場景
54.3安全控制面板的狀態(tài)(Java和ANTLR)
54.4助手類應(yīng)該生成HTML嗎(Java和Velocity)
第55章 基于模型的代碼生成
55.1工作原理
55.2使用場景
55.3安全控制面板的狀態(tài)機(jī)(C)
55.4動態(tài)載入狀態(tài)機(jī)(C)
第56章 無視模型的代碼生成
56.1工作原理
56.2使用場景
56.3使用嵌套條件的安全面板狀態(tài)機(jī)(C)
第57章 代溝
57.1工作原理
57.2使用場景
57.3根據(jù)數(shù)據(jù)結(jié)構(gòu)生成類(Java和一些Ruby)
參考文獻(xiàn)
領(lǐng)域特定語言節(jié)選
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版