17个版本
0.3.1 | 2024年5月16日 |
---|---|
0.3.0 | 2024年5月13日 |
0.2.3 | 2024年1月24日 |
0.1.12 | 2024年1月9日 |
0.1.4 | 2023年10月28日 |
#236 在 进程宏
39 每月下载量
用于 2 crates
130KB
3.5K SLoC
python-ast-rs
使用Python 3 ast库通过Rust库访问Python AST。因为它依赖于Python本身来解析Python,所以它应该非常接近参考实现。然而,如果语法树有重大变化,底层Python语言的变化可能会阻止它完全工作。
此项目处于非常早期阶段,应被视为完全不稳定的。
用法
将Python文件读入AST的操作如下
use python_ast::parse;
fn read_python_file(input: std::path::Path) {
let py = read_to_string(input).unwrap();
let ast = parse(&py, "mod_name.py").unwrap();
println!("{:?}", ast);
}
您还可以使用CodeGen trait将Python代码转换为Rust代码。请注意,此功能极其不稳定且为实验性质。
use python_ast::{parse, CodeGen, CodeGenContext, PythonOptions, SymbolTableScopes};
fn read_python_file(input: std::path::Path) {
let py = read_to_string(input).unwrap();
let ast = parse(&py, "mod_name.py").unwrap();
let rust = ast.to_rust(Context::Module("mod_name".to_string(), PythonOptions::default(), SymbolTableScopes::new())).unwrap();
println!("{}", rust);
}
注意事项
此项目的目标是创建一个尽可能接近参考语言的完全编译的Python样语言,同时具有Rust的静态类型和无需担心的并发优势。目前,最好将其视为一个概念验证,而不是一个可行的工具,但我希望这会改变。
依赖项
~7–13MB
~148K SLoC