用于在 Python 中编程抽象语法树的库
我正在创建一棵树来表示一种简单的语言。我非常熟悉抽象语法树,并致力于在 C++ 中构建和使用它们的框架。是否有用于指定或操作任意 AST 的标准 python 库?如果做不到这一点,是否有一个可用于相同目的的树库?
请注意,我没有操作 Python AST,因此我认为 AST 模块不合适。
I'm creating a tree to represent a simple language. I'm very familiar with Abstract Syntax Trees, and have worked on frameworks for building and using them in C++. Is there a standard python library for specifying or manipulating arbitrary ASTs? Failing that, is there a tree library which is useful for the same purpose?
Note, I am not manipulating Python ASTs, so I think the AST module isn't suitable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在 Python 中实现 AST 非常简单。例如,对于我的 pycparser 项目(Python 中的完整 C 解析器),我已经根据想法实现了 AST借用Python的模块。各种 AST 节点在 YAML 配置文件中指定,我在 Python 本身中为这些节点生成 Python 代码。
ASTs are very simple to implement in Python. For example, for my pycparser project (a complete C parser in Python) I've implemented ASTs based on ideas borrowed from Python's modules. The various AST nodes are specified in a YAML configuration file, and I generate Python code for these nodes in Python itself.
pyast
是一个用于构建声明性抽象语法树的包。pyast
is a package for building declarative abstract syntax trees.如果在 pyparsing 中将语法元素表示为表达式,则可以将解析操作附加到每个表达式,该表达式返回一个类实例,其中包含特定于解析器的类型中的已解析标记。 pyparsing wiki 上有几个示例说明了这种技术(invRegex.py、simpleBool.py 和 evalArith.py)。 (这些语法都使用了内置的operatorPrecedence,这会掩盖一些语法结构,但是
If you represent your grammar elements as expressions in pyparsing, you can attach a parse action to each expression which returns a class instance containing the parsed tokens in a parser-specific type. There are a couple of examples on the pyparsing wiki that illustrate this technique (invRegex.py, simpleBool.py and evalArith.py). (These grammars all use the operatorPrecedence built-in, which can obscure some of the grammar structure, but
这篇博客文章虽然缺乏实现细节,但描述了 Python AST 可以实现的一个很好的接口。
http://chris-lamb.co.uk /2006/12/08/visitor-pattern-in-python/
This blog entry, though short on implementation detail, describes a nice interface that Python ASTs could implement.
http://chris-lamb.co.uk/2006/12/08/visitor-pattern-in-python/