1 个不稳定版本
0.1.0 | 2020年6月7日 |
---|
#215 在 解析工具
54KB
656 行
Rust中的解析表达式语法
pegtastic
是 rust-peg
的一个实验性第三方分支。此分支尚未准备供一般消费。
rust-peg
是一个简单但灵活的基于解析表达式语法(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 | 在语法中 | 进程宏(块) | &str 、&[T] 、自定义 |
是 | 是 | 否 |
pest | PEG | 外部 | 进程宏(文件) | &str |
是 | 否 | 否 |
nom | 组合器 | 在源中 | 库 | &[u8] 、自定义 |
否 | 是 | 是 |
lalrpop | LR(1) | 在语法中 | 构建脚本 | &str |
否 | 是 | 否 |
依赖项
~83KB