欢迎来到 博文网 官方网站!
领域特定语言+2

领域特定语言+2

内容简介《领域特定语言》是领域

联系电话: 13983470003
产品详情

内容简介

《领域特定语言》是领域特定语言(Domain-Specific Language,DSL)领域的丰碑之作,由软件开发大师马丁·福勒(Martin Fowler)历时多年写作而成。 全书共57章,分为6个部分,介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。 本书适合想要了解各种DSL及其构造方式,理解其通用原则、模式和适用场景,以提高开发生产力和沟通能力的软件开发人员阅读。

目录

第 一部分 叙述第 1章 入门示例 21.1 古堡系统 21.2 状态机模型 41.3 为格兰特女士的控制器编程 71.4 语言和语义模型 131.5 使用代码生成 151.6 使用语言工作台 171.7 可视化 19第 2章 使用DSL 212.1 定义DSL 212.1.1 DSL的边界 222.1.2 片段DSL和独立DSL 252.2 为何使用DSL 252.2.1 提率 262.2.2 与领域专家沟通 262.2.3 改变执行环境 272.2.4 备选计算模型 282.3 DSL的问题 282.3.1 语言噪声 292.3.2 构建成本 292.3.3 集中营语言 302.3.4 狭隘的抽象 302.4 广义的语言处理 312.5 DSL的生命周期 312.6 设计优良的DSL从何而来 33第3章 实现DSL 343.1 DSL处理的架构 343.2 语法分析器的工作方式 373.3 文法、语法和语义 393.4 语法分析中的数据 393.5 宏 413.6 DSL的测试 423.6.1 语义模型的测试 423.6.2 语法分析器的测试 463.6.3 脚本的测试 493.7 错误处理 503.8 DSL的迁移 51第4章 实现内部DSL 534.1 连贯API和命令查询API 534.2 对语法分析层的需要 564.3 使用函数 574.4 字面量集合 614.5 基于文法选择内部元素 624.6 634.7 语法分析树操作 654.8 注解 664.9 字面量扩展 674.10 降低语法噪声 684.11 动态接收 684.12 提供类型检查 69第5章 实现外部DSL 715.1 语法分析策略 715.2 输出生成策略 745.3 解析中的概念 755.3.1 单独的词法分析 755.3.2 文法和语言 765.3.3 正则文法、上下文无关文法和上下文相关文法 775.3.4 自顶向下解析和自底向上解析 785.4 混入另一种语言 805.5 XML DSL 81第6章 在内部DSL和外部DSL之间做选择 836.1 学 836.2 构建成本 846.3 程序员的熟悉度 856.4 与领域专家沟通 856.5 与宿主语言混合 856.6 表达强边界 866.7 运行时配置 866.8 趋于通用 876.9 组合多种DSL 876.10 小结 88第7章 备选计算模型 897.1 决策表 917.2 产生式规则系统 927.3 状态机 937.4 依赖网络 947.5 选择模型 94第8章 代码生成 958.1 选择生成什么 968.2 如何生成 988.3 混合生成的代码和手写代码 998.4 生成可读的代码 1008.5 语法分析前的代码生成 1008.6 延伸阅读 101第9章 语言工作台 1029.1 语言工作台的要素 1029.2 模式定义语言和元模型 1039.3 源编辑和投射编辑 1079.4 说明编程 1099.5 工具之旅 1109.6 语言工作台和CASE工具 1119.7 是否应该使用语言工作台 112部分 常见主题第 10章 DSL集锦 11410.1 Graphviz 11410.2 JMock 11510.3 CSS 11610.4 HQL 11810.5 XAML 11810.6 FIT 12010.7 Make等 121第 11章 语义模型(Semantic Model) 12311.1 运行机制 12311.2 使用时机 12511.3 入门示例(Java) 126第 12章 符号表(Symbol Table) 12712.1 运行机制 12712.2 使用时机 12912.3 延伸阅读 12912.4 以外部DSL实现的依赖网络(Java和ANTLR) 13012.5 在内部DSL中使用符号键(Ruby) 13112.6 以枚举作为静态类型符号(Java) 132第 13章 上下文变量(Context Variable) 13513.1 运行机制 13513.2 使用时机 13613.3 读取INI文件(C#) 136第 14章 构造型构建器(Construction Builder) 13914.1 运行机制 13914.2 使用时机 14014.3 构建简单的航班数据(C#) 140第 15章 宏(Macro) 14215.1 运行机制 14215.1.1 文本宏 14315.1.2 语法宏 14615.2 使用时机 149第 16章 通知(Notification) 15016.1 运行机制 15016.2 使用时机 15116.3 简单的通知(C#) 15116.4 对通行语法分析(Java) 152第三部分 外部DSL主题第 17章 分隔符制导翻译(Delimiter-Directed Translation) 15617.1 运行机制 15617.2 使用时机 15917.3 常客记分(C#) 15917.3.1 语义模型 15917.3.2 语法分析器 16117.4 使用格兰特女士的控制器对非自治语行语法分析(Java) 164第 18章 语法制导翻译(Syntax-Directed Translation) 17118.1 运行机制 17218.1.1 词法分析器 17218.1.2 语法分析器 17518.1.3 产生输出 17718.1.4 语义谓词 17718.2 使用时机 17818.3 延伸阅读 178第 19章 巴克斯-诺尔范式(BNF) 17919.1 运行机制 17919.1.1 多重符号(克林运算符) 18119.1.2 其他有用的运算符 18219.1.3 解析表达式文法 18219.1.4 将EBNF转换为基础BNF 18319.1.5 行为代码 18519.2 使用时机 187第 20章 基于正则表达式表的词法分析器(Regex Table Lexer) 18820.1 运行机制 18920.2 使用时机 19020.3 对格兰特女士的控制行词法分析(Java) 190第 21章 递归下降语法分析器(Recursive Descent Parser) 19321.1 运行机制 19421.2 使用时机 19621.3 延伸阅读 19721.4 递归下降和格兰特女士的控制器(Java) 197第 22章 语法分析器组合子(Parser Combinator) 20222.1 运行机制 20322.1.1 处理动作 20522.1.2 函数式风格的组合子 20622.2 使用时机 20722.3 语法分析器组合子和格兰特女士的控制器(Java) 207第 23章 语法分析器生成器(Parser Generator) 21423.1 运行机制 21423.2 使用时机 21623.3 Hello World(Java和ANTLR) 21623.3.1 编写基本的文法 21723.3.2 构建语法分析器 21823.3.3 为文法添加行为代码 22023.3.4 使用代沟 221第 24章 树构造(Tree Construction) 22424.1 运行机制 22424.2 使用时机 22624.3 使用ANTLR的树构造语法(Java和ANTLR) 22724.3.1 分词 22824.3.2 语法分析 22824.3.3 组装语义模型 23024.4 使用行为代行树构造(Java和ANTLR) 233第 25章 内嵌翻译(Embed Translation) 23925.1 运行机制 23925.2 使用时机 24025.3 格兰特女士的控制器(Java和ANTLR) 240第 26章 内嵌解释(Embed Interpretation) 24426.1 运行机制 24426.2 使用时机 24426.3 计算器(ANTLR和Java) 245第 27章 外来代码(Foreign Code) 24727.1 运行机制 24727.2 使用时机 24827.3 嵌入动态代码(ANTLR、Java和Javascript) 24927.3.1 语义模型 24927.3.2 语法分析器 251第 28章 可变分词方式(Alternative Tokenization) 25528.1 运行机制 25528.1.1 引用 25628.1.2 词法状态 25828.1.3 修改记号类型 25928.1.4 忽略记号类型 26028.2 使用时机 261第 29章 嵌套运算符表达式(Nested Operator expression) 26229.1 运行机制 26229.1.1 自底向上的语法分析器 26229.1.2 自顶向下的语法分析器 26429.2 使用时机 266第30章 换行分隔符(newline Separator) 26730.1 运行机制 26730.2 使用时机 269第31章 外部DSL拾遗 27131.1 语法 27131.2 模块化文法 273第四部分 内部DSL主题第32章 表达式构建器(expression Builder) 27632.1 运行机制 27732.2 使用时机 27732.3 用构建器和不用构建器的连贯接口日程表(Java) 27832.4 对日程表使用多个构建器(Java) 280第33章 函数序列(Function Sequence) 28333.1 运行机制 28333.2 使用时机 28433.3 简单的计算机配置范例(Java) 284第34章 嵌套函数(Nested Function) 28734.1 运行机制 28734.2 使用时机 28934.3 简单的计算机配置示例(Java) 28934.4 用记号处理多个不同的参数(C#) 29134.5 针对IDE支持使用子类型记号(Java) 29234.6 使用对象初始化器(C#) 29434.7 重复事件(C#) 29534.7.1 语义模型 29534.7.2 DSL 298第35章 方法级联(Method Chaining) 30035.1 运行机制 30035.1.1 使用构建器还是值 30135.1.2 收尾问题 30235.1.3 分层结构 30335.1.4 式接口 30335.2 使用时机 30435.3 简单的计算机配置示例(Java) 30435.4 带有属的方法级联(C#) 30735.5 式接口(C#) 308第36章 对象作用域(Object Scoping) 31036.1 运行机制 31036.2 使用时机 31136.3 代码(C#) 31236.3.1 语义模型 31236.3.2 DSL 31436.4 使用实例求值(Ruby) 31636.5 使用实例初始化程序(Java) 318第37章 (Closure) 32037.1 运行机制 32037.2 使用时机 324第38章 嵌套(Nested Closure) 32538.1 运行机制 32538.2 使用时机 32638.3 用嵌套装函数序列(Ruby) 32738.4 简单的C#范例(C#) 32938.5 使用方法级联(Ruby) 33038.6 带有显式参数的函数序列(Ruby) 33138.7 使用实例求值(Ruby) 333第39章 字面量列表(Literal List) 33639.1 运行机制 33639.2 使用时机 336第40章 字面量映射(Literal Map) 33840.1 运行机制 33840.2 使用时机 33940.3 使用列表和映射表达计算机的配置信息(Ruby) 33940.4 演化为格林斯潘式(Ruby) 340第41章 动态接收(Dynamic Reception) 34441.1 运行机制 34441.2 使用时机 34541.3 积分—使用经过语法分析的方法名(Ruby) 34741.3.1 模型 34741.3.2 构建器 34941.4 积分—使用方法级联(Ruby) 35041.4.1 模型 35141.4.2 构建器 35141.5 去除密室控制器中的引用(JRuby) 354第42章 注解(Annotation) 35942.1 运行机制 35942.1.1 定义注解 36042.1.2 处理注解 36142.2 使用时机 36242.3 用于运行时处理的自定义语法(Java) 36242.4 使用类方法(Ruby) 36442.5 动态代码生成(Ruby) 365第43章 语法分析树操作(Parse Tree Manipulation) 36743.1 运行机制 36743.2 使用时机 36843.3 由C#条件生成IMAP查询(C#) 36943.3.1 语义模型 36943.3.2 使用C#构建 37143.3.后一步 375第44章 类符号表(Class Symbol Table) 37744.1 运行机制 37744.2 使用时机 37844.3 静态类型的类符号表(Java) 379第45章 文本打磨(Textual Polishing) 38545.1 运行机制 38545.2 使用时机 38645.3 打磨后的折扣规则(Ruby) 386第46章 字面量扩展(Literal Extension) 38946.1 运行机制 38946.2 使用时机 39046.3 食谱配料(C#) 390第五部分 备选计算模型第47章 适应模型(Adaptive Model) 39447.1 运行机制 39547.1.1 在适应模型中纳入命令式代码 39647.1.2 工具 39747.2 使用时机 398第48章 决策表(Decision Table) 40048.1 运行机制 40048.2 使用时机 40148.3 订单费用计算(C#) 40248.3.1 模型 40248.3.2 语法分析器 405第49章 依赖网络(Dependency Network) 40849.1 运行机制 40849.2 使用时机 41049.3 分析药剂(C#) 41149.3.1 语义模型 41149.3.2 语法分析器 413第50章 产生式规则系统(Production Rule System) 41450.1 运行机制 41550.1.1 规则链 41550.1.2 矛盾的推理 41650.1.3 规则结构里的模式 41750.2 使用时机 41750.3 俱乐部会员验证(C#) 41850.3.1 模型 41850.3.2 语法分析器 41950.3.3 DSL 42050.4 适任资格的规则:扩展俱乐部成员(C#) 42150.4.1 模型 42250.4.2 语法分析器 425第51章 状态机(State Machine) 42651.1 运行机制 42651.2 使用时机 42851.3 密室控制器(Java) 428第六部分 代码生成第52章 基于转换器的代码生成(Transformer Generation) 43052.1 运行机制 43052.2 使用时机 43152.3 密室控制器(Java生成C) 432第53章 基于模板的代码生成(Templated Generation) 43553.1 运行机制 43553.2 使用时机 43653.3 使用嵌套条件生成密室状态机(Velocity和Java生成C) 437第54章 嵌入助手(Embedment Helper) 44254.1 运行机制 44354.2 使用时机 44354.3 密室状态(Java和ANTLR) 44454.4 辅助类是否应该生成HTML(Java和Velocity) 446第55章 基于模型的代码生成(Model-Aware Generation) 44855.1 运行机制 44855.2 使用时机 44955.3 密室状态机(C) 44955.4 动态加载状态机(C) 455第56章 无视模型的代码生成(Model Ignorant Generation) 45856.1 运行机制 45856.2 使用时机 45956.3 使用嵌套条件的密室状态机(C) 459第57章 代沟(Generation Gap) 46157.1 运行机制 46157.2 使用时机 46257.3 根据数据模式生成类(Java和一些Ruby) 463参考文献 467模式清单 468速查表 470

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部