当前位置: 代码迷 >> python >> Earley Parser递归
  详细解决方案

Earley Parser递归

热度:19   发布时间:2023-06-21 10:50:33.0

Earley解析器在简单循环方面是否存在预期的问题?

我已经实现了自己的实现,但是它非常类似于此实现,它非常易读,总共约150行(我当然也没有写):

那对我来说看起来不错,并且在提供的测试用例中可以完美地工作,但是语法很简单

E : [[E,E],[ident]]

似乎不起作用。 假定E是开始的非终结符,并且ident是终结符,它应该生成任意数量的“ ident”令牌。 但是,该语法以及任何类似的样式语法都被解析器完全遗漏了。

这是Earley算法(我认为不是)中的问题,还是此实现中的问题? 如果基于实现,是否有(相对)简单的解决方案,还是需要重建算法?

是的,该类规则组存在预期的问题:

X1 :: = X2

X2 :: = X3

...

Xn :: = X1

在这种情况下,如果您不检查已添加到Earley图表的状态,则算法可能会进入无限递归循环。

在上面介绍的情况下,它一定不能进入无限循环,因为规则E :: = EE的扩展将受到您输入的限制。 在此处检查实施:

我已经使用了此实现,并且运行良好。

  相关解决方案