Похоже, что пиарсинг предвидел вашу проблему. От https://github.com/pyparsing/pyparsing/blob/master/HowToUsePyparsing.rst:
Производительность pyparsing
может быть медленной для сложных грамматик и / или больших строк ввода. Пакет psyco
можно использовать для повышения скорости модуля pyparsing
без изменений в грамматике или логике программы - наблюдаемые улучшения были в диапазоне 20-50%.
Однако, как отметил Вангель в комментариях ниже, psyco
является устаревшим проектом с марта 2012 года. Его преемником является проект PyPy , который начинается с того же базового подхода к производительности: используйте JIT-компилятор с собственным кодом вместо интерпретатора байт-кода. Вы должны быть в состоянии достичь такого же или большего прироста с PyPy, если переключение реализаций Python будет работать для вас.
Если вы действительно демон скорости, но хотите сохранить некоторую разборчивость и декларативный синтаксис, я бы посоветовал взглянуть на ANTLR. Вероятно, не Python-генерирующий бэкэнд; Я скептически отношусь к тому, достаточно ли он зрел или высокопроизводителен для ваших нужд. Я говорю о товаре: бэкэнд C, с которого все началось.
Оберните модуль расширения Python C вокруг точки входа в анализатор и освободите его.
Сказав это, вы многим откажетесь в этом переходе: в основном, любой Python, который вы хотите сделать в вашем парсере, должен выполняться через C API (не совсем красиво). Кроме того, вам придется привыкать к совершенно разным способам ведения дел. У ANTLR есть свои прелести, но он не основан на комбинаторах, поэтому между грамматикой и языком нет простых и плавных отношений, которые есть у pyparsing. Кроме того, это собственный DSL, очень похожий на lex / yacc, который может представить кривую обучения, но, поскольку он основан на LL, вам, вероятно, будет проще адаптироваться к вашим потребностям.