Jas*_*ker 11 python dsl bytecode abstract-syntax-tree expression-trees
我想破解Python解释器并尝试创建一个小型DSL.是否有任何模块我可以做这样的理论代码(类似于LINQ表达式树)?
expression_tree = Function(
Print(
String('Hello world!')
)
)
compile_to_bytecode(expression_tree)
Run Code Online (Sandbox Code Playgroud)
或者只是更容易生成Python源代码?使用C或SWIG或Cython可以使这更容易吗?
Ale*_*lli 11
ast
正如另一个答案所示,通过工作并将树编译成字节码可能是最简单的; 生成源并编译它们,几乎同样好.
但是,要探索更低级别的方法,请查看此页面中的链接; 我发现byteplay特别有用(目前不适用于2.6或3.*,只有2.4或2.5,但我认为修复2.6应该很容易,正如目前在其跟踪器中所讨论的那样).我没有使用Phil Eby的同样功能的BytecodeAssembler,但考虑到作者的声誉,我确信值得一试!
在Python 2.X中,您通常会使用compiler
模块及其ast
子模块来处理此问题(但请注意,自2.6版本以来,此模块已弃用).在Python 3.X中,您只需使用ast
.
两者都提供了一个compile()
函数,它将从源/ AST转到"可以由exec
语句执行的代码对象或" eval()
.
归档时间: |
|
查看次数: |
3558 次 |
最近记录: |