2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2020年9月9日 |
---|---|
0.1.0 | 2018年6月17日 |
在 解析器实现 中排名 #2369
每月下载量:23 次
在 3 crate 中使用
235KB
6K SLoC
rust-python-parser
Rust 库和程序的 Python 解析器。
目前支持 Python 3.8 的语法(除类型注释外,类型注释像普通注释一样被忽略)
lib.rs
:
基于 nom 的 Python 解析器,附带一些实用工具。
恐慌
从不(除了栈溢出)。
数字
Python 的整数字面量可能非常大。这得益于 num_bigint
crate。禁用 bigint
功能将回退到 u64
。
字符串编码
ast::PyString
如果启用 wtf8
功能(默认),则使用 WTF8 编码,允许完全支持 Python 的字符串字面量。
如果该功能被禁用,它们默认为常规 Rust 字符串。注意,如果没有启用 wtf8
功能,一些有效的字符串字面量将被错误地解析(丢失字符)。
Python 版本支持
目前支持 Python 3.7 的语法(以及 Python 3.8 一直到 2018-09-22)。
示例
use python_parser::ast::*;
let code = "print(2 + 3, fd=sys.stderr)";
let ast = python_parser::file_input(python_parser::make_strspan(code))
.unwrap()
.1;
assert_eq!(ast,
vec![
Statement::Assignment(
vec![
Expression::Call(
Box::new(Expression::Name("print".to_string())),
vec![
Argument::Positional(
Expression::Bop(
Bop::Add,
Box::new(Expression::Int(2u32.into())),
Box::new(Expression::Int(3u32.into())),
)
),
Argument::Keyword(
"fd".to_string(),
Expression::Attribute(
Box::new(Expression::Name("sys".to_string())),
"stderr".to_string(),
)
),
]
),
],
vec![],
)
]
);
依赖项
~1–1.4MB
~25K SLoC