您好,欢迎来到聚文网。 登录 免费注册
领域特定语言

领域特定语言

  • 字数: 693
  • 出版社: 人民邮电
  • 作者: [美]马丁·福勒(Martin Fowler)|译者:徐昊 郑晔 熊节
  • 商品条码: 9787115563163
  • 版次: 1
  • 开本: 16开
  • 页数: 473
  • 出版年份: 2021
  • 印次: 1
定价:¥149.9 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
《领域特定语言》是领域特定语言(Domain-Specific Language,DSL)领域的丰碑之作,由世界级软件开发大师马丁·福勒(Martin Fowler)历时多年写作而成。 全书共57章,分为6个部分,全面介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。 本书适合想要了解各种DSL及其构造方式,理解其通用原则、模式和适用场景,以提高开发生产力和沟通能力的软件开发人员阅读。
作者简介
马丁·福勒(Martin Fowler),世界级软件开发大师,ThoughtWorks首席科学家。他是一位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献,著有《重构:改善既有代码的设计》《分析模式:可复用的对象模型》《领域特定语言》《企业应用架构模式》等经典著作。
目录
第 一部分 叙述 第 1章 入门示例 2 1.1 古堡安全系统 2 1.2 状态机模型 4 1.3 为格兰特女士的控制器编程 7 1.4 语言和语义模型 13 1.5 使用代码生成 15 1.6 使用语言工作台 17 1.7 可视化 19 第 2章 使用DSL 21 2.1 定义DSL 21 2.1.1 DSL的边界 22 2.1.2 片段DSL和独立DSL 25 2.2 为何使用DSL 25 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从何而来 33 第3章 实现DSL 34 3.1 DSL处理的架构 34 3.2 语法分析器的工作方式 37 3.3 文法、语法和语义 39 3.4 语法分析中的数据 39 3.5 宏 41 3.6 DSL的测试 42 3.6.1 语义模型的测试 42 3.6.2 语法分析器的测试 46 3.6.3 脚本的测试 49 3.7 错误处理 50 3.8 DSL的迁移 51 第4章 实现内部DSL 53 4.1 连贯API和命令查询API 53 4.2 对语法分析层的需要 56 4.3 使用函数 57 4.4 字面量集合 61 4.5 基于文法选择内部元素 62 4.6 闭包 63 4.7 语法分析树操作 65 4.8 注解 66 4.9 字面量扩展 67 4.10 降低语法噪声 68 4.11 动态接收 68 4.12 提供类型检查 69 第5章 实现外部DSL 71 5.1 语法分析策略 71 5.2 输出生成策略 74 5.3 解析中的概念 75 5.3.1 单独的词法分析 75 5.3.2 文法和语言 76 5.3.3 正则文法、上下文无关文法和上下文相关文法 77 5.3.4 自顶向下解析和自底向上解析 78 5.4 混入另一种语言 80 5.5 XML DSL 81 第6章 在内部DSL和外部DSL之间做选择 83 6.1 学习曲线 83 6.2 构建成本 84 6.3 程序员的熟悉度 85 6.4 与领域专家沟通 85 6.5 与宿主语言混合 85 6.6 表达性强边界 86 6.7 运行时配置 86 6.8 趋于通用 87 6.9 组合多种DSL 87 6.10 小结 88 第7章 备选计算模型 89 7.1 决策表 91 7.2 产生式规则系统 92 7.3 状态机 93 7.4 依赖网络 94 7.5 选择模型 94 第8章 代码生成 95 8.1 选择生成什么 96 8.2 如何生成 98 8.3 混合生成的代码和手写代码 99 8.4 生成可读的代码 100 8.5 语法分析前的代码生成 100 8.6 延伸阅读 101 第9章 语言工作台 102 9.1 语言工作台的要素 102 9.2 模式定义语言和元模型 103 9.3 源编辑和投射编辑 107 9.4 说明性编程 109 9.5 工具之旅 110 9.6 语言工作台和CASE工具 111 9.7 是否应该使用语言工作台 112 第二部分 常见主题 第 10章 DSL集锦 114 10.1 Graphviz 114 10.2 JMock 115 10.3 CSS 116 10.4 HQL 118 10.5 XAML 118 10.6 FIT 120 10.7 Make等 121 第 11章 语义模型(Semantic Model) 123 11.1 运行机制 123 11.2 使用时机 125 11.3 入门示例(Java) 126 第 12章 符号表(Symbol Table) 127 12.1 运行机制 127 12.2 使用时机 129 12.3 延伸阅读 129 12.4 以外部DSL实现的依赖网络(Java和ANTLR) 130 12.5 在内部DSL中使用符号键(Ruby) 131 12.6 以枚举作为静态类型符号(Java) 132 第 13章 上下文变量(Context Variable) 135 13.1 运行机制 135 13.2 使用时机 136 13.3 读取INI文件(C#) 136 第 14章 构造型构建器(Construction Builder) 139 14.1 运行机制 139 14.2 使用时机 140 14.3 构建简单的航班数据(C#) 140 第 15章 宏(Macro) 142 15.1 运行机制 142 15.1.1 文本宏 143 15.1.2 语法宏 146 15.2 使用时机 149 第 16章 通知(Notification) 150 16.1 运行机制 150 16.2 使用时机 151 16.3 非常简单的通知(C#) 151 16.4 对通知进行语法分析(Java) 152 第三部分 外部DSL主题 第 17章 分隔符制导翻译(Delimiter-Directed Translation) 156 17.1 运行机制 156 17.2 使用时机 159 17.3 常客记分(C#) 159 17.3.1 语义模型 159 17.3.2 语法分析器 161 17.4 使用格兰特女士的控制器对非自治语句进行语法分析(Java) 164 第 18章 语法制导翻译(Syntax-Directed Translation) 171 18.1 运行机制 172 18.1.1 词法分析器 172 18.1.2 语法分析器 175 18.1.3 产生输出 177 18.1.4 语义谓词 177 18.2 使用时机 178 18.3 延伸阅读 178 第 19章 巴克斯-诺尔范式(BNF) 179 19.1 运行机制 179 19.1.1 多重性符号(克林运算符) 181 19.1.2 其他有用的运算符 182 19.1.3 解析表达式文法 182 19.1.4 将EBNF转换为基础BNF 183 19.1.5 行为代码 185 19.2 使用时机 187 第 20章 基于正则表达式表的词法分析器(Regex Table Lexer) 188 20.1 运行机制 189 20.2 使用时机 190 20.3 对格兰特女士的控制器进行词法分析(Java) 190 第 21章 递归下降语法分析器(Recursive Descent Parser) 193 21.1 运行机制 194 21.2 使用时机 196 21.3 延伸阅读 197 21.4 递归下降和格兰特女士的控制器(Java) 197 第 22章 语法分析器组合子(Parser Combinator) 202 22.1 运行机制 203 22.1.1 处理动作 205 22.1.2 函数式风格的组合子 206 22.2 使用时机 207 22.3 语法分析器组合子和格兰特女士的控制器(Java) 207 第 23章 语法分析器生成器(Parser Generator) 214 23.1 运行机制 214 23.2 使用时机 216 23.3 Hello World(Java和ANTLR) 216 23.3.1 编写基本的文法 217 23.3.2 构建语法分析器 218 23.3.3 为文法添加行为代码 220 23.3.4 使用代沟 221 第 24章 树构造(Tree Construction) 224 24.1 运行机制 224 24.2 使用时机 226 24.3 使用ANTLR的树构造语法(Java和ANTLR) 227 24.3.1 分词 228 24.3.2 语法分析 228 24.3.3 组装语义模型 230 24.4 使用行为代码进行树构造(Java和ANTLR) 233 第 25章 内嵌翻译(Embedded Translation) 239 25.1 运行机制 239 25.2 使用时机 240 25.3 格兰特女士的控制器(Java和ANTLR) 240 第 26章 内嵌解释(Embedded Interpretation) 244 26.1 运行机制 244 26.2 使用时机 244 26.3 计算器(ANTLR和Java) 245 第 27章 外来代码(Foreign Code) 247 27.1 运行机制 247 27.2 使用时机 248 27.3 嵌入动态代码(ANTLR、Java和JavaScript) 249 27.3.1 语义模型 249 27.3.2 语法分析器 251 第 28章 可变分词方式(Alternative Tokenization) 255 28.1 运行机制 255 28.1.1 引用 256 28.1.2 词法状态 258 28.1.3 修改记号类型 259 28.1.4 忽略记号类型 260 28.2 使用时机 261 第 29章 嵌套运算符表达式(Nested Operator Expression) 262 29.1 运行机制 262 29.1.1 自底向上的语法分析器 262 29.1.2 自顶向下的语法分析器 264 29.2 使用时机 266 第30章 换行分隔符(Newline Separator) 267 30.1 运行机制 267 30.2 使用时机 269 第31章 外部DSL拾遗 271 31.1 语法缩进 271 31.2 模块化文法 273 第四部分 内部DSL主题 第32章 表达式构建器(Expression Builder) 276 32.1 运行机制 277 32.2 使用时机 277 32.3 用构建器和不用构建器的连贯接口日程表(Java) 278 32.4 对日程表使用多个构建器(Java) 280 第33章 函数序列(Function Sequence) 283 33.1 运行机制 283 33.2 使用时机 284 33.3 简单的计算机配置范例(Java) 284 第34章 嵌套函数(Nested Function) 287 34.1 运行机制 287 34.2 使用时机 289 34.3 简单的计算机配置示例(Java) 289 34.4 用记号处理多个不同的参数(C#) 291 34.5 针对IDE支持使用子类型记号(Java) 292 34.6 使用对象初始化器(C#) 294 34.7 重复事件(C#) 295 34.7.1 语义模型 295 34.7.2 DSL 298 第35章 方法级联(Method Chaining) 300 35.1 运行机制 300 35.1.1 使用构建器还是值 301 35.1.2 收尾问题 302 35.1.3 分层结构 303 35.1.4 渐进式接口 303 35.2 使用时机 304 35.3 简单的计算机配置示例(Java) 304 35.4 带有属性的方法级联(C#) 307 35.5 渐进式接口(C#) 308 第36章 对象作用域(Object Scoping) 310 36.1 运行机制 310 36.2 使用时机 311 36.3 安全代码(C#) 312 36.3.1 语义模型 312 36.3.2 DSL 314 36.4 使用实例求值(Ruby) 316 36.5 使用实例初始化程序(Java) 318 第37章 闭包(Closure) 320 37.1 运行机制 320 37.2 使用时机 324 第38章 嵌套闭包(Nested Closure) 325 38.1 运行机制 325 38.2 使用时机 326 38.3 用嵌套闭包来包装函数序列(Ruby) 327 38.4 简单的C#范例(C#) 329 38.5 使用方法级联(Ruby) 330 38.6 带有显式闭包参数的函数序列(Ruby) 331 38.7 使用实例求值(Ruby) 333 第39章 字面量列表(Literal List) 336 39.1 运行机制 336 39.2 使用时机 336 第40章 字面量映射(Literal Map) 338 40.1 运行机制 338 40.2 使用时机 339 40.3 使用列表和映射表达计算机的配置信息(Ruby) 339 40.4 演化为格林斯潘式(Ruby) 340 第41章 动态接收(Dynamic Reception) 344 41.1 运行机制 344 41.2 使用时机 345 41.3 积分—使用经过语法分析的方法名(Ruby) 347 41.3.1 模型 347 41.3.2 构建器 349 41.4 积分—使用方法级联(Ruby) 350 41.4.1 模型 351 41.4.2 构建器 351 41.5 去除密室控制器中的引用(JRuby) 354 第42章 注解(Annotation) 359 42.1 运行机制 359 42.1.1 定义注解 360 42.1.2 处理注解 361 42.2 使用时机 362 42.3 用于运行时处理的自定义语法(Java) 362 42.4 使用类方法(Ruby) 364 42.5 动态代码生成(Ruby) 365 第43章 语法分析树操作(Parse Tree Manipulation) 367 43.1 运行机制 367 43.2 使用时机 368 43.3 由C#条件生成IMAP查询(C#) 369 43.3.1 语义模型 369 43.3.2 使用C#构建 371 43.3.3 退后一步 375 第44章 类符号表(Class Symbol Table) 377 44.1 运行机制 377 44.2 使用时机 378 44.3 静态类型的类符号表(Java) 379 第45章 文本打磨(Textual Polishing) 385 45.1 运行机制 385 45.2 使用时机 386 45.3 打磨后的折扣规则(Ruby) 386 第46章 字面量扩展(Literal Extension) 389 46.1 运行机制 389 46.2 使用时机 390 46.3 食谱配料(C#) 390 第五部分 备选计算模型 第47章 适应性模型(Adaptive Model) 394 47.1 运行机制 395 47.1.1 在适应性模型中纳入命令式代码 396 47.1.2 工具 397 47.2 使用时机 398 第48章 决策表(Decision Table) 400 48.1 运行机制 400 48.2 使用时机 401 48.3 订单费用计算(C#) 402 48.3.1 模型 402 48.3.2 语法分析器 405 第49章 依赖网络(Dependency Network) 408 49.1 运行机制 408 49.2 使用时机 410 49.3 分析药剂(C#) 411 49.3.1 语义模型 411 49.3.2 语法分析器 413 第50章 产生式规则系统(Production Rule System) 414 50.1 运行机制 415 50.1.1 规则链 415 50.1.2 矛盾的推理 416 50.1.3 规则结构里的模式 417 50.2 使用时机 417 50.3 俱乐部会员验证(C#) 418 50.3.1 模型 418 50.3.2 语法分析器 419 50.3.3 演进DSL 420 50.4 适任资格的规则:扩展俱乐部成员(C#) 421 50.4.1 模型 422 50.4.2 语法分析器 425 第51章 状态机(State Machine) 426 51.1 运行机制 426 51.2 使用时机 428 51.3 密室控制器(Java) 428 第六部分 代码生成 第52章 基于转换器的代码生成(Transformer Generation) 430 52.1 运行机制 430 52.2 使用时机 431 52.3 密室控制器(Java生成C) 432 第53章 基于模板的代码生成(Templated Generation) 435 53.1 运行机制 435 53.2 使用时机 436 53.3 使用嵌套条件生成密室状态机(Velocity和Java生成C) 437 第54章 嵌入助手(Embedment Helper) 442 54.1 运行机制 443 54.2 使用时机 443 54.3 密室状态(Java和ANTLR) 444 54.4 辅助类是否应该生成HTML(Java和Velocity) 446 第55章 基于模型的代码生成(Model-Aware Generation) 448 55.1 运行机制 448 55.2 使用时机 449 55.3 密室状态机(C) 449 55.4 动态加载状态机(C) 455 第56章 无视模型的代码生成(Model Ignorant Generation) 458 56.1 运行机制 458 56.2 使用时机 459 56.3 使用嵌套条件的密室状态机(C) 459 第57章 代沟(Generation Gap) 461 57.1 运行机制 461 57.2 使用时机 462 57.3 根据数据模式生成类(Java和一些Ruby) 463 参考文献 467 模式清单 468 速查表 470

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网