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