eps的LR解析器

问题描述 投票:0回答:1

我最近实现了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(注意:不是表构造算法)。这是我的...

parsing compiler-construction dfa lr
1个回答
1
投票

该堆栈肯定是错误的,并且看起来很可能导致错误(尽管很难看到代码而很难说)。

© www.soinside.com 2019 - 2024. All rights reserved.