第二部分 实现DSL
从表面来看,DSL的语法和领域用户的日常生活中的用语一致。本书第一部分着重强调让软件“说”领域语言的重要性。而当你做到了第一部分的要求之后,还有DSL语法背后的语义模型等着你去培育,按照抽象的设计原则去塑造它。除非语义模型易于扩展、易于适应、易于组合,否则建立在语义模型之上的语法很难有出色的表现力。
第二部分(第4章~第8章)讨论能塑造出优秀语义模型的所有惯用法和最佳实践。
设计DSL的时候,你要按照编程所需的抽象层次,找到最适合表达该层次抽象的语言。这一部分将会使用Groovy、Ruby、Scala和Clojure语言来实现DSL。这些语言各有长处和短处,也各有其特色功能可用于DSL组件建模。若追求基于DSL的开发方式,你就有必要了解这些语言提供的惯用法,还有它们与主应用架构结合的方式。
该部分还涵盖了基于ANTLR和(来自Eclipse的)Xtext等现代框架的外部DSL开发。ANTLR是一种语法分析器生成器,可以帮助DSL编写定制的语法分析器。Xtext是完整的外部DSL开发及管理环境。
该部分的压轴主题是分析器组合子,这是一种用于外部DSL开发的优美的函数式抽象。