图书介绍

领域特定语言【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

领域特定语言
  • (英)MartinFowler著;ThoughtWorks中国译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111413059
  • 出版时间:2013
  • 标注页数:464页
  • 文件大小:85MB
  • 文件页数:490页
  • 主题词:程序语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

领域特定语言PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 叙述2

第1章 入门例子2

1.1 哥特式建筑安全系统2

1.2 状态机模型4

1.3 为格兰特小姐的控制器编写程序7

1.4 语言和语义模型13

1.5 使用代码生成15

1.6 使用语言工作台17

1.7 可视化20

第2章 使用DSL21

2.1 定义DSL21

2.1.1 DSL的边界22

2.1.2 片段DSL和独立DSL25

2.2 为何需要DSL25

2.2.1 提高开发效率26

2.2.2 与领域专家的沟通26

2.2.3 执行环境的改变27

2.2.4 其他计算模型28

2.3 DSL的问题28

2.3.1 语言噪音29

2.3.2 构建成本29

2.3.3 集中营语言30

2.3.4 “一叶障目”的抽象30

2.4 广义的语言处理31

2.5 DSL的生命周期31

2.6 设计优良的DSL从何而来32

第3章 实现DSL34

3.1 DSL处理之架构34

3.2 解析器的工作方式37

3.3 文法、语法和语义39

3.4 解析中的数据39

3.5 宏41

3.6 测试DSL42

3.6.1 语义模型的测试42

3.6.2 解析器的测试45

3.6.3 脚本的测试49

3.7 错误处理50

3.8 DSL迁移51

第4章 实现内部DSL54

4.1 连贯API与命令-查询API54

4.2 解析层的需求57

4.3 使用函数58

4.4 字面量集合61

4.5 基于文法选择内部元素63

4.6 闭包64

4.7 解析树操作66

4.8 标注67

4.9 为字面量提供扩展69

4.10 消除语法噪音69

4.11 动态接收69

4.12 提供类型检查70

第5章 实现外部DSL72

5.1 语法分析策略72

5.2 输出生成策略74

5.3 解析中的概念76

5.3.1 单独的词法分析76

5.3.2 文法和语言77

5.3.3 正则文法、上下文无关文法和上下文相关文法77

5.3.4 自顶向下解析和自底向上解析79

5.4 混入另一种语言81

5.5 XML DSL82

第6章 内部DSL vs外部DSL84

6.1 学习曲线84

6.2 创建成本85

6.3 程序员的熟悉度85

6.4 与领域专家沟通86

6.5 与宿主语言混合86

6.6 强边界87

6.7 运行时配置87

6.8 趋于平庸88

6.9 组合多种DSL88

6.10 总结89

第7章 其他计算模型概述90

7.1 几种计算模型92

7.1.1 决策表92

7.1.2 产生式规则系统93

7.1.3 状态机94

7.1.4 依赖网络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

第二部分 通用主题116

第10章 各种DSL116

10.1 Graphviz116

10.2 JMock117

10.3 CSS118

10.4 HQL119

10.5 XAML120

10.6 FIT122

10.7 Make等123

第11章 语义模型125

11.1 工作原理125

11.2 使用场景127

11.3 入门例子(Java)128

第12章 符号表129

12.1 工作原理129

12.2 使用场景131

12.3 参考文献131

12.4 以外部DSL实现的依赖网络(Java和ANTLR)131

12.5 在一个内部DSL中使用符号键(Ruby)133

12.6 用枚举作为静态类型符号(Java)134

第13章 语境变量137

13.1 工作原理137

13.2 使用场景137

13.3 读取INI文件(C#)138

第14章 构造型生成器141

14.1 工作原理141

14.2 使用场景142

14.3 构建简单的航班信息(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主题160

第17章 分隔符指导翻译160

17.1 工作原理160

17.2 使用场景162

17.3 常客记分(C#)163

17.3.1 语义模型163

17.3.2 解析器165

17.4 使用格兰特小姐的控制器解析非自治语句(Java)168

第18章 语法指导翻译175

18.1 工作原理175

18.1.1 词法分析器176

18.1.2 语法分析器179

18.1.3 产生输出181

18.1.4 语义预测181

18.2 使用场景182

18.3 参考文献182

第19章 BNF183

19.1 工作原理183

19.1.1 多重性符号(Kleene运算符)184

19.1.2 其他一些有用的运算符186

19.1.3 解析表达式文法186

19.1.4 将EBNF转换为基础BNF187

19.1.5 行为代码189

19.2 使用场景191

第20章 基于正则表达式表的词法分析器192

20.1 工作原理192

20.2 使用场景193

20.3 格兰特小姐控制器的词法处理(Java)194

第21章 递归下降法语法解析器197

21.1 工作原理197

21.2 使用场景200

21.3 参考文献200

21.4 递归下降和格兰特小姐的控制器(Java)201

第22章 解析器组合子205

22.1 工作原理206

22.1.1 处理动作208

22.1.2 函数式风格的组合子209

22.2 使用场景209

22.3 解析器组合子和格兰特小姐的控制器(Java)210

第23章 解析器生成器217

23.1 工作原理217

23.2 使用场景219

23.3 Hello World(Java和ANTLR)219

23.3.1 编写基本的文法220

23.3.2 构建语法分析器221

23.3.3 为文法添加代码动作223

23.3.4 使用代沟225

第24章 树的构建227

24.1 工作原理227

24.2 使用场景229

24.3 使用ANTLR的树构建语法(Java和ANTLR)230

24.3.1 标记解释230

24.3.2 解析231

24.3.3 组装语义模型233

24.4 使用代码动作进行树的构建(Java和ANTLR)236

第25章 嵌入式语法翻译242

25.1 工作原理242

25.2 使用场景243

25.3 格兰特小姐的控制器(Java和ANTLR)243

第26章 内嵌解释器247

26.1 工作原理247

26.2 使用场景247

26.3 计算器(ANTLR和Java)247

第27章 外加代码250

27.1 工作原理250

27.2 使用场景251

27.3 嵌入动态代码(ANTLR、Java和JavaScript)252

27.3.1 语义模型252

27.3.2 语法分析器254

第28章 可变分词方式258

28.1 工作原理258

28.1.1 字符引用259

28.1.2 词法状态261

28.1.3 修改标记类型262

28.1.4 忽略标记类型263

28.2 使用场景264

第29章 嵌套的运算符表达式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 语法缩进272

31.2 模块化文法274

第四部分 内部DSL主题276

第32章 表达式生成器276

32.1 工作原理276

32.2 使用场景277

32.3 具有和没有生成器的连贯日历(Java)278

32.4 对于日历使用多个生成器(Java)280

第33章 函数序列282

33.1 工作原理282

33.2 使用场景283

33.3 简单的计算机配置(Java)283

第34章 嵌套函数286

34.1 工作原理286

34.2 使用场景287

34.3 简单计算机配置范例(Java)288

34.4 用标记处理多个不同的参数(C#)289

34.5 针对IDE支持使用子类型标记(Java)291

34.6 使用对象初始化器(C#)292

34.7 周期性事件(C#)293

34.7.1 语义模型294

34.7.2 DSL296

第35章 方法级联299

35.1 工作原理299

35.1.1 生成器还是值300

35.1.2 收尾问题301

35.1.3 分层结构301

35.1.4 渐进式接口302

35.2 使用场景303

35.3 简单的计算机配置范例(Java)303

35.4 带有属性的方法级联(C#)306

35.5 渐进式接口(C#)307

第36章 对象范围309

36.1 工作原理309

36.2 使用场景310

36.3 安全代码(C#)310

36.3.1 语义模型311

36.3.2 DSL313

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 用嵌套闭包来包装函数序列(Ruby)326

38.4 简单的C#示例(C#)327

38.5 使用方法级联(Ruby)328

38.6 带显式闭包参数的函数序列(Ruby)330

38.7 采用实例级求值(Ruby)332

第39章 列表的字面构造335

39.1 工作原理335

39.2 使用场景335

第40章 Literal Map336

40.1 工作原理336

40.2 使用场景336

40.3 使用List和Map表达计算机的配置信息(Ruby)337

40.4 演化为Greenspun式(Ruby)338

第41章 动态接收342

41.1 工作原理342

41.2 使用场景343

41.3 积分——使用方法名解析(Ruby)344

41.3.1 模型345

41.3.2 生成器347

41.4 积分——使用方法级联(Ruby)348

41.4.1 模型349

41.4.2 生成器349

41.5 去掉安全仪表盘控制器中的引用(JRuby)351

第42章 标注357

42.1 工作原理357

42.1.1 定义标注358

42.1.2 处理标注359

42.2 使用场景360

42.3 用于运行时处理的特定语法(Java)360

42.4 使用类方法(Ruby)362

42.5 动态代码生成(Ruby)363

第43章 解析树操作365

43.1 工作原理365

43.2 使用场景366

43.3 由C#条件生成IMAP查询(C#)367

43.3.1 语义模型367

43.3.2 以C#构建369

43.3.3 退后一步373

第44章 类符号表375

44.1 工作原理375

44.2 使用场景376

44.3 在静态类型中实现类符号表(Java)377

第45章 文本润色383

45.1 工作原理383

45.2 使用场景383

45.3 使用润色的折扣规则(Ruby)384

第46章 为字面量提供扩展386

46.1 工作原理386

46.2 使用场景387

46.3 食谱配料(C#)387

第五部分 其他计算模型390

第47章 适应性模型390

47.1 工作原理390

47.1.1 在适应性模型中使用命令式代码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章 依赖网络403

49.1 工作原理403

49.2 使用场景405

49.3 分析饮料(C#)405

49.3.1 语义模型406

49.3.2 解析器407

第50章 产生式规则系统409

50.1 工作原理409

50.1.1 链式操作410

50.1.2 矛盾推导411

50.1.3 规则结构里的模式412

50.2 使用场景412

50.3 俱乐部会员校验(C#)412

50.3.1 模型413

50.3.2 解析器414

50.3.3 演进DSL414

50.4 适任资格的规则:扩展俱乐部成员(C#)416

50.4.1 模型417

50.4.2 解析器419

第51章 状态机421

51.1 工作原理421

51.2 使用场景423

51.3 安全面板控制器(Java)423

第六部分 代码生成426

第52章 基于转换器的代码生成426

52.1 工作原理426

52.2 使用场景427

52.3 安全面板控制器(Java生成的C)427

第53章 模板化的生成器431

53.1 工作原理431

53.2 使用场景432

53.3 生成带有嵌套条件的安全控制面板状态机(Velocity和Java 生成的C)432

第54章 嵌入助手438

54.1 工作原理438

54.2 使用场景439

54.3 安全控制面板的状态(Java和ANTLR)439

54.4 助手类应该生成HTML吗(Java和Velocity)442

第55章 基于模型的代码生成444

55.1 工作原理444

55.2 使用场景445

55.3 安全控制面板的状态机(C)445

55.4 动态载入状态机(C)451

第56章 无视模型的代码生成454

56.1 工作原理454

56.2 使用场景455

56.3 使用嵌套条件的安全面板状态机(C)455

第57章 代沟457

57.1 工作原理457

57.2 使用场景458

57.3 根据数据结构生成类(Java和一些Ruby)459

参考文献463

热门推荐