需要无限前瞻的语法?

时间:2012-10-19 09:24:45

标签: parsing

我一直在阅读不同类型的解析器,在几篇论文中,人们提到了需要无限前瞻的语法,但是从未给出一个例子。是否有一些我应该注意的规范示例?

1 个答案:

答案 0 :(得分:3)

很容易想出明确的语法,这些语法需要无限的前瞻。请考虑以下简单的一个:

  • S→SX
  • S→SY
  • SX→X B x
  • SY→Y B y
  • X→a
  • Y→a
  • B→b
  • B→B B

我们无法决定是否将初始a缩减为XY,直到我们一直读到输入结尾。但这并不太有趣,因为语言本身显然可以用LR(1)语法解析。

还有一些语言不存在LR(k)语法。我认为规范的例子是所有偶数长度的回文序列(大小至少为2的字母表)的语言,它具有明确的语法:

  • P2→a P2 a
  • P2→b P2 b
  • P2→ε

至少应该直观地清楚,为什么这需要无限的前瞻:我们无法知道何时进行任何减少,直到我们正好在输入的中途,但在我们看到之前我们无法知道输入的长度所有的输入。