我正在寻找为源文件编写Python导入过滤器或预处理器,这些源文件本质上是带有额外语言元素的Python。目标是读取源文件,将其解析为抽象语法树,应用一些转换以实现语言的新部分,并编写有效的Python源,然后CPython可以使用它。我想用Python编写这个东西,我正在为这个任务寻找最好的解析器。
Python内置的解析器不合适,因为它要求源文件是实际的Python,而这些不是。有大量的解析器(或解析器生成器)可以与Python一起使用,但如果没有大量的研究,很难说哪个是最适合我的需求。
总之,我的要求是:
有什么建议吗?
答案 0 :(得分:9)
首先想到的是lib2to3
。它是Python解析器的完整纯Python实现。它读取Python语法文件并根据此语法解析Python源文件。它为执行AST操作和写回格式良好的Python代码提供了很好的基础结构 - 毕竟它的目的是在两种类似Python的语言之间进行转换,语法略有不同。
不幸的是,它缺乏文档,并不能保证稳定的界面。尽管如此,有些项目建立在lib2to3
之上,source code非常易读。如果API稳定性存在问题,您可以将其分叉。
答案 1 :(得分:2)
我非常喜欢SimpleParse,但我从未尝试过它Python grammar(BTW,它是一种确定性的语法吗?)。如果它窒息,PLY将完成这项工作。
请参阅此compilation有关Python解析工具的信息。
答案 2 :(得分:1)
我建议您查看我的图书馆:https://github.com/erezsh/lark
它可以解析所有无上下文的语法,自动构建AST(带行和列号),并接受EBNF格式的语法,这被认为是标准。
它可以轻松地解析像Python这样的语言,并且它可以比用Python编写的任何其他解析库更快地完成。
事实上,已经有example python grammar和parser