我是解析的新手(显然)。我正在使用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 不会被分组。
答案 0 :(得分:7)
我很确定,在你的第一个例子中,你想要
a = Literal('a')[1:]
在你的语法中有两个[0:]
重复,解析器确实会遇到无限回溯。