Earley Parser递归

时间:2014-03-10 21:07:22

标签: python parsing earley-parser

Earley解析器是否预期了简单循环的问题?

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

http://www.nightmare.com/rushing/python/earley.py

那个对我来说很好看,并且在提供的测试用例中完美运行,但是非常简单的语法

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

似乎不起作用。 生成任意数量的“ident”令牌,假设E是起始非终端且ident是终端。但是这个语法和任何类似的样式语法都被解析器完全遗漏了。

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

1 个答案:

答案 0 :(得分:1)

是的,它有一组预期的问题:

X1 :: = X2

X2 :: = X3

...

Xn :: = X1

在这种情况下,如果您没有检查已经添加到Earley图表中的状态,算法可以输入无限递归循环。

如果你上面提到的话,它不能进入​​无限循环,因为规则E :: = E E的扩展将受到你的输入的限制。检查这里的实现:

https://en.wikipedia.org/wiki/Earley_parser#The_algorithm

我已经使用过这个实现,但它运行正常。