我最近实现了LR(1)解析器(没有epsilon),并且一直想知道如何在解析算法中实现epsilon(注意:不是表构造算法)。这是我的语法:
start -> A b
b -> B | \epsilon
我已按照here列出的步骤进行操作,并从解析器(表)获得了此结果:
state 0 on symbol start: 1
state 0 on symbol A: shift and goto state 2
state 1 on symbol $: accept
state 2 on symbol b: 3
state 2 on symbol B: shift and goto state 4
state 2 on symbol $: reduce b →
state 3 on symbol $: reduce start → A b
state 4 on symbol $: reduce b → B
上面列出的表是正确的,但是当我尝试解析A
时,没有过渡:
error: no transition in table for (0, 'b')
这是我的堆栈外观:
[0]
[0, 'A', 2]
[0, 'b'] # stack during the error
现在,我注意到顶部没有状态,这是一个问题,但是我不知道在其后添加什么。我的配对代码基于here。
我最近实现了LR(1)解析器(没有epsilon),并且一直想知道如何在解析算法中实现epsilon(注意:不是表构造算法)。这是我的...
该堆栈肯定是错误的,并且看起来很可能导致错误(尽管很难看到代码而很难说)。