PLY: быстро разобрать длинные списки элементов?

Я работаю с довольно простым парсером в PLY , и одно из моих правил принимает следующую форму:

def p_things(p):
    '''
    things : thing things
    things : thing
    '''
    p[0] = [p[1]]
    if len(p) == 3:
        p[0] += p[2]

Входные файлы, как правило, представляют собой простые списки объектов s, поэтому сам анализ не является сложным. Однако некоторые из моих входных файлов очень большие (регулярно превышают 100 000 строк и более 1 000 000 в крайних случаях). При профилировании (через cProfile и pstats ) большая часть времени выполнения занята повторными вызовами p_things - предположительно, один вызов для каждого элемента в things ] list.

Есть ли способ сократить это время или более эффективный способ структурировать это правило? В большинстве ответов, которые я видел до сих пор (и в информации о канонических компиляторах, которую я нашел), этот метод указан как общепринятый способ создания списка анализируемых элементов независимо от длины.

8
задан Tim 20 June 2011 в 20:01
поделиться