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