A mini parser combinator library written in rust. Inspired by the Javascript Version.
string(target: &str)
: Matches on a stringfoo
letter()
: Matches on a single letterletters()
: Matches on one or more lettersdigit()
: Matches on a single digitdigits()
: Matches on one or more digits
many(p: Parser)
: Matches on one or more ofp
's capture groupalt(ps: Vec<Parser>)
: Matches on the first successful capture inps
sequence(ps: Vec<Parser>)
: Matches on parsers inps
sequentially
use crate::parsers::letters;
let letter_parser = letters();
assert_eq(letter_parser.run("abc").result, Some("abc".to_owned));
use crate::effects::{alt, sequence};
use crate::parsers::{letters, digits};
// Parse either letters or digits
let letters_or_digits_parser = alt(Vec::from([letters(), digits()]));
assert_eq(letters_or_digits_parser.run("abc").result, Some("abc".to_owned));
assert_eq(letters_or_digits_parser.run("123").result, Some("123".to_owned));
// Parse letters followed by digits
let letters_then_digits_parser = sequence(Vec::from([letters(), digits()]));
assert_eq(letters_then_digits_parser.run("abc123").result, Some("abc123".to_owned));