看起来 pyparsing 的人已经预料到了你的问题。来自https://github.com/pyparsing/pyparsing/blob/master/HowToUsePyparsing.rst:
pyparsing
对于复杂的语法和/或大的输入字符串,性能可能会很慢。该psyco
软件包可用于提高pyparsing
模块的速度,而无需更改语法或程序逻辑 - 观察到的改进已在 20-50% 范围内。
然而,正如 Vangel 在下面的评论中指出的psyco
那样,截至 2012 年 3 月,它是一个过时的项目。它的继任者是PyPy项目,它从相同的基本性能方法开始:使用 JIT 本机代码编译器而不是字节码解释器。如果切换 Python 实现对您有用,您应该能够使用 PyPy 获得类似或更大的收益。
如果你真的是一个速度恶魔,但想保持一些易读性和声明性语法,我建议你看看 ANTLR。可能不是 Python 生成的后端;我怀疑这是否足够成熟或高性能以满足您的需求。我说的是商品:启动这一切的 C 后端。
在解析器的入口点周围包裹一个 Python C 扩展模块,然后松开它。
话虽如此,您将在此过渡中放弃很多:基本上您想在解析器中执行的任何 Python 都必须通过 C API 完成(并不完全漂亮)。此外,您必须习惯于非常不同的做事方式。ANTLR 有它的魅力,但它不是基于组合子的,所以你的语法和你的语言之间没有 pyparsing 中那种简单流畅的关系。另外,它是它自己的 DSL,很像 lex/yacc,它可以呈现一个学习曲线——但是,因为它是基于 LL 的,你可能会发现它更容易适应你的需求。