#parser-generator #parser #grammar #peg

pegtastic

一个简单的解析表达式语法(PEG)解析器生成器

1 个不稳定版本

0.1.0 2020年6月7日

#215解析工具

MIT 许可证

54KB
656

Rust中的解析表达式语法

文档 | 发布说明

pegtasticrust-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