领域特定语言

领域特定语言
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] (Martin Fowler)
2021-07
版次: 1
ISBN: 9787115563163
定价: 149.90
装帧: 其他
开本: 其他
纸张: 胶版纸
页数: 473页
16人买过
  • 《领域特定语言》是领域特定语言(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章 使用DSL21

    2.1 定义DSL21

    2.1.1 DSL的边界22

    2.1.2 片段DSL和独立DSL25

    2.2 为何使用DSL25

    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章 实现DSL34

    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章 实现内部DSL53

    4.1 连贯API和命令查询API53

    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章 实现外部DSL71

    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 DSL81

    第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 组合多种DSL87

    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 Graphviz114

    10.2 JMock115

    10.3 CSS116

    10.4 HQL118

    10.5 XAML118

    10.6 FIT120

    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转换为基础BNF183

    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 DSL298

    第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 DSL314

    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 演进DSL420

    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
  • 内容简介:
    《领域特定语言》是领域特定语言(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章 使用DSL21

    2.1 定义DSL21

    2.1.1 DSL的边界22

    2.1.2 片段DSL和独立DSL25

    2.2 为何使用DSL25

    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章 实现DSL34

    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章 实现内部DSL53

    4.1 连贯API和命令查询API53

    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章 实现外部DSL71

    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 DSL81

    第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 组合多种DSL87

    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 Graphviz114

    10.2 JMock115

    10.3 CSS116

    10.4 HQL118

    10.5 XAML118

    10.6 FIT120

    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转换为基础BNF183

    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 DSL298

    第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 DSL314

    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 演进DSL420

    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
查看详情
12
相关图书 / 更多
领域特定语言
领域驱动设计:软件核心复杂性应对之道(英文版)
[美]埃文斯 著
领域特定语言
领域知识工程学
罗建中 编
领域特定语言
领域驱动设计学习手册
[以色列]弗拉德·霍诺诺夫(Vlad Khononov)
领域特定语言
领域专用语言实战
[美]Debasish Ghosh
领域特定语言
领域驱动设计与模式实战
[瑞典]Jimmy Nilsson 著
领域特定语言
领域驱动设计.Net实践
甄镭
领域特定语言
领域驱动设计精粹
Vernon(沃恩弗农) 著;[美]Vaughn、覃宇 笪磊 译
领域特定语言
领域语义信息检索研究——以竹藤领域为例
彭琳 著
领域特定语言
领域驱动设计 软件核心复杂性应对之道 英文版
[美]埃里克·埃文斯(Eric Evans)
领域特定语言
领域驱动设计:软件核心复杂性应对之道
[美]伊文斯(Evans E.) 著;陈大峰、张泽鑫 译
领域特定语言
领域自适应目标检测方法与应用
叶茂;唐宋;李旭冬
领域特定语言
领域法学社会科学的新思维与法学共同体的新融合
刘剑文 著