我正在寻找为源文件编写一个 Python 导入过滤器或预处理器,这些源文件本质上是带有额外语言元素的 Python。目标是读取源文件,将其解析为抽象语法树,应用一些转换以实现该语言的新部分,并编写有效的 Python 源代码,然后可由 CPython 使用。我想用 Python 编写这个东西,并且正在寻找适合该任务的最佳解析器。
Python 中内置的解析器并不合适,因为它要求源文件是真正的 Python,但事实并非如此。有大量的解析器(或解析器生成器)可以与 Python 一起使用,但如果没有大量的研究,很难判断哪个最适合我的需求。
总结来说,我的要求是:
- 解析器是用 Python 编写的或具有 Python 绑定。
- 附带一个我可以调整的 Python 语法,或者可以轻松使用其他地方可用的可调整的 Python 语法(例如http://docs.python.org/reference/grammar.html http://docs.python.org/reference/grammar.html).
- 转换后可以重新序列化 AST。
- 使用 API 应该不会太可怕。
有什么建议么?
第一个想到的是lib2to3 http://docs.python.org/library/2to3.html#module-lib2to3。它是 Python 解析器的完整纯 Python 实现。它读取一个Python语法文件,并根据这个语法解析Python源文件。它为执行 AST 操作和写回格式良好的 Python 代码提供了一个很好的基础设施——毕竟它的目的是在两种语法略有不同的类似 Python 的语言之间进行转换。
不幸的是它缺乏文档并且不能保证稳定的界面。有些项目建立在lib2to3
尽管如此,并且源代码 http://hg.python.org/cpython/file/80ab0b13eb04/Lib/lib2to3很有可读性。如果API稳定性是一个问题,你可以直接分叉它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)