您现在的位置:e-works > 百味书屋 > 书籍列表 > 领域特定语言

领域特定语言

查看您的阅读历史
领域特定语言
  • 类别:
    基础信息化
    | 关键字:
    代码 软件设计 DSL 
  • 全书共57章,分为六个部分:第一部分介绍了什么是DSL,DSL的用途,如何实现外部DS和内部DSL,如何生成代码,语言工作台的使用方法;第二部分介绍了各种DSL,分别讲述了语义模型、符号表、语境变量、构造型生成器、宏和通知的工作原理和使用场景;第三部分分别揭示分隔符指导翻译、语法指导翻译、BNF、易于正则表达式表的词法分析器、递归下降法词法分析器、解析器组合子、解析器生成器、树的构建、嵌入式语法翻译、内嵌解释器、外加代码等;第四部分介绍了表达式生成器、函数序列、嵌套函数、方法级联、对象范围、闭包、嵌套闭包、标注、解析数操作、类符号表、文本润色、字面量扩展的工作原理和使用场景;第五部分介绍了适应性模型、决策表、依赖网络、产生式规则系统、状态机等计算模型的工作原理和使用场景;第六部分介绍了基于转换器的代码生成、模板化的生成器、嵌入助手、基于模型的代码生成、无视模型的代码生成和代沟等内容。
  • 作者:
    Martin Fowler
    出版社:
    华章出版社
    出版时间:
    2013年3月
    定价:
    ¥89.00
    京东价:¥60.60
    版权说明:
    授权连载 不得转载
作者简介
Martin Fowler,世界级软件开发大师,软件开发“教父”,敏捷开发方法的创始人之一,在面向对象分析与设计、UML、模式、极限编程、重构和DSL等领域都有非常深入的研究并为软件开发行业做出了卓越贡献。他乐于分享,撰写了《企业应用架构模式》(荣获第13届Jolt生产力大奖)、《重构:改善既有代码的设计》、《分析模式:可复用的对象模型》、《UML精粹:标准对象建模语言简明指南》等在软件开发领域颇负盛名的著作。

1第1章 入门例子

落笔之初,我需要快速地解释一下本书的内容,就是解释什么是领域特定语言(Domain–Specific Language,DSL)。为达此目的,我一般都会先展示一个具体的例子,随后再给出抽象的定义。因此,我会从一个例子开始,展示DSL可以采用的不同形式。

2第2章 使用DSL

看过上一章的例子后,即便尚未给出DSL的一般定义,对于何为DSL,你也应该已经有了自己的认识。(第10章中有更多例子。)现在,要开始讨论DSL的定义及其优势与问题。这样就可以为下一章讨论DSL实现提供一些上下文。

3第3章 实现DSL

至此,对于什么是DSL,以及为何要用DSL,我们已经透彻理解。如果要开始构建DSL,那么现在该深入研究所用的技术了。虽然构建内部DSL和外部DSL所用的技术有所不同,但它们还是有一些共通之处的。本章主要关注内部DSL和外部DSL的一些共通问题,而下一章再讨论各自具体的问题。

4第4章 实现内部DSL

  • 第一节 4.1连贯API与命令–查询
  • 第二节 4.2解析层的需求
  • 第三节 4.3使用函数
  • 第四节 4.4字面量集合
  • 第五节 4.5基于文法选择内部元素
  • 第六节 4.6闭包
  • 第七节 4.7解析树操作
  • 第八节 4.8标注
  • 第九节 4.9为字面量提供扩展
  • 第一十零节 4.10消除语法噪音
  • 第一十一节 4.11动态接收
  • 第一十二节 4.12提供类型检查

5第5章 实现外部DSL

  • 第一节 5.1语法分析策略
  • 第二节 5.2输出生成策略
  • 第三节 5.3解析中的概念
  • 第四节 5.4混入另一种语言
  • 第五节 5.5XML DSL

6第6章 内部DSL vs 外部DSL

  • 第一节 6.1学习曲线
  • 第二节 6.2创建成本
  • 第三节 6.3程序员的熟悉度
  • 第四节 6.4与领域专家沟通
  • 第五节 6.5与宿主语言混合
  • 第六节 6.6强边界
  • 第七节 6.7运行时配置
  • 第八节 6.8趋于平庸
  • 第九节 6.9组合多种
  • 第一十零节 6.10总结

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

  • 第一节 7.1几种计算模型

8第8章 代码生成

  • 第一节 8.1选择生成什么
  • 第二节 8.2如何生成
  • 第三节 8.3混合生成代码和手写代码
  • 第四节 8.4生成可读的代码
  • 第五节 8.5解析之前的代码生成
  • 第六节 8.6延伸阅读

9第9章 语言工作台

  • 第一节 9.1语言工作台之要素
  • 第二节 9.2模式定义语言和元模型
  • 第三节 9.3源码编辑和投射编辑
  • 第四节 9.4说明性编程
  • 第五节 9.5工具之旅
  • 第六节 9.6语言工作台和CASE工具
  • 第七节 9.7我们该使用语言工作台吗

10第10章 各种DSL

  • 第一节 10.1Graphviz
  • 第二节 10.2JMock
  • 第三节 10.3CSS
  • 第四节 10.4HQL
  • 第五节 10.5XAML
  • 第六节 10.6FIT
  • 第七节 10.7Make等

11第11章 语义模型

  • 第一节 11.1工作原理
  • 第二节 11.2使用场景
  • 第三节 11.3入门例子(Java)

12第12章 符号表

  • 第一节 12.1工作原理
  • 第二节 12.2使用场景
  • 第三节 12.3参考文献
  • 第四节 12.4以外部DSL实现的依赖网络(Java和ANTLR)
  • 第五节 12.5在一个内部DSL中使用符号键(Ruby)
  • 第六节 12.6用枚举作为静态类型符号(Java)

13第13章 语境变量

  • 第一节 13.1工作原理
  • 第二节 13.2使用场景
  • 第三节 13.3读取INI文件(C#)

14第14章 构造型生成器

  • 第一节 14.1工作原理
  • 第二节 14.2使用场景
  • 第三节 14.3构建简单的航班信息

15第15章 宏

  • 第一节 15.1工作原理
  • 第二节 15.2使用场景

16第16章 通知

  • 第一节 16.1工作原理
  • 第二节 16.2使用场景
  • 第三节 16.3一个非常简单的通知(C#)
  • 第四节 16.4解析中的通知(Java)

17第17章 分隔符指导翻译

  • 第一节 17.1工作原理
  • 第二节 17.2使用场景
  • 第三节 17.3常客记分(C#)
  • 第四节 17.4使用格兰特小姐的控制器解析非自治语句(Java)

18第18章 语法指导翻译

  • 第一节 18.1工作原理
  • 第二节 18.2使用场景
  • 第三节 18.3参考文献

19第19章 BNF

  • 第一节 19.1工作原理
  • 第二节 19.2使用场景

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

  • 第一节 20.1工作原理
  • 第二节 20.2使用场景
  • 第三节 20.3格兰特小姐控制器的词法处理(Java)

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

  • 第一节 21.1工作原理
  • 第二节 21.2使用场景
  • 第三节 21.3参考文献
  • 第四节 21.4递归下降和格兰特小姐的控制器(Java)

22第22章 解析器组合子

  • 第一节 22.1工作原理
  • 第二节 22.2使用场景
  • 第三节 22.3解析器组合子和格兰特小姐的控制器(Java)

23第23章 解析器生成器

  • 第一节 23.1工作原理
  • 第二节 23.2使用场景
  • 第三节 23.3Hello World(Java和ANTLR)

24第24章 树的构建

  • 第一节 24.1工作原理
  • 第二节 24.2使用场景
  • 第三节 24.3使用ANTLR的树构建语法(Java和ANTLR)
  • 第四节 24.4使用代码动作进行树的构建(Java和ANTLR)

25第25章 嵌入式语法翻译

  • 第一节 25.1工作原理
  • 第二节 25.2使用场景
  • 第三节 25.3格兰特小姐的控制器(Java和ANTLR)

26第26章 内嵌解释器

  • 第一节 26.1工作原理
  • 第二节 26.2使用场景
  • 第三节 26.3计算器(ANTLR和Java)

27第27章 外加代码

  • 第一节 27.1工作原理
  • 第二节 27.2使用场景
  • 第三节 27.3嵌入动态代码(ANTLR、Java和JavaScript)

28第28章 可变分词方式

  • 第一节 28.1工作原理
  • 第二节 28.2使用场景

29第29章 嵌套的运算符表达式

  • 第一节 29.1工作原理
  • 第二节 29.2使用场景

30第30章 以换行符作为分隔符

  • 第一节 30.1工作原理
  • 第二节 30.2使用场景

31第31章 外部DSL拾遗

  • 第一节 31.1语法缩进
  • 第二节 31.2模块化文法

32第32章 表达式生成器

  • 第一节 32.1工作原理
  • 第二节 32.2使用场景
  • 第三节 32.3具有和没有生成器的连贯日历(Java)
  • 第四节 32.4对于日历使用多个生成器(Java)

33第33 章函数序列

  • 第一节 33.1工作原理
  • 第二节 33.2使用场景
  • 第三节 33.3简单的计算机配置(Java)

34第34章 嵌套函数

  • 第一节 34.1工作原理
  • 第二节 34.2使用场景
  • 第三节 34.3简单计算机配置范例(Java)
  • 第四节 34.4用标记处理多个不同的参数(C#)
  • 第五节 34.5针对IDE支持使用子类型标记(Java)
  • 第六节 34.6使用对象初始化器(C#)
  • 第七节 34.7周期性事件(C#)

35第35章 方法级联

  • 第一节 35.1工作原理
  • 第二节 35.2使用场景
  • 第三节 35.3简单的计算机配置范例(Java)
  • 第四节 35.4带有属性的方法级联(C#)
  • 第五节 35.5渐进式接口(C#)

36第36章 对象范围

  • 第一节 36.1工作原理
  • 第二节 36.2使用场景
  • 第三节 36.3安全代码(C#)
  • 第四节 36.4使用实例求值(Ruby)
  • 第五节 36.5使用实例初始化器(Java)

37第37章 闭包

  • 第一节 37.1工作原理
  • 第二节 37.2使用场景

38第38章 嵌套闭包

  • 第一节 38.1工作原理
  • 第二节 38.2使用场景
  • 第三节 38.3用嵌套闭包来包装函数序列(Ruby)
  • 第四节 38.4简单的C#示例(C#)
  • 第五节 38.5使用方法级联(Ruby)
  • 第六节 38.6带显式闭包参数的函数序列(Ruby)
  • 第七节 38.7采用实例级求值(Ruby)

39第39章 列表的字面构造

  • 第一节 39.1工作原理
  • 第二节 39.2使用场景

40第40章 Literal Map

  • 第一节 40.1工作原理
  • 第二节 40.2使用场景
  • 第三节 40.3使用List和Map表达计算机的配置信息(Ruby)
  • 第四节 40.4演化为Greenspun式(Ruby)

41第41章 动态接收

  • 第一节 41.1工作原理
  • 第二节 41.2使用场景
  • 第三节 41.3积分——使用方法名解析(Ruby)
  • 第四节 41.4积分——使用方法级联(Ruby)
  • 第五节 41.5去掉安全仪表盘控制器中的引用(JRuby)

42第42章 标注

  • 第一节 42.1工作原理
  • 第二节 42.2使用场景
  • 第三节 42.3用于运行时处理的特定语法(Java)
  • 第四节 42.4使用类方法(Ruby)
  • 第五节 42.5动态代码生成(Ruby)

43第43章 解析树操作

  • 第一节 43.1工作原理
  • 第二节 43.2使用场景
  • 第三节 43.3由C#条件生成IMAP查询(C#)

44第44章 类符号表

  • 第一节 44.1 工作原理
  • 第二节 44.2使用场景
  • 第三节 44.3在静态类型中实现类符号表(Java)

45第45章 文本润色

  • 第一节 45.1工作原理
  • 第二节 45.2使用场景
  • 第三节 45.3使用润色的折扣规则(Ruby)

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

  • 第一节 46.1工作原理
  • 第二节 46.2使用场景
  • 第三节 46.3食谱配料(C#)

47第47章 适应性模型

  • 第一节 47.1工作原理
  • 第二节 47.2使用场景

48第48章 决策表

  • 第一节 48.1工作原理
  • 第二节 48.2使用场景
  • 第三节 48.3为一个订单计算费用(C#)

49第49章 依赖网络

  • 第一节 49.1工作原理
  • 第二节 49.2使用场景
  • 第三节 49.3分析饮料(C#)

50第50章 产生式规则系统

  • 第一节 50.1工作原理
  • 第二节 50.2使用场景
  • 第三节 50.3俱乐部会员校验(C#)
  • 第四节 50.4适任资格的规则:扩展俱乐部成员(C#)

51第51章 状态机

  • 第一节 51.1工作原理
  • 第二节 51.2使用场景
  • 第三节 51.3安全面板控制器(Java)

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

  • 第一节 52.1工作原理
  • 第二节 52.2使用场景
  • 第三节 52.3安全面板控制器(Java生成的C)

53第53章 模板化的生成器

  • 第一节 53.1工作原理
  • 第二节 53.2使用场景
  • 第三节 53.3生成带有嵌套条件的安全控制面板状态机(Velocity和Java生成的C)

54第54章 嵌入助手

  • 第一节 54.1工作原理
  • 第二节 54.2使用场景
  • 第三节 54.3安全控制面板的状态(Java和ANTLR)
  • 第四节 54.4助手类应该生成HTML吗(Java和Velocity)

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

  • 第一节 55.1工作原理
  • 第二节 55.2使用场景
  • 第三节 55.3安全控制面板的状态机(C)
  • 第四节 55.4动态载入状态机(C)

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

  • 第一节 56.1工作原理
  • 第二节 56.2使用场景
  • 第三节 56.3使用嵌套条件的安全面板状态机(C)

57第57章 代沟

  • 第一节 57.1工作原理
  • 第二节 57.2使用场景
  • 第三节 57.3根据数据结构生成类(Java和一些Ruby)