1个不稳定版本
| 0.1.0 | 2020年6月7日 |
|---|
#157 在 #parser-generator
用于 pegtastic
285KB
4.5K SLoC
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中查看语法规则语法参考
与类似解析器生成器的比较
| 包 | 解析器类型 | 动作代码 | 集成 | 输入类型 | 优先级提升 | 参数化规则 | 流输入 |
|---|---|---|---|---|---|---|---|
| PEG | PEG | 在语法中 | 过程宏(代码块) | &str, &[T], 自定义 |
是 | 是 | 否 |
| 害虫 | PEG | 外部 | 过程宏(文件) | &str |
是 | 否 | 否 |
| nom | 组合器 | 在源代码中 | 库 | &[u8],自定义 |
否 | 是 | 是 |
| lalrpop | LR(1) | 在语法中 | 构建脚本 | &str |
否 | 是 | 否 |
依赖项
~82KB