8 个版本
使用旧的 Rust 2015
0.0.8 | 2016 年 2 月 5 日 |
---|---|
0.0.7 | 2016 年 2 月 4 日 |
0.0.2 | 2016 年 1 月 30 日 |
#334 in 解析器工具
每月 26 次下载
76KB
1K SLoC
parsimonious: Rust 的解析器组合器库
该库的目标是提供解析器组合器,
- 针对 LL(1) 文法进行了优化,
- 支持流式输入,
- 尽可能少地进行缓冲或复制,
- 尽可能少地进行动态方法调度。
它基于 G. Hutton 和 E. Meijer 的
- 《Haskell 中的单调解析》,JFP 8(4) pp. 437-444,以及 G. Couprie 的
- 《Nom,逐字节吃数据》。
示例
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