2

我是解析新手(显然)。我正在使用LEPL库来解析一些标记语言。

我对这段代码有疑问(为了清楚起见,我省略了细节)。

from lepl import *

a = Literal('a')[0:,...] # 0 or more, join the result
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

最后一行应该给我 ['a','b','aa','b','aaa','b']

没有错误,但它挂起(可能是无限递归?)。谁能指出我正确的方向?

编辑

我可以这样做

from lepl import *

a = Literal('a')
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

但是a不会被分组。

4

1 回答 1

7

我很确定,在你的第一个例子中,你想要

a = Literal('a')[1:]

在你的语法中有两次[0:]重复时,解析器确实会遇到有效的无限回溯。

于 2011-04-10T19:58:10.427 回答