第8章 用Scala语法分析器组合子设计外部DSL

本章内容

  • 什么是分析器组合子
  • Scala的分析器组合子库
  • Packrat分析器的用法
  • 用Scala提供的各种分析器组合子来设计外部DSL

带着我们从第7章学到的关于外部DSL实现的基础知识,本章把话题直接转到分析器组合子(parser combinator)。分析器组合子是函数式编程最为精彩的应用之一。这些组合子构成了一种用来设计外部DSL的内部DSL,也就是说,可以不必像别的外部DSL实现技术那样,要求我们自行建立一套语言处理设施。以第7章处理客户交易指令的外部DSL为例,我们在设计的时候用到了ANTLR语法分析器生成器。设计好的DSL语法要通过ANTLR来生成语法分析器。换言之,我们的DSL需要依赖外部工具来提供必要的语言实现基础设施。而当我们使用分析器组合子的时候,完全不需要越出宿主语言半步。实现因此变得简洁、有表现力,而且完全摆脱了一切外部依赖。

我们先从什么是分析器组合子说起,再谈到Scala在其核心语言基础上实现的分析器组合子库。随后进一步详尽地说明Scala组合子库的各种细节,重点突出那些令其成为DSL设计标杆的特性。在这之后,我们将运用Scala的分析器组合子来设计两个外部DSL。最后介绍packrat分析器,这种分析器能实现普通递归下降分析器无法实现的文法类型。图8-1是本章的路线图,我们就照着图上的指引,循序渐进地探索用Scala的分析器组合子来设计DSL的世界。

enter image description here

图8-1 本章路线图

学习完本章内容,你将牢固地掌握如何使用函数式编程技术,特别是分析器组合子技术来实现可扩展的外部DSL。