#语法 #解析器 # #解析器生成器 #过程宏 #表达式 #pegtastic

二进制 pegtastic-macros

pegtastic的过程宏。要使用pegtastic,请查看pegtastic包。

1个不稳定版本

0.1.0 2020年6月7日

#157#parser-generator


用于 pegtastic

MIT 许可证

285KB
4.5K SLoC

Rust中的解析表达式文法

文档 | 发布说明

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