注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計其他編程語言/工具領(lǐng)域特定語言

領(lǐng)域特定語言

領(lǐng)域特定語言

定 價:¥89.00

作 者: (英)Martin Fowler 著,ThoughtWorks中國 譯
出版社: 機械工業(yè)出版社
叢編項:
標(biāo) 簽: 計算機/網(wǎng)絡(luò) 軟件工程/開發(fā)項目管理

ISBN: 9787111413059 出版時間: 2013-03-01 包裝: 平裝
開本: ` 頁數(shù): 488 字?jǐn)?shù):  

內(nèi)容簡介

  《領(lǐng)域特定語言》是DSL領(lǐng)域的豐碑之作,由世界級軟件開發(fā)大師和軟件開發(fā)“教父”Martin Fowler歷時多年寫作而成,ThoughtWorks中國翻譯。全面詳盡地講解了各種DSL及其構(gòu)造方式,揭示了與編程語言無關(guān)的通用原則和模式,闡釋了如何通過DSL有效提高開發(fā)人員的生產(chǎn)力以及增進(jìn)與領(lǐng)域?qū)<业挠行贤?,能為開發(fā)人員選擇和使用DSL提供有效的決策依據(jù)和指導(dǎo)方法?!额I(lǐng)域特定語言》全書共57章,分為六個部分:第一部分介紹了什么是DSL,DSL的用途,如何實現(xiàn)外部DS和內(nèi)部DSL,如何生成代碼,語言工作臺的使用方法;第二部分介紹了各種DSL,分別講述了語義模型、符號表、語境變量、構(gòu)造型生成器、宏和通知的工作原理和使用場景;第三部分分別揭示分隔符指導(dǎo)翻譯、語法指導(dǎo)翻譯、BNF、易于正則表達(dá)式表的詞法分析器、遞歸下降法詞法分析器、解析器組合子、解析器生成器、樹的構(gòu)建、嵌入式語法翻譯、內(nèi)嵌解釋器、外加代碼等;第四部分介紹了表達(dá)式生成器、函數(shù)序列、嵌套函數(shù)、方法級聯(lián)、對象范圍、閉包、嵌套閉包、標(biāo)注、解析數(shù)操作、類符號表、文本潤色、字面量擴展的工作原理和使用場景;第五部分介紹了適應(yīng)性模型、決策表、依賴網(wǎng)絡(luò)、產(chǎn)生式規(guī)則系統(tǒng)、狀態(tài)機等計算模型的工作原理和使用場景;第六部分介紹了基于轉(zhuǎn)換器的代碼生成、模板化的生成器、嵌入助手、基于模型的代碼生成、無視模型的代碼生成和代溝等內(nèi)容。

作者簡介

  Martin Fowler,世界級軟件開發(fā)大師,軟件開發(fā)“教父”,敏捷開發(fā)方法的創(chuàng)始人之一,在面向?qū)ο蠓治雠c設(shè)計、UML、模式、極限編程、重構(gòu)和DSL等領(lǐng)域都有非常深入的研究并為軟件開發(fā)行業(yè)做出了卓越貢獻(xiàn)。他樂于分享,撰寫了《企業(yè)應(yīng)用架構(gòu)模式》(榮獲第13屆Jolt生產(chǎn)力大獎)、《重構(gòu):改善既有代碼的設(shè)計》、《分析模式:可復(fù)用的對象模型》、《UML精粹:標(biāo)準(zhǔn)對象建模語言簡明指南》等在軟件開發(fā)領(lǐng)域頗負(fù)盛名的著作。

圖書目錄

譯者序
前言
第一部分 敘  述
第1章入門例子2
1.1 哥特式建筑安全系統(tǒng)2
1.2 狀態(tài)機模型4
1.3 為格蘭特小姐的控制器編寫程序7
1.4 語言和語義模型13
1.5使用代碼生成15
1.6 使用語言工作臺17
1.7 可視化20
第2章 使用DSL21
2.1定義DSL21
 2.1.1DSL的邊界22
 2.1.2片段DSL和獨立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其他計算模型28
2.3DSL的問題28
 2.3.1語言噪音29
 2.3.2構(gòu)建成本29
 2.3.3集中營語言30
 2.3.4 “一葉障目”的抽象30
2.4廣義的語言處理31
2.5DSL的生命周期31
2.6設(shè)計優(yōu)良的DSL從何而來32
第3章實現(xiàn)DSL34
3.1DSL處理之架構(gòu)34
3.2解析器的工作方式37
3.3文法、語法和語義39
3.4解析中的數(shù)據(jù)39
3.5宏41
3.6測試DSL42
 3.6.1語義模型的測試42
 3.6.2解析器的測試45
 3.6.3腳本的測試49
3.7錯誤處理50
3.8DSL遷移51
第4章實現(xiàn)內(nèi)部DSL54
4.1連貫API與命令–查詢API54
4.2解析層的需求57
4.3使用函數(shù)58
4.4字面量集合61
4.5基于文法選擇內(nèi)部元素63
4.6閉包64
4.7解析樹操作66
4.8標(biāo)注67
4.9為字面量提供擴展69
4.10消除語法噪音69
4.11動態(tài)接收69
4.12提供類型檢查70
第5章實現(xiàn)外部DSL72
5.1語法分析策略72
5.2輸出生成策略74
5.3解析中的概念76
 5.3.1單獨的詞法分析76
 5.3.2文法和語言77
 5.3.3正則文法、上下文無關(guān)文法和上下文相關(guān)文法77
 5.3.4自頂向下解析和自底向上解析79
5.4混入另一種語言81
5.5XML DSL82
第6章內(nèi)部DSL vs 外部DSL84
6.1學(xué)習(xí)曲線84
6.2創(chuàng)建成本85
6.3程序員的熟悉度85
6.4與領(lǐng)域?qū)<覝贤?6
6.5與宿主語言混合86
6.6強邊界87
6.7運行時配置87
6.8趨于平庸88
6.9組合多種DSL88
6.10總結(jié)89
第7章其他計算模型概述90
7.1幾種計算模型92
 7.1.1決策表92
 7.1.2產(chǎn)生式規(guī)則系統(tǒng)93
 7.1.3狀態(tài)機94
 7.1.4依賴網(wǎng)絡(luò)95
 7.1.5選擇模型95
第8章代碼生成96
8.1選擇生成什么96
8.2如何生成99
8.3混合生成代碼和手寫代碼100
8.4生成可讀的代碼101
8.5解析之前的代碼生成101
8.6延伸閱讀101
第9章語言工作臺102
9.1語言工作臺之要素102
9.2模式定義語言和元模型103
9.3源碼編輯和投射編輯107
9.4說明性編程109
9.5工具之旅110
9.6語言工作臺和CASE工具112
9.7我們該使用語言工作臺嗎112
第二部分 通 用 主 題
第10章各種DSL116
10.1Graphviz116
10.2JMock117
10.3CSS118
10.4HQL119
10.5XAML120
10.6FIT122
10.7Make等123
第11章語義模型125
11.1工作原理125
11.2使用場景127
11.3入門例子(Java)128
第12章符號表129
12.1工作原理129
12.2使用場景131
12.3參考文獻(xiàn)131
12.4以外部DSL實現(xiàn)的依賴網(wǎng)絡(luò)(Java和ANTLR)131
12.5在一個內(nèi)部DSL中使用符號鍵(Ruby)133
12.6用枚舉作為靜態(tài)類型符號(Java)134
第13章語境變量137
13.1工作原理137
13.2使用場景137
13.3讀取INI文件(C#)138
第14章構(gòu)造型生成器141
14.1工作原理141
14.2使用場景142
14.3構(gòu)建簡單的航班信息(C#)142
第15章宏144
15.1工作原理144
   15.1.1文本宏145
   15.1.2語法宏148
15.2使用場景151
第16章通知153
16.1工作原理153
16.2使用場景154
16.3一個非常簡單的通知(C#)154
16.4解析中的通知(Java)155
第三部分 外部DSL主題
第17章分隔符指導(dǎo)翻譯160
17.1工作原理160
17.2使用場景162
17.3??陀浄郑–#)163
   17.3.1 語義模型163
   17.3.2解析器165
17.4使用格蘭特小姐的控制器解析非自治語句(Java)168
第18章語法指導(dǎo)翻譯175
18.1工作原理175
   18.1.1詞法分析器176
   18.1.2語法分析器179
   18.1.3產(chǎn)生輸出181
   18.1.4語義預(yù)測181
18.2使用場景182
18.3參考文獻(xiàn)182
第19章BNF183
19.1工作原理183
   19.1.1多重性符號(Kleene運算符)184
   19.1.2其他一些有用的運算符186
   19.1.3解析表達(dá)式文法186
   19.1.4將EBNF轉(zhuǎn)換為基礎(chǔ)BNF187
   19.1.5行為代碼189
19.2使用場景191
第20章基于正則表達(dá)式表的詞法分析器192
20.1工作原理192
20.2使用場景193
20.3格蘭特小姐控制器的詞法處理(Java)194
第21章遞歸下降法語法解析器197
21.1工作原理197
21.2使用場景200
21.3參考文獻(xiàn)200
21.4遞歸下降和格蘭特小姐的控制器(Java)201
第22章解析器組合子205
22.1工作原理206
   22.1.1處理動作208
   22.1.2函數(shù)式風(fēng)格的組合子209
22.2使用場景209
22.3解析器組合子和格蘭特小姐的控制器(Java)210
第23章解析器生成器217
23.1工作原理217
23.2使用場景219
23.3Hello World(Java和ANTLR)219
   23.3.1編寫基本的文法220
   23.3.2構(gòu)建語法分析器221
   23.3.3為文法添加代碼動作223
   23.3.4使用代溝225
第24章樹的構(gòu)建227
24.1工作原理227
24.2使用場景229
24.3使用ANTLR的樹構(gòu)建語法(Java和ANTLR)230
   24.3.1標(biāo)記解釋230
   24.3.2解析231
   24.3.3組裝語義模型233
24.4使用代碼動作進(jìn)行樹的構(gòu)建(Java和ANTLR)236
第25章嵌入式語法翻譯242
25.1工作原理242
25.2使用場景243
25.3格蘭特小姐的控制器(Java和ANTLR)243
第26章內(nèi)嵌解釋器247
26.1工作原理247
26.2使用場景247
26.3計算器(ANTLR和Java)247
第27章外加代碼250
27.1工作原理250
27.2使用場景251
27.3嵌入動態(tài)代碼(ANTLR、Java和JavaScript)252
   27.3.1語義模型252
   27.3.2語法分析器254
第28章可變分詞方式258
28.1工作原理258
   28.1.1字符引用259
   28.1.2詞法狀態(tài)261
   28.1.3修改標(biāo)記類型262
   28.1.4忽略標(biāo)記類型263
28.2使用場景264
第29章嵌套的運算符表達(dá)式265
29.1工作原理265
   29.1.1使用自底向上的語法分析器265
   29.1.2自頂向下的語法分析器266
29.2使用場景268
第30章以換行符作為分隔符269
30.1工作原理269
30.2使用場景271
第31章外部DSL拾遺272
31.1語法縮進(jìn)272
31.2模塊化文法274
第四部分 內(nèi)部DSL主題
第32章表達(dá)式生成器276
32.1工作原理276
32.2使用場景277
32.3具有和沒有生成器的連貫日歷(Java)278
32.4對于日歷使用多個生成器(Java)280
第33章函數(shù)序列282
33.1工作原理282
33.2使用場景283
33.3簡單的計算機配置(Java)283
第34章嵌套函數(shù)286
34.1工作原理286
34.2使用場景287
34.3簡單計算機配置范例(Java)288
34.4用標(biāo)記處理多個不同的參數(shù)(C#)289
34.5針對IDE支持使用子類型標(biāo)記(Java)291
34.6使用對象初始化器(C#)292
34.7周期性事件(C#)293
   34.7.1語義模型294
   34.7.2DSL296
第35章方法級聯(lián)299
35.1工作原理299
  35.1.1生成器還是值300
  35.1.2收尾問題301
  35.1.3分層結(jié)構(gòu)301
  35.1.4漸進(jìn)式接口302
35.2使用場景303
35.3簡單的計算機配置范例(Java)303
35.4帶有屬性的方法級聯(lián)(C#)306
35.5漸進(jìn)式接口(C#)307
第36章對象范圍309
36.1工作原理309
36.2使用場景310
36.3安全代碼(C#)310
36.3.1 語義模型311
36.3.2DSL313
36.4使用實例求值(Ruby)315
36.5使用實例初始化器(Java)317
第37章閉包319
37.1工作原理319
37.2使用場景323
第38章嵌套閉包324
38.1工作原理324
38.2使用場景325
38.3用嵌套閉包來包裝函數(shù)序列(Ruby)326
38.4簡單的C#示例(C#)327
38.5使用方法級聯(lián)(Ruby)328
38.6帶顯式閉包參數(shù)的函數(shù)序列(Ruby)330
38.7采用實例級求值(Ruby)332
第39章列表的字面構(gòu)造335
39.1工作原理335
39.2使用場景335
第40章Literal Map336
40.1工作原理336
40.2使用場景336
40.3使用List和Map表達(dá)計算機的配置信息(Ruby)337
40.4演化為Greenspun式(Ruby)338
第41章動態(tài)接收342
41.1工作原理342
41.2使用場景343
41.3積分——使用方法名解析(Ruby)344
   41.3.1模型345
   41.3.2生成器347
41.4積分——使用方法級聯(lián)(Ruby)348
   41.4.1模型349
   41.4.2生成器349
41.5去掉安全儀表盤控制器中的引用(JRuby)351
第42章標(biāo)注357
42.1工作原理357
   42.1.1定義標(biāo)注358
   42.1.2處理標(biāo)注359
42.2使用場景360
42.3用于運行時處理的特定語法(Java)360
42.4使用類方法(Ruby)362
42.5動態(tài)代碼生成(Ruby)363
第43章解析樹操作365
43.1工作原理365
43.2使用場景366
43.3由C#條件生成IMAP查詢(C#)367
   43.3.1語義模型367
   43.3.2以C#構(gòu)建369
   43.3.3退后一步373
第44章類符號表375
44.1 工作原理375
44.2使用場景376
44.3在靜態(tài)類型中實現(xiàn)類符號表(Java)377
第45章文本潤色383
45.1工作原理383
45.2使用場景383
45.3使用潤色的折扣規(guī)則(Ruby)384
第46章為字面量提供擴展386
46.1工作原理386
46.2使用場景387
46.3食譜配料(C#)387
第五部分 其他計算模型
第47章適應(yīng)性模型390
47.1工作原理390
   47.1.1在適應(yīng)性模型中使用命令式代碼391
   47.1.2工具393
47.2使用場景394
第48章決策表395
48.1工作原理395
48.2使用場景396
48.3為一個訂單計算費用(C#)396
   48.3.1模型397
   48.3.2解析器400
第49章依賴網(wǎng)絡(luò)403
49.1工作原理403
49.2使用場景405
49.3分析飲料(C#)405
   49.3.1語義模型406
   49.3.2解析器407
第50章產(chǎn)生式規(guī)則系統(tǒng)409
50.1工作原理409
   50.1.1鏈?zhǔn)讲僮?10
   50.1.2矛盾推導(dǎo)411
   50.1.3規(guī)則結(jié)構(gòu)里的模式412
50.2使用場景412
50.3俱樂部會員校驗(C#)412
   50.3.1模型413
   50.3.2解析器414
   50.3.3演進(jìn)DSL414
50.4適任資格的規(guī)則:擴展俱樂部成員(C#)416
   50.4.1模型417
   50.4.2解析器419
第51章狀態(tài)機421
51.1工作原理421
51.2使用場景423
51.3安全面板控制器(Java)423
第六部分 代 碼 生 成
第52章基于轉(zhuǎn)換器的代碼生成426
52.1工作原理426
52.2使用場景427
52.3安全面板控制器(Java生成的C)427
第53章模板化的生成器431
53.1工作原理431
53.2使用場景432
53.3生成帶有嵌套條件的安全控制面板狀態(tài)機(Velocity和Java生成的C)432
第54章嵌入助手438
54.1工作原理438
54.2使用場景439
54.3安全控制面板的狀態(tài)(Java和ANTLR)439
54.4助手類應(yīng)該生成HTML嗎(Java和Velocity)442
第55章基于模型的代碼生成444
55.1工作原理444
55.2使用場景445
55.3安全控制面板的狀態(tài)機(C)445
55.4動態(tài)載入狀態(tài)機(C)451
第56章無視模型的代碼生成454
56.1工作原理454
56.2使用場景455
56.3使用嵌套條件的安全面板狀態(tài)機(C)455
第57章代溝457
57.1工作原理457
57.2使用場景458
57.3根據(jù)數(shù)據(jù)結(jié)構(gòu)生成類(Java和一些Ruby)459
參考文獻(xiàn)463

本目錄推薦

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