8 个版本

使用旧的 Rust 2015

0.0.8 2016 年 2 月 5 日
0.0.7 2016 年 2 月 4 日
0.0.2 2016 年 1 月 30 日

#334 in 解析器工具

每月 26 次下载

MPL-2.0 许可证

76KB
1K SLoC

parsimonious: Rust 的解析器组合器库

该库的目标是提供解析器组合器,

  • 针对 LL(1) 文法进行了优化,
  • 支持流式输入,
  • 尽可能少地进行缓冲或复制,
  • 尽可能少地进行动态方法调度。

它基于 G. Hutton 和 E. Meijer 的

Rustdoc | Crate | CI

示例

extern crate parsimonious;
use parsimonious::{character,Parser,Uncommitted,Committed,Stateful};
use parsimonious::ParseResult::{Done,Continue};
#[allow(non_snake_case)]
fn main() {

    // A sequence of alphanumerics, saved in a string buffer
    let ALPHANUMERIC = character(char::is_alphanumeric);
    let ALPHANUMERICS = ALPHANUMERIC.star(String::new);

    // If you provide complete input to the parser, you'll get back a Done response:
    match ALPHANUMERICS.init().parse("abc123!") {
        Done("!",result) => assert_eq!(result, "abc123"),
        _ => panic!("Can't happen."),
    }

    // If you provide incomplete input to the parser, you'll get back a Continue response:
    match ALPHANUMERICS.init().parse("abc") {
        Continue("",parsing) => match parsing.parse("123!") {
            Done("!",result) => assert_eq!(result, "abc123"),
            _ => panic!("Can't happen."),
        },
        _ => panic!("Can't happen."),
    }

}

示例经过与 Skeptic 测试。

无运行时依赖

~150KB