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

kin*_*all 13 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方式工作不应该太可怕.

有什么建议?

Sve*_*ach 9

首先想到的是lib2to3.它是Python解析器的完整纯Python实现.它读取Python语法文件并根据此语法解析Python源文件.它为执行AST操作和回写格式良好的Python代码提供了一个很好的基础设施 - 毕竟它的目的是在两种类似Python的语言之间进行转换,语法略有不同.

不幸的是,它缺乏文档,并不能保证稳定的界面.lib2to3尽管如此,仍有一些项目可以构建,源代码非常易读.如果API稳定性是一个问题,您可以将其分叉.


Ere*_*rez 5

我建议您查看我的库:https://github.com/erezsh/lark

它可以解析所有上下文无关语法,自动构建 AST(带有行号和列号),并接受 EBNF 格式的语法,这被认为是标准。

它可以轻松解析像 Python 这样的语言,并且比任何其他用 Python 编写的解析库更快。

事实上,已经有一个python 语法解析器的示例