我一直在阅读不同类型的解析器,在几篇论文中,人们提到了需要无限前瞻的语法,但是从未给出一个例子。是否有一些我应该注意的规范示例?
答案 0 :(得分:3)
很容易想出明确的语法,这些语法需要无限的前瞻。请考虑以下简单的一个:
我们无法决定是否将初始a
缩减为X
或Y
,直到我们一直读到输入结尾。但这并不太有趣,因为语言本身显然可以用LR(1)语法解析。
还有一些语言不存在LR(k)语法。我认为规范的例子是所有偶数长度的回文序列(大小至少为2的字母表)的语言,它具有明确的语法:
至少应该直观地清楚,为什么这需要无限的前瞻:我们无法知道何时进行任何减少,直到我们正好在输入的中途,但在我们看到之前我们无法知道输入的长度所有的输入。