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



我已经阅读了Wikipedia的解释至少十二次,但是我仍然对LR(0)Parser曾经离开状态0。

感到困惑

Wikipedia的例子,并说:

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

...但这对我没有意义,因为看到输入符号将执行lookahead ,但是从定义上讲,LR(0)解析器无法执行lookahead。

当解析器处于状态0时,它尚未移动,因此其堆栈上没有任何符号。
鉴于它是LR(0)解析器,它也无法执行lookahead。

那么,它如何使用表来找出要移动或减少到状态0的状态?

符号移动的符号不是lookahead。它被消耗了。

lr(0)语法必须决定在不咨询下一个符号的情况下减少。一旦他们决定不减少,他们就隐含地决定转移。[1]

轮班动作涉及阅读符号,将其推入堆栈,并咨询动作表以决定要过渡到哪种状态。

这与LR(K> 0)语法不同,因为LR(K> 0)语法可以使用LookAhead符号来决定移动和减少之间,而LR(0)语法则不能。但是他们俩都可以在阅读移动的符号后决定要达到哪种状态。


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

最新更新