领域特定语言pdf高清电子免费版
分享到:
领域特定语言是DSL领域的丰碑之作,由世界级软件开发大师和软件开发“教父”Martin.Fowler历时多年写作而成,ThoughtWorks中国翻译。全面详尽地讲解了各种DSL及其构造方式,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。当精心挑选和使用合适的语言时,DSL可以简化复杂的代码,促进与客户的有效沟通,提高工作效率,清楚发展瓶颈,小编推荐的这本领域特定语言共57章,分为六个部分:第一部分介绍了什么是DSL,DSL的用途,如何实现外部DS和内部DSL,如何生成代码,语言工作台的使用方法;第二部分介绍了各种DSL,分别讲述了语义模型、符号表、语境变量、构造型生成器、宏和通知的工作原理和使用场景;第三部分分别揭示分隔符指导翻译、语法指导翻译、BNF、易于正则表达式表的词法分析器、递归下降法词法分析器、解析器组合子、解析器生成器、树的构建、嵌入式语法翻译、内嵌解释器、外加代码等;第四部分介绍了表达式生成器、函数序列、嵌套函数、方法级联、对象范围、闭包、嵌套闭包、标注、解析数操作、类符号表、文本润色、字面量扩展的工作原理和使用场景;第五部分介绍了适应性模型、决策表、依赖网络、产生式规则系统、状态机等计算模型的工作原理和使用场景;第六部分介绍了基于转换器的代码生成、模板化的生成器、嵌入助手、基于模型的代码生成、无视模型的代码生成和代沟等内容。这本书的理想读者是那些正在思考构建DSL的职业软件程序员。感兴趣的朋友欢迎免费下载并阅读。
前言
部分 叙 述
章 入门例子
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和独立DSL2.2为何需要DSL
2.2.1 提高开发效率
2.2.2与煊蜃业墓低
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章 语义模型
......
第12章 符号表
......
第13章 语境变量
......
第14章 构造型生成器
......
第15章 宏......
第16章 通知
......
第三部分 外部DSL主题
第17章 分隔符指导翻译
......
第18章 语法指导翻译
......
第19章 BNF
......
第20章 基于正则表达式表的词法分析器
......
第21章 递归下降法语法解析器
......
第22章 解析器组合子
......
第23章 解析器生成器
......
第24章 树的构建
......
第25章 嵌入式语法翻译
......
第27章 外加代码
......
第28章 可变分词方式
......
第29章 嵌套的运算符表达式
......
第30章 以换行符作为分隔符
......
第31章 外部DSL拾遗
......
第四部分 内部DSL主题
第32章 表达式生成器
......
第33章 函数序列
......
第34章 嵌套函数
......
第35章 方法级联
......
第36章 对象范围
......
第37章 闭包
......
第38章 嵌套闭包
......
第39章 列表的字面构造
......
第40章 Literal Map
......
第41章 动态接收
......
第42章 标注
......
第43章 解析树操作
......
第44章 类符号表
......
第45章 文本润色
......
第46章 为字面量提供扩展
......
第五部分 其他计算模型
第47章 适应性模型
......
第48章 决策表
......
第49章 依赖网络
......
第50章 产生式规则系统
......
第51章 状态机
......
第六部分 代码生成
第52章 基于转换器的代码生成
......
第53章 模板化的生成器
......
第54章 嵌入助手
......
第55章 基于模型的代码生成
......
第56章 无视模型的代码生成
......
第57章 代沟
......
参考文献
2008年,老马(Martin.Fowler)在Agile.China上做主旨发言,题目就是领域特定语言(DomainSpecific.Language,DSL)。老马提携后辈,愿意跟我合作完成这个演讲。而我呢,一方面,年少轻狂认为这个领域我也算个中好手,另一方面,也感激老马的信任和厚爱,就答应了。当时我已经知道老马在写一本关于这个主题的书,便跟他讨要原文来看。当时还没有成型的稿子,只有非常简略的草稿和博客片段。
2010年年底,ThoughtWorks技术战略委员会(ThoughtWorks.Technology.AdvisorBoard)在芝加哥开会。那时候,这本书的英文原版已然出版。晚上聚餐的时候,我心血来潮,跟老马说如果有机会,希望能将这本书翻译成中文,介绍给中国的开发者。老马听了很高兴,把最终定稿的电子版访问权限授予了我。
几个月后,同事刀哥(李剑)问我有没有兴趣参加这本书的翻译,我说当然有。后来回想起来,我还是上了刀哥的当,因为突然之间我就从参与翻译变成负责翻译了。
由于我手里已经有原稿的缘故,因此我们没有采用出版社提供的Word版本,而是在英文原稿上直接翻译。原稿除了文字部分之外,还有几千行代码。其中包括XSTL、Ruby、C++、Java、图像处理脚本,甚至还有用于构建样书的rake脚本。惊讶之余,作为程序员的求知欲也被激发出来了。在动手翻译之前,我们花了两天彻底了解这些代码的作用。然后就发现了这个惊人的秘密:
这是一本用领域特定语言写就的关于领域特定语言的书。
原文的文字部分是老马在docbook基础上定义的领域特定语言。这种语言除了在docbook的基础结构上定义了章节模板之外,还有两个专用结构:patternRef和codeRef。
patternRef用于处理模式名称在不同章节中的引用。本书分为两部分,前面的概念讲述部分和后面的模式部分。它耗时3年写就,在草稿阶段模式名称都未确定,各章节之间交叉引用很多。一旦出现模式名称改变,更新同步成本就很高。为此,老马定义了专有的语言结构,patternRef。所有对于模式的引用,都通过patternRef实现。由patternRef解析处理应该使用那个具体的名称。
这个巧妙的做法在后来的翻译中给我们带来了很大的困扰。因为patternRef会处理英语中的单复数,而中文不会有这样的情况。翻译稿中出现了大量的s和es。最后还是通过修改DSL解析器里才解决了这个问题。
codeRef则表示代码引用。这本书属于技术领域,其中会有大量代码示例;同一份代码示例会在不同章节中引用,一旦写法变化,就需要同步检查它在上下文内是否还能起到示范作用。老马先在示范代码的源代码中通过注释加入XML标注,把代码分解成一段段可引用的例子。因为是代码注释,所以不会影响源代码的编译、调试和重构。然后,再通过codeRef,表明是哪个例子的哪段示例。最后,再通过Ruby和XSLT,摘取对应的代码段,生成相应的文本。
我一直认为在澄清概念和发现模式上老马是有超能力的。通常会忘记他也是个ThoughtWorker,而让做事情变得有趣,则是每个ThoughtWorker都有的超能力。
翻译这本书并不轻松,其中很多概念中文并无定译。为了呈现最好的结果,我们成立了一个翻译小组,包括熊节、郑烨、李剑、张凯峰、金明等有较多翻译经验的ThoughtWorker悉数在内。虽然如此,仍然难免疏漏,望读者不吝斧正。
徐昊
ThoughtWorks中国
……
1、下载并解压,得出pdf文件
2、如果打不开本文件,别着急,这时候请务必在3322软件站选择一款阅读器下载哦
3、安装后,再打开解压得出的pdf文件
4、以上都完成后,接下来双击进行阅读就可以啦,朋友们开启你们的阅读之旅吧。
方法二:
1、可以在手机里下载3322软件站中的阅读器和百度网盘
2、接下来直接将pdf传输到百度网盘
3、用阅读器打开即可阅读
禁用于商业用途!如果您喜欢《领域特定语言》,请购买正版,谢谢合作。
爱学习,请到3322软件站查找资源自行下载!
作者介绍:
Martin.Fowler软件开发大师,软件开发“教父”,敏捷开发方法的创始人之一,在面向对象分析与设计、UML、模式、极限编程、重构和DSL等领域都有非常深入的研究并为软件开发行业做出了卓越贡献。他乐于分享,撰写了《企业应用架构模式》(荣获第13届Jolt生产力大奖)、《重构:改善既有代码的设计》、《分析模式:可复用的对象模型》、《UML精粹:标准对象建模语言简明指南》等在软件开发领域颇负盛名的著作。领域特定语言目录:
译者序前言
部分 叙 述
章 入门例子
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和独立DSL2.2为何需要DSL
2.2.1 提高开发效率
2.2.2与煊蜃业墓低
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章 语义模型
......
第12章 符号表
......
第13章 语境变量
......
第14章 构造型生成器
......
第15章 宏......
第16章 通知
......
第三部分 外部DSL主题
第17章 分隔符指导翻译
......
第18章 语法指导翻译
......
第19章 BNF
......
第20章 基于正则表达式表的词法分析器
......
第21章 递归下降法语法解析器
......
第22章 解析器组合子
......
第23章 解析器生成器
......
第24章 树的构建
......
第25章 嵌入式语法翻译
......
第27章 外加代码
......
第28章 可变分词方式
......
第29章 嵌套的运算符表达式
......
第30章 以换行符作为分隔符
......
第31章 外部DSL拾遗
......
第四部分 内部DSL主题
第32章 表达式生成器
......
第33章 函数序列
......
第34章 嵌套函数
......
第35章 方法级联
......
第36章 对象范围
......
第37章 闭包
......
第38章 嵌套闭包
......
第39章 列表的字面构造
......
第40章 Literal Map
......
第41章 动态接收
......
第42章 标注
......
第43章 解析树操作
......
第44章 类符号表
......
第45章 文本润色
......
第46章 为字面量提供扩展
......
第五部分 其他计算模型
第47章 适应性模型
......
第48章 决策表
......
第49章 依赖网络
......
第50章 产生式规则系统
......
第51章 状态机
......
第六部分 代码生成
第52章 基于转换器的代码生成
......
第53章 模板化的生成器
......
第54章 嵌入助手
......
第55章 基于模型的代码生成
......
第56章 无视模型的代码生成
......
第57章 代沟
......
参考文献
精彩书摘:
......2008年,老马(Martin.Fowler)在Agile.China上做主旨发言,题目就是领域特定语言(DomainSpecific.Language,DSL)。老马提携后辈,愿意跟我合作完成这个演讲。而我呢,一方面,年少轻狂认为这个领域我也算个中好手,另一方面,也感激老马的信任和厚爱,就答应了。当时我已经知道老马在写一本关于这个主题的书,便跟他讨要原文来看。当时还没有成型的稿子,只有非常简略的草稿和博客片段。
2010年年底,ThoughtWorks技术战略委员会(ThoughtWorks.Technology.AdvisorBoard)在芝加哥开会。那时候,这本书的英文原版已然出版。晚上聚餐的时候,我心血来潮,跟老马说如果有机会,希望能将这本书翻译成中文,介绍给中国的开发者。老马听了很高兴,把最终定稿的电子版访问权限授予了我。
几个月后,同事刀哥(李剑)问我有没有兴趣参加这本书的翻译,我说当然有。后来回想起来,我还是上了刀哥的当,因为突然之间我就从参与翻译变成负责翻译了。
由于我手里已经有原稿的缘故,因此我们没有采用出版社提供的Word版本,而是在英文原稿上直接翻译。原稿除了文字部分之外,还有几千行代码。其中包括XSTL、Ruby、C++、Java、图像处理脚本,甚至还有用于构建样书的rake脚本。惊讶之余,作为程序员的求知欲也被激发出来了。在动手翻译之前,我们花了两天彻底了解这些代码的作用。然后就发现了这个惊人的秘密:
这是一本用领域特定语言写就的关于领域特定语言的书。
原文的文字部分是老马在docbook基础上定义的领域特定语言。这种语言除了在docbook的基础结构上定义了章节模板之外,还有两个专用结构:patternRef和codeRef。
patternRef用于处理模式名称在不同章节中的引用。本书分为两部分,前面的概念讲述部分和后面的模式部分。它耗时3年写就,在草稿阶段模式名称都未确定,各章节之间交叉引用很多。一旦出现模式名称改变,更新同步成本就很高。为此,老马定义了专有的语言结构,patternRef。所有对于模式的引用,都通过patternRef实现。由patternRef解析处理应该使用那个具体的名称。
这个巧妙的做法在后来的翻译中给我们带来了很大的困扰。因为patternRef会处理英语中的单复数,而中文不会有这样的情况。翻译稿中出现了大量的s和es。最后还是通过修改DSL解析器里才解决了这个问题。
codeRef则表示代码引用。这本书属于技术领域,其中会有大量代码示例;同一份代码示例会在不同章节中引用,一旦写法变化,就需要同步检查它在上下文内是否还能起到示范作用。老马先在示范代码的源代码中通过注释加入XML标注,把代码分解成一段段可引用的例子。因为是代码注释,所以不会影响源代码的编译、调试和重构。然后,再通过codeRef,表明是哪个例子的哪段示例。最后,再通过Ruby和XSLT,摘取对应的代码段,生成相应的文本。
我一直认为在澄清概念和发现模式上老马是有超能力的。通常会忘记他也是个ThoughtWorker,而让做事情变得有趣,则是每个ThoughtWorker都有的超能力。
翻译这本书并不轻松,其中很多概念中文并无定译。为了呈现最好的结果,我们成立了一个翻译小组,包括熊节、郑烨、李剑、张凯峰、金明等有较多翻译经验的ThoughtWorker悉数在内。虽然如此,仍然难免疏漏,望读者不吝斧正。
徐昊
ThoughtWorks中国
……
下载说明:
方法一:1、下载并解压,得出pdf文件
2、如果打不开本文件,别着急,这时候请务必在3322软件站选择一款阅读器下载哦
3、安装后,再打开解压得出的pdf文件
4、以上都完成后,接下来双击进行阅读就可以啦,朋友们开启你们的阅读之旅吧。
方法二:
1、可以在手机里下载3322软件站中的阅读器和百度网盘
2、接下来直接将pdf传输到百度网盘
3、用阅读器打开即可阅读
免责声明:
来源于网络,仅用于分享知识,学习和交流!请下载完在24小时内删除。禁用于商业用途!如果您喜欢《领域特定语言》,请购买正版,谢谢合作。
爱学习,请到3322软件站查找资源自行下载!
展开更多
领域特定语言pdf高清电子免费版下载地址
- 需先下载高速下载器:
- 专用下载:
- 其它下载: