注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)計(jì)算機(jī)科學(xué)理論與基礎(chǔ)知識(shí)領(lǐng)域特定語言

領(lǐng)域特定語言

領(lǐng)域特定語言

定 價(jià):¥149.90

作 者: [美]馬丁·福勒(Martin Fowler)
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115563163 出版時(shí)間: 2021-07-01 包裝: 平裝-膠訂
開本: 128開 頁數(shù): 473 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《領(lǐng)域特定語言》是領(lǐng)域特定語言(Domain-Specific Language,DSL)領(lǐng)域的豐碑之作,由軟件開發(fā)大師馬丁·福勒(Martin Fowler)歷時(shí)多年寫作而成。全書共57章,分為6個(gè)部分,全面介紹了DSL概念、DSL常見主題、外部DSL主題、內(nèi)部DSL主題、備選計(jì)算模型以及代碼生成等內(nèi)容,揭示了與編程語言無關(guān)的通用原則和模式,闡釋了如何通過DSL有效提高開發(fā)人員的生產(chǎn)力以及增進(jìn)與領(lǐng)域?qū)<业挠行贤?,能為開發(fā)人員選擇和使用DSL提供有效的決策依據(jù)和指導(dǎo)方法。本書適合想要了解各種DSL及其構(gòu)造方式,理解其通用原則、模式和適用場(chǎng)景,以提高開發(fā)生產(chǎn)力和溝通能力的軟件開發(fā)人員閱讀。

作者簡(jiǎn)介

  馬丁·福勒(Martin Fowler),軟件開發(fā)大師,ThoughtWorks首席科學(xué)家。他是一位作家、演說者、咨詢師和泛軟件開發(fā)領(lǐng)域的意見領(lǐng)袖。他致力于改善企業(yè)級(jí)的軟件設(shè)計(jì),對(duì)優(yōu)秀的設(shè)計(jì)以及支撐優(yōu)秀設(shè)計(jì)的工程實(shí)踐孜孜以求。他在重構(gòu)、面向?qū)ο蠓治鲈O(shè)計(jì)、模式、XP和UML等領(lǐng)域都有卓越貢獻(xiàn),著有《重構(gòu):改善既有代碼的設(shè)計(jì)》《分析模式:可復(fù)用的對(duì)象模型》《領(lǐng)域特定語言》《企業(yè)應(yīng)用架構(gòu)模式》等經(jīng)典著作。

圖書目錄

第 一部分 敘述
第 1章 入門示例2
1.1 古堡安全系統(tǒng)2
1.2 狀態(tài)機(jī)模型4
1.3 為格蘭特女士的控制器編程7
1.4 語言和語義模型13
1.5 使用代碼生成15
1.6 使用語言工作臺(tái)17
1.7 可視化19
第 2章 使用DSL21
2.1 定義DSL21
2.1.1 DSL的邊界22
2.1.2 片段DSL和獨(dú)立DSL25
2.2 為何使用DSL25
2.2.1 提高開發(fā)效率26
2.2.2 與領(lǐng)域?qū)<覝贤?6
2.2.3 改變執(zhí)行環(huán)境27
2.2.4 備選計(jì)算模型28
2.3 DSL的問題28
2.3.1 語言噪聲29
2.3.2 構(gòu)建成本29
2.3.3 集中營(yíng)語言30
2.3.4 狹隘的抽象30
2.4 廣義的語言處理31
2.5 DSL的生命周期31
2.6 設(shè)計(jì)優(yōu)良的DSL從何而來33
第3章 實(shí)現(xiàn)DSL34
3.1 DSL處理的架構(gòu)34
3.2 語法分析器的工作方式37
3.3 文法、語法和語義39
3.4 語法分析中的數(shù)據(jù)39
3.5 宏41
3.6 DSL的測(cè)試42
3.6.1 語義模型的測(cè)試42
3.6.2 語法分析器的測(cè)試46
3.6.3 腳本的測(cè)試49
3.7 錯(cuò)誤處理50
3.8 DSL的遷移51
第4章 實(shí)現(xiàn)內(nèi)部DSL53
4.1 連貫API和命令查詢API53
4.2 對(duì)語法分析層的需要56
4.3 使用函數(shù)57
4.4 字面量集合61
4.5 基于文法選擇內(nèi)部元素62
4.6 閉包63
4.7 語法分析樹操作65
4.8 注解66
4.9 字面量擴(kuò)展67
4.10 降低語法噪聲68
4.11 動(dòng)態(tài)接收68
4.12 提供類型檢查69
第5章 實(shí)現(xiàn)外部DSL71
5.1 語法分析策略71
5.2 輸出生成策略74
5.3 解析中的概念75
5.3.1 單獨(dú)的詞法分析75
5.3.2 文法和語言76
5.3.3 正則文法、上下文無關(guān)文法和上下文相關(guān)文法77
5.3.4 自頂向下解析和自底向上解析78
5.4 混入另一種語言80
5.5 XML DSL81
第6章 在內(nèi)部DSL和外部DSL之間做選擇83
6.1 學(xué)習(xí)曲線83
6.2 構(gòu)建成本84
6.3 程序員的熟悉度85
6.4 與領(lǐng)域?qū)<覝贤?5
6.5 與宿主語言混合85
6.6 表達(dá)性強(qiáng)邊界86
6.7 運(yùn)行時(shí)配置86
6.8 趨于通用87
6.9 組合多種DSL87
6.10 小結(jié)88
第7章 備選計(jì)算模型89
7.1 決策表91
7.2 產(chǎn)生式規(guī)則系統(tǒng)92
7.3 狀態(tài)機(jī)93
7.4 依賴網(wǎng)絡(luò)94
7.5 選擇模型94
第8章 代碼生成95
8.1 選擇生成什么96
8.2 如何生成98
8.3 混合生成的代碼和手寫代碼99
8.4 生成可讀的代碼100
8.5 語法分析前的代碼生成100
8.6 延伸閱讀101
第9章 語言工作臺(tái)102
9.1 語言工作臺(tái)的要素102
9.2 模式定義語言和元模型103
9.3 源編輯和投射編輯107
9.4 說明性編程109
9.5 工具之旅110
9.6 語言工作臺(tái)和CASE工具111
9.7 是否應(yīng)該使用語言工作臺(tái)112
第二部分 常見主題
第 10章 DSL集錦114
10.1 Graphviz114
10.2 JMock115
10.3 CSS116
10.4 HQL118
10.5 XAML118
10.6 FIT120
10.7 Make等121
第 11章 語義模型(Semantic Model)123
11.1 運(yùn)行機(jī)制123
11.2 使用時(shí)機(jī)125
11.3 入門示例(Java)126
第 12章 符號(hào)表(Symbol Table)127
12.1 運(yùn)行機(jī)制127
12.2 使用時(shí)機(jī)129
12.3 延伸閱讀129
12.4 以外部DSL實(shí)現(xiàn)的依賴網(wǎng)絡(luò)(Java和ANTLR)130
12.5 在內(nèi)部DSL中使用符號(hào)鍵(Ruby)131
12.6 以枚舉作為靜態(tài)類型符號(hào)(Java)132
第 13章 上下文變量(Context Variable)135
13.1 運(yùn)行機(jī)制135
13.2 使用時(shí)機(jī)136
13.3 讀取INI文件(C#)136
第 14章 構(gòu)造型構(gòu)建器(Construction Builder)139
14.1 運(yùn)行機(jī)制139
14.2 使用時(shí)機(jī)140
14.3 構(gòu)建簡(jiǎn)單的航班數(shù)據(jù)(C#)140
第 15章 宏(Macro)142
15.1 運(yùn)行機(jī)制142
15.1.1 文本宏143
15.1.2 語法宏146
15.2 使用時(shí)機(jī)149
第 16章 通知(Notification)150
16.1 運(yùn)行機(jī)制150
16.2 使用時(shí)機(jī)151
16.3 非常簡(jiǎn)單的通知(C#)151
16.4 對(duì)通知進(jìn)行語法分析(Java)152
第三部分 外部DSL主題
第 17章 分隔符制導(dǎo)翻譯(Delimiter-Directed Translation)156
17.1 運(yùn)行機(jī)制156
17.2 使用時(shí)機(jī)159
17.3 常客記分(C#)159
17.3.1 語義模型159
17.3.2 語法分析器161
17.4 使用格蘭特女士的控制器對(duì)非自治語句進(jìn)行語法分析(Java)164
第 18章 語法制導(dǎo)翻譯(Syntax-Directed Translation)171
18.1 運(yùn)行機(jī)制172
18.1.1 詞法分析器172
18.1.2 語法分析器175
18.1.3 產(chǎn)生輸出177
18.1.4 語義謂詞177
18.2 使用時(shí)機(jī)178
18.3 延伸閱讀178
第 19章 巴克斯-諾爾范式(BNF)179
19.1 運(yùn)行機(jī)制179
19.1.1 多重性符號(hào)(克林運(yùn)算符)181
19.1.2 其他有用的運(yùn)算符182
19.1.3 解析表達(dá)式文法182
19.1.4 將EBNF轉(zhuǎn)換為基礎(chǔ)BNF183
19.1.5 行為代碼185
19.2 使用時(shí)機(jī)187
第 20章 基于正則表達(dá)式表的詞法分析器(Regex Table Lexer)188
20.1 運(yùn)行機(jī)制189
20.2 使用時(shí)機(jī)190
20.3 對(duì)格蘭特女士的控制器進(jìn)行詞法分析(Java)190
第 21章 遞歸下降語法分析器(Recursive Descent Parser)193
21.1 運(yùn)行機(jī)制194
21.2 使用時(shí)機(jī)196
21.3 延伸閱讀197
21.4 遞歸下降和格蘭特女士的控制器(Java)197
第 22章 語法分析器組合子(Parser Combinator)202
22.1 運(yùn)行機(jī)制203
22.1.1 處理動(dòng)作205
22.1.2 函數(shù)式風(fēng)格的組合子206
22.2 使用時(shí)機(jī)207
22.3 語法分析器組合子和格蘭特女士的控制器(Java)207
第 23章 語法分析器生成器(Parser Generator)214
23.1 運(yùn)行機(jī)制214
23.2 使用時(shí)機(jī)216
23.3 Hello World(Java和ANTLR)216
23.3.1 編寫基本的文法217
23.3.2 構(gòu)建語法分析器218
23.3.3 為文法添加行為代碼220
23.3.4 使用代溝221
第 24章 樹構(gòu)造(Tree Construction)224
24.1 運(yùn)行機(jī)制224
24.2 使用時(shí)機(jī)226
24.3 使用ANTLR的樹構(gòu)造語法(Java和ANTLR)227
24.3.1 分詞228
24.3.2 語法分析228
24.3.3 組裝語義模型230
24.4 使用行為代碼進(jìn)行樹構(gòu)造(Java和ANTLR)233
第 25章 內(nèi)嵌翻譯(Embedded Translation)239
25.1 運(yùn)行機(jī)制239
25.2 使用時(shí)機(jī)240
25.3 格蘭特女士的控制器(Java和ANTLR)240
第 26章 內(nèi)嵌解釋(Embedded Interpretation)244
26.1 運(yùn)行機(jī)制244
26.2 使用時(shí)機(jī)244
26.3 計(jì)算器(ANTLR和Java)245
第 27章 外來代碼(Foreign Code)247
27.1 運(yùn)行機(jī)制247
27.2 使用時(shí)機(jī)248
27.3 嵌入動(dòng)態(tài)代碼(ANTLR、Java和JavaScript)249
27.3.1 語義模型249
27.3.2 語法分析器251
第 28章 可變分詞方式(Alternative Tokenization)255
28.1 運(yùn)行機(jī)制255
28.1.1 引用256
28.1.2 詞法狀態(tài)258
28.1.3 修改記號(hào)類型259
28.1.4 忽略記號(hào)類型260
28.2 使用時(shí)機(jī)261
第 29章 嵌套運(yùn)算符表達(dá)式(Nested Operator Expression)262
29.1 運(yùn)行機(jī)制262
29.1.1 自底向上的語法分析器262
29.1.2 自頂向下的語法分析器264
29.2 使用時(shí)機(jī)266
第30章 換行分隔符(Newline Separator)267
30.1 運(yùn)行機(jī)制267
30.2 使用時(shí)機(jī)269
第31章 外部DSL拾遺271
31.1 語法縮進(jìn)271
31.2 模塊化文法273
第四部分 內(nèi)部DSL主題
第32章 表達(dá)式構(gòu)建器(Expression Builder)276
32.1 運(yùn)行機(jī)制277
32.2 使用時(shí)機(jī)277
32.3 用構(gòu)建器和不用構(gòu)建器的連貫接口日程表(Java)278
32.4 對(duì)日程表使用多個(gè)構(gòu)建器(Java)280
第33章 函數(shù)序列(Function Sequence)283
33.1 運(yùn)行機(jī)制283
33.2 使用時(shí)機(jī)284
33.3 簡(jiǎn)單的計(jì)算機(jī)配置范例(Java)284
第34章 嵌套函數(shù)(Nested Function)287
34.1 運(yùn)行機(jī)制287
34.2 使用時(shí)機(jī)289
34.3 簡(jiǎn)單的計(jì)算機(jī)配置示例(Java)289
34.4 用記號(hào)處理多個(gè)不同的參數(shù)(C#)291
34.5 針對(duì)IDE支持使用子類型記號(hào)(Java)292
34.6 使用對(duì)象初始化器(C#)294
34.7 重復(fù)事件(C#)295
34.7.1 語義模型295
34.7.2 DSL298
第35章 方法級(jí)聯(lián)(Method Chaining)300
35.1 運(yùn)行機(jī)制300
35.1.1 使用構(gòu)建器還是值301
35.1.2 收尾問題302
35.1.3 分層結(jié)構(gòu)303
35.1.4 漸進(jìn)式接口303
35.2 使用時(shí)機(jī)304
35.3 簡(jiǎn)單的計(jì)算機(jī)配置示例(Java)304
35.4 帶有屬性的方法級(jí)聯(lián)(C#)307
35.5 漸進(jìn)式接口(C#)308
第36章 對(duì)象作用域(Object Scoping)310
36.1 運(yùn)行機(jī)制310
36.2 使用時(shí)機(jī)311
36.3 安全代碼(C#)312
36.3.1 語義模型312
36.3.2 DSL314
36.4 使用實(shí)例求值(Ruby)316
36.5 使用實(shí)例初始化程序(Java)318
第37章 閉包(Closure)320
37.1 運(yùn)行機(jī)制320
37.2 使用時(shí)機(jī)324
第38章 嵌套閉包(Nested Closure)325
38.1 運(yùn)行機(jī)制325
38.2 使用時(shí)機(jī)326
38.3 用嵌套閉包來包裝函數(shù)序列(Ruby)327
38.4 簡(jiǎn)單的C#范例(C#)329
38.5 使用方法級(jí)聯(lián)(Ruby)330
38.6 帶有顯式閉包參數(shù)的函數(shù)序列(Ruby)331
38.7 使用實(shí)例求值(Ruby)333
第39章 字面量列表(Literal List)336
39.1 運(yùn)行機(jī)制336
39.2 使用時(shí)機(jī)336
第40章 字面量映射(Literal Map)338
40.1 運(yùn)行機(jī)制338
40.2 使用時(shí)機(jī)339
40.3 使用列表和映射表達(dá)計(jì)算機(jī)的配置信息(Ruby)339
40.4 演化為格林斯潘式(Ruby)340
第41章 動(dòng)態(tài)接收(Dynamic Reception)344
41.1 運(yùn)行機(jī)制344
41.2 使用時(shí)機(jī)345
41.3 積分—使用經(jīng)過語法分析的方法名(Ruby)347
41.3.1 模型347
41.3.2 構(gòu)建器349
41.4 積分—使用方法級(jí)聯(lián)(Ruby)350
41.4.1 模型351
41.4.2 構(gòu)建器351
41.5 去除密室控制器中的引用(JRuby)354
第42章 注解(Annotation)359
42.1 運(yùn)行機(jī)制359
42.1.1 定義注解360
42.1.2 處理注解361
42.2 使用時(shí)機(jī)362
42.3 用于運(yùn)行時(shí)處理的自定義語法(Java)362
42.4 使用類方法(Ruby)364
42.5 動(dòng)態(tài)代碼生成(Ruby)365
第43章 語法分析樹操作(Parse Tree Manipulation)367
43.1 運(yùn)行機(jī)制367
43.2 使用時(shí)機(jī)368
43.3 由C#條件生成IMAP查詢(C#)369
43.3.1 語義模型369
43.3.2 使用C#構(gòu)建371
43.3.3 退后一步375
第44章 類符號(hào)表(Class Symbol Table)377
44.1 運(yùn)行機(jī)制377
44.2 使用時(shí)機(jī)378
44.3 靜態(tài)類型的類符號(hào)表(Java)379
第45章 文本打磨(Textual Polishing)385
45.1 運(yùn)行機(jī)制385
45.2 使用時(shí)機(jī)386
45.3 打磨后的折扣規(guī)則(Ruby)386
第46章 字面量擴(kuò)展(Literal Extension)389
46.1 運(yùn)行機(jī)制389
46.2 使用時(shí)機(jī)390
46.3 食譜配料(C#)390
第五部分 備選計(jì)算模型
第47章 適應(yīng)性模型(Adaptive Model)394
47.1 運(yùn)行機(jī)制395
47.1.1 在適應(yīng)性模型中納入命令式代碼396
47.1.2 工具397
47.2 使用時(shí)機(jī)398
第48章 決策表(Decision Table)400
48.1 運(yùn)行機(jī)制400
48.2 使用時(shí)機(jī)401
48.3 訂單費(fèi)用計(jì)算(C#)402
48.3.1 模型402
48.3.2 語法分析器405
第49章 依賴網(wǎng)絡(luò)(Dependency Network)408
49.1 運(yùn)行機(jī)制408
49.2 使用時(shí)機(jī)410
49.3 分析藥劑(C#)411
49.3.1 語義模型411
49.3.2 語法分析器413
第50章 產(chǎn)生式規(guī)則系統(tǒng)(Production Rule System)414
50.1 運(yùn)行機(jī)制415
50.1.1 規(guī)則鏈415
50.1.2 矛盾的推理416
50.1.3 規(guī)則結(jié)構(gòu)里的模式417
50.2 使用時(shí)機(jī)417
50.3 俱樂部會(huì)員驗(yàn)證(C#)418
50.3.1 模型418
50.3.2 語法分析器419
50.3.3 演進(jìn)DSL420
50.4 適任資格的規(guī)則:擴(kuò)展俱樂部成員(C#)421
50.4.1 模型422
50.4.2 語法分析器425
第51章 狀態(tài)機(jī)(State Machine)426
51.1 運(yùn)行機(jī)制426
51.2 使用時(shí)機(jī)428
51.3 密室控制器(Java)428
第六部分 代碼生成
第52章 基于轉(zhuǎn)換器的代碼生成(Transformer Generation)430
52.1 運(yùn)行機(jī)制430
52.2 使用時(shí)機(jī)431
52.3 密室控制器(Java生成C)432
第53章 基于模板的代碼生成(Templated Generation)435
53.1 運(yùn)行機(jī)制435
53.2 使用時(shí)機(jī)436
53.3 使用嵌套條件生成密室狀態(tài)機(jī)(Velocity和Java生成C)437
第54章 嵌入助手(Embedment Helper)442
54.1 運(yùn)行機(jī)制443
54.2 使用時(shí)機(jī)443
54.3 密室狀態(tài)(Java和ANTLR)444
54.4 輔助類是否應(yīng)該生成HTML(Java和Velocity) 446
第55章 基于模型的代碼生成(Model-Aware Generation)448
55.1 運(yùn)行機(jī)制448
55.2 使用時(shí)機(jī)449
55.3 密室狀態(tài)機(jī)(C)449
55.4 動(dòng)態(tài)加載狀態(tài)機(jī)(C)455
第56章 無視模型的代碼生成(Model Ignorant Generation)458
56.1 運(yùn)行機(jī)制458
56.2 使用時(shí)機(jī)459
56.3 使用嵌套條件的密室狀態(tài)機(jī)(C)459
第57章 代溝(Generation Gap)461
57.1 運(yùn)行機(jī)制461
57.2 使用時(shí)機(jī)462
57.3 根據(jù)數(shù)據(jù)模式生成類(Java和一些Ruby)463
參考文獻(xiàn)467
模式清單468
速查表470

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.dappsexplained.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)