我正在创建一棵树来表示一种简单的语言。我对抽象语法树非常熟悉,并且一直致力于在 C++ 中构建和使用它们的框架。是否有用于指定或操作任意 AST 的标准 python 库?如果做不到这一点,是否有一个对相同目的有用的树库?
注意,我不是在操作Python ASTs,所以我认为 AST 模块不合适。
我正在创建一棵树来表示一种简单的语言。我对抽象语法树非常熟悉,并且一直致力于在 C++ 中构建和使用它们的框架。是否有用于指定或操作任意 AST 的标准 python 库?如果做不到这一点,是否有一个对相同目的有用的树库?
注意,我不是在操作Python ASTs,所以我认为 AST 模块不合适。
AST 在 Python 中实现起来非常简单。例如,对于我的pycparser项目(Python 中的一个完整的 C 解析器),我基于从 Python 模块中借鉴的想法实现了 AST。各种 AST 节点在 YAML 配置文件中指定,我在 Python 本身中为这些节点生成 Python 代码。
pyast
是一个用于构建声明性抽象语法树的包。
如果您在 pyparsing 中将语法元素表示为表达式,则可以将解析操作附加到每个表达式,该操作返回一个类实例,其中包含特定于解析器类型的已解析标记。pyparsing wiki 上有几个示例说明了这种技术(invRegex.py、simpleBool.py和evalArith.py)。(这些文法都使用了内置的operatorPrecedence,可以掩盖一些文法结构,但是
这篇博文虽然缺少实现细节,但描述了 Python AST 可以实现的一个很好的接口。
http://chris-lamb.co.uk/2006/12/08/visitor-pattern-in-python/