gpt4 book ai didi

python - pyparsing 之后的下一步是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:48:37 25 4
gpt4 key购买 nike

我为 pyparsing 开发了一个庞大的语法,作为大型纯 Python 应用程序的一部分。我已经达到了性能调整的极限,我正处于 yield 递减让我开始寻找其他地方的地步。是的,我想我知道大部分的技巧和窍门,而且我已经把我的语法和应用程序分析得一干二净。

接下来呢?

我希望找到一个解析器,它可以给我同样的可读性、可用性(我正在使用 pyparsing 的许多高级功能,例如 parse-actions 来开始对正在解析的输入进行后处理)和 python 集成但是 < strong>性能是 10 倍。

我喜欢语法是纯 Python 的事实。

我所有的基本 block 都是正则表达式,所以重用它们会很好。

我知道我不能拥有一切,所以我愿意放弃我今天拥有的一些功能,以达到要求的 10 倍性能。

我从这里去哪里?

最佳答案

看起来 pyparsing 的人已经预料到了你的问题。来自 https://github.com/pyparsing/pyparsing/blob/master/HowToUsePyparsing.rst :

Performance of pyparsing may be slow for complex grammars and/or large input strings. The psyco package can be used to improve the speed of the pyparsing module with no changes to grammar or program logic - observed improvments have been in the 20-50% range.

然而,正如 Vangel 在下面的评论中指出的那样,psyco 在 2012 年 3 月是一个过时的项目。它的继任者是 PyPy项目,它从相同的基本性能方法开始:使用 JIT native 代码编译器而不是字节码解释器。如果切换 Python 实现对您有用,您应该能够使用 PyPy 获得类似或更大的 yield 。

如果你真的是一个速度恶魔,但想保持一些易读性和声明性语法,我建议你看看 ANTLR。可能不是 Python 生成的后端;我怀疑这是否足够成熟或高性能以满足您的需求。我说的是商品:启动这一切的 C 后端。

在解析器的入口点周围包裹一个 Python C 扩展模块,然后松开它。

话虽如此,您将在此过渡中放弃很多:基本上,您想在解析器中执行的任何 Python 都必须通过 C API 完成(并不完全漂亮)。此外,您必须习惯于非常不同的做事方式。 ANTLR 有它的魅力,但它不是基于组合子的,所以你的语法和你的语言之间没有 pyparsing 中那种简单流畅的关系。另外,它是它自己的 DSL,很像 lex/yacc,它可以呈现一个学习曲线——但是,因为它是基于 LL 的,你可能会发现它更容易适应你的需求。

关于python - pyparsing 之后的下一步是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com