问题描述
Earley解析器在简单循环方面是否存在预期的问题?
我已经实现了自己的实现,但是它非常类似于此实现,它非常易读,总共约150行(我当然也没有写):
那对我来说看起来不错,并且在提供的测试用例中可以完美地工作,但是语法很简单
E : [[E,E],[ident]]
似乎不起作用。 假定E是开始的非终结符,并且ident是终结符,它应该生成任意数量的“ ident”令牌。 但是,该语法以及任何类似的样式语法都被解析器完全遗漏了。
这是Earley算法(我认为不是)中的问题,还是此实现中的问题? 如果基于实现,是否有(相对)简单的解决方案,还是需要重建算法?
1楼
是的,该类规则组存在预期的问题:
X1 :: = X2
X2 :: = X3
...
Xn :: = X1
在这种情况下,如果您不检查已添加到Earley图表的状态,则算法可能会进入无限递归循环。
在上面介绍的情况下,它一定不能进入无限循环,因为规则E :: = EE的扩展将受到您输入的限制。 在此处检查实施:
我已经使用了此实现,并且运行良好。