CH05-Comparison

如果你将解析需求想象为一个光谱,一边是“脏且快”的正则表达式,一边是像 ANTLR 一样完整的解析器生成器,Parboiled 则旨在填补两端之间的巨大空间。对于非常简单的用例,正则表达式可能是一个具有最小开销的适当解决方案。然而,正则表达式可以很快变成丑陋的混乱、难以阅读理解并最终难以维护。在许多情况下,它们也缺乏表达能力来解析像嵌套构造这样需要递归规则定义的东西。它们也不会生成正确的错误消息或从输入的错误中恢复,而这可以在开发过程中节省大量时间。

在光谱的另一端,像 ANTLR 和 Rats! 这样强大的工具当然也有其适用场景。当必须解析那些用复杂语言编写的大量源码时,解析器生成器可能是合适的工具。比如,你可能想要使用现有的语法,或者需要一些发展多年的企业工具的完整特性集。

然而,当你需要定义自己的语法,并且对解析器生成器没有丰富的经验,Parboiled 则可以快速简便的帮你达到目的。Parboiled 可以用于小的任务,如解析日期与时间;也可以用于复杂的任务,如解析 Java 源码或像 Markdown 这样的标记语言。占用小、轻量的架构使其很容易与其他应用集成,同时又能为多种定制需求提供良好的基础。