LR(0)解析器如何离开状态0?

时间:2012-10-26 10:05:13

标签: parsing language-agnostic lr

我已经阅读了维基百科的解释至少十几次,但我仍然对LR(0)解析器如何离开状态0感到困惑。

Wikipedia's example, with its explanation, says

  

解析器从包含初始状态('0')的堆栈开始:   [0]
  解析器看到的输入字符串中的第一个符号是'1'

...但这对我没有意义,因为看到输入符号会执行前瞻,但根据定义,LR(0)解析器无法执行超前。

当解析器处于状态0时,它还没有移位,因此它的堆栈上没有任何符号。
鉴于它是一个LR(0)解析器,它也不能执行前瞻。

那么如何使用该表来确定从状态0转移或减少哪个状态?

1 个答案:

答案 0 :(得分:3)

移位的符号不是前瞻。它消耗了。

LR(0)语法必须决定减少而不咨询下一个符号。一旦他们决定不减少,他们就暗中决定转移。 [1]

移位操作涉及读取符号,将其推入堆栈,并查阅操作表以确定要转换到哪个状态。

这与LR(k> 0)语法的不同之处在于LR(k> 0)语法可以使用先行符号来决定移位和缩小,而LR(0)语法不能。但是他们两个都可以决定在读取移位的符号后转到哪个状态。


[注1] ......或接受,如果移位的符号是输入结束标记,但这只是状态的特殊情况。