9

我在 Internet 上找不到任何关于 LL(*) 解析器(例如 ANTLR)的完整描述。

我想知道 LL(k) 解析器和 LL(*) 解析器之间有什么区别,以及为什么尽管它们具有灵活性,但它们仍不能支持左递归语法。

4

2 回答 2

4

这是一篇关于语法分析的文章(由antlr的作者 Terence Parr 撰写):文章有一个很好的例子,说明什么是但不是,对于任何。LL(*)LL(*)LL(k)k

另一个很好的参考资料(而且更完整)是 Terence Parr 的“权威 ANTLR 参考资料”,以及描述antlr如何工作的原始期刊文章[pdf]

于 2010-05-31T13:46:33.173 回答
1

当您看到这一点时,通常会提前查看令牌的数量以解析语言。

这对于 LR 解析器也是一样的。

所以 k 是 parer 在做出决定之前将获取的最大令牌数量。请注意,k 越高,解析器就越难,除非您使用生成器(ANTLR,yacc,bison,...)。

LL 解析器使用自上而下的方法,这意味着它将寻找最深的树。因为左递归会生成一个无限深的树并且会破坏解析器。

AFAIK 大多数语言都使用 LR 解析器。

于 2010-05-31T13:51:45.947 回答