Crates.io | parsimonious |
lib.rs | parsimonious |
version | 0.0.8 |
source | src |
created_at | 2016-01-29 19:26:41.144032 |
updated_at | 2016-02-05 15:18:53.695316 |
description | Parsimonious parser combinators |
homepage | |
repository | https://github.com/asajeffrey/parsimonious |
max_upload_size | |
id | 4016 |
size | 107,595 |
The goal of this library is to provide parser combinators that:
It is based on:
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."),
}
}
Example tested with Skeptic.