2013-12-20 173 views
0

我跑过几个博客,比如这个:http://mortoray.com/2012/07/20/why-i-dont-use-a-parser-generator/,不知何故,他们使用“递归下降解析”是指像ANTLR这样的手工解析器和解析器生成器。递归下降解析和antlr

对我来说,“递归下降解析”和ANTLR是两个不同的东西,一个是一般的解析理论,而另一个是精确的技术。但我想知道为什么,它似乎很受欢迎,人们在混合/比较它们在一起?

回答

0

我会认为这只是因为手写解析器往往是递归下降,因为该形式紧跟在[E] BNF定义之后,并且非常容易手动验证,并且在必要时进行调试。相反,ANTLR,Bison和其他工具通常不会产生递归下降解析器。

所以你说得对,因为比较严格地说是一种解析方法,而不是解析器生成工具,但在递归下降和手写方式的某个地方变成了惯用的同义词。

2

递归下降解析器是自顶向下解析器(LL)的特定子集。递归下降解析器是程序员通常手动构建的,因为这是构建我的手时的自然表达。工具可以生成各种有趣的机器。 ANTLR过去25年的目标一直是生成程序员手工创建的程序,这意味着它会生成递归下降解析器。生成的解析器必须更复杂,因为它们不是由人手优化的。