我至少读过维基百科的解释十几遍,但我仍然对LR( 0 )解析器如何离开状态0感到困惑。
维基百科的例子及其解释如下:
解析器从只包含初始状态(
'0'):[0]的堆栈开始 解析器看到的输入字符串中的第一个符号是'1'。
..。但这对我来说没有意义,因为看到输入符号将执行前瞻性,但是LR(0)解析器,根据定义,不能执行查找。
当解析器处于状态0时,它还没有移动,所以它的堆栈上没有任何符号。
考虑到它是一个LR(0)解析器,它也不能执行前瞻性。
那么,它如何使用该表来确定要从状态0转换或减少到哪种状态呢?
发布于 2012-10-27 05:05:33
移位的符号不是向前看的。它被消耗掉了。
LR(0)语法必须在不引用下一个符号的情况下决定缩减。一旦他们决定不减少,他们就含蓄地决定转移。1
shift操作包括读取一个符号,将它推到堆栈上,并参考操作表来决定要转换到哪个状态。
这与LR(k>0)语法不同,因为LR(k>0)语法可以使用前瞻性符号来决定移位和缩减,而LR(0)语法不能。但是他们两个人都可以在读到移位的符号后决定去哪一种状态。
注意1 ...or接受,如果移位的符号是输入的结束标记,但这只是一种特殊的状态。
https://stackoverflow.com/questions/13084829
复制相似问题