Python解析器,用于类似Python的语言

时间:2012-02-23 20:05:49

标签: python parsing code-generation

我正在寻找为源文件编写Python导入过滤器或预处理器,这些源文件本质上是带有额外语言元素的Python。目标是读取源文件,将其解析为抽象语法树,应用一些转换以实现语言的新部分,并编写有效的Python源,然后CPython可以使用它。我想用Python编写这个东西,我正在为这个任务寻找最好的解析器。

Python内置的解析器不合适,因为它要求源文件是实际的Python,而这些不是。有大量的解析器(或解析器生成器)可以与Python一起使用,但如果没有大量的研究,很难说哪个是最适合我的需求。

总之,我的要求是:

  1. Parser是用Python编写的,或者是Python绑定。
  2. 附带我可以调整的Python语法,或者可以轻松地使用其他地方可用的可调整Python语法(例如http://docs.python.org/reference/grammar.html)。
  3. 转换后可以重新序列化AST。
  4. 使用API​​时不应该太可怕。
  5. 有什么建议吗?

3 个答案:

答案 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 grammarparser