1个不稳定版本
0.1.0 | 2020年6月7日 |
---|
#307在解析工具
每月25次下载
用于2 个包
9KB
193 行
Rust中的解析表达式语法
pegtastic
是rust-peg
的实验性第三方分支。此分支尚未准备好供一般使用。
rust-peg
是一个基于解析表达式语法形式主义的简单且灵活的解析生成器。它提供了一个Rust宏,可以从语法的简洁定义构建递归下降解析器。
特性
- 从
&str
、&[u8]
、&[T]
或自定义类型实现特质解析输入 - 自定义解析错误报告
- 规则可以接受参数以创建可重用的规则模板
- 前缀/后缀/中缀表达式的优先级提升
- 在语法定义或其中嵌入的Rust代码中发生错误时,提供有用的
rustc
错误信息 - 规则级别的跟踪以调试语法
示例
pegtastic::parser!{
grammar list_parser() for str {
rule number() -> u32
= n:$(['0'..='9']+) { n.parse().unwrap() }
pub rule list() -> Vec<u32>
= "[" l:number() ** "," "]" { l }
}
}
pub fn main() {
assert_eq!(list_parser::list("[1,1,2,3,5,8]"), Ok(vec![1, 1, 2, 3, 5, 8]));
}
请参阅测试以获取更多示例
在rustdoc中查看语法规则语法参考
与类似解析生成器的比较
crate | 解析器类型 | 操作代码 | 集成 | 输入类型 | 优先级提升 | 参数化规则 | 流式输入 |
---|---|---|---|---|---|---|---|
peg | PEG | 在语法中 | proc宏(块) | &str 、&[u8] 、自定义 |
是 | 是 | 否 |
pest | PEG | 外部 | proc宏(文件) | &str |
是 | 否 | 否 |
nom | 组合器 | 在源代码中 | 库 | &[u8] 、自定义 |
否 | 是 | 是 |
lalrpop | LR(1) | 在语法中 | 构建脚本 | &str |
否 | 是 | 否 |