parsell 0.3.0

Parsell LL(1) streaming parser combinators
docs.rs failed to build parsell-0.3.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: parsell-0.6.5

Parsell: an LL(1) streaming parser combinator library for Rust

The goal of this library is to provide parser combinators that:

  • are optimized for LL(1) grammars,
  • support streaming input,
  • do as little buffering or copying as possible, and
  • do as little dynamic method dispatch as possible.

It is based on:

Rustdoc | Crate | CI

Example

extern crate parsell;
use parsell::{character,Parser,Uncommitted,Committed,Stateful};
use parsell::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.