#语法 #解析器 #解析生成器 #错误 #解析错误 #表达式 #pegtastic

pegtastic-runtime

pegtastic语法的运行时支持。要使用pegtastic,请参阅pegtastic包。

1个不稳定版本

0.1.0 2020年6月7日

#307解析工具

每月25次下载
用于2 个

MIT许可证

9KB
193

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中查看语法规则语法参考

与类似解析生成器的比较

crate 解析器类型 操作代码 集成 输入类型 优先级提升 参数化规则 流式输入
peg PEG 在语法中 proc宏(块) &str&[u8]、自定义
pest PEG 外部 proc宏(文件) &str
nom 组合器 在源代码中 &[u8]、自定义
lalrpop LR(1) 在语法中 构建脚本 &str

没有运行时依赖