领域特定语言这要书是专业性十分强的,非常适合有经验的开发者,由世界级软件开发大师和软件开发“教父”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官方手机版