繁体   English   中英

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

[英]Python parser for Python-like language

我正在寻找为源文件编写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方式工作不应该太可怕。

有什么建议?

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

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

我非常喜欢SimpleParse ,但我从来没有尝试过Python语法 (BTW,它是一种确定性的语法吗?)。 如果它窒息, PLY将完成这项工作。

请参阅有关Python解析工具的此汇编

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

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

它可以很容易地解析像Python这样的语言,并且它可以比用Python编写的任何其他解析库更快地完成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM