我正在使用一个相当简单的解析器PLY,我的规则之一采用以下形式:
def p_things(p):
'''
things : thing things
things : thing
'''
p[0] = [p[1]]
if len(p) == 3:
p[0] += p[2]
输入文件通常是简单的thing
s 列表,因此解析本身并不复杂。然而,我的一些输入文件非常大(经常超过 100,000 行,在极端情况下超过 1,000,000)。在分析中(通过cProfile 和 pstats),运行时的大部分时间都被重复调用占用p_things
——大概是对列表中每个项目的调用things
。
有没有办法减少这个时间,或更有效的方式来构建这个规则?到目前为止,我看到的大多数答案(以及我发现的规范编译器信息)都将此方法列为构造可解析项列表的公认方法,无论长度如何。