Module combinator

List of parsers and combinators

Note: this list is meant to provide a nicer way to find a parser than reading through the documentation on docs.rs. Function combinators are organized in module so they are a bit easier to find.

Basic elements

Those are used to take a series of tokens for the lowest level elements of your grammar, like, "here is a dot", or "here is an big endian integer".

combinator usage input new input output comment
[one_of][crate::token::one_of] one_of(['a', 'b', 'c']) "abc" "bc" Ok('a') Matches one of the provided [set of tokens][crate::stream::ContainsToken] (works with non ASCII characters too)
[none_of][crate::token::none_of] none_of(['a', 'b', 'c']) "xyab" "yab" Ok('x') Matches anything but one of the provided [set of tokens][crate::stream::ContainsToken]
[literal][crate::token::literal] "hello" "hello world" " world" Ok("hello") Recognizes a specific suite of characters or bytes (see also [Caseless][crate::ascii::Caseless])
[take][crate::token::take] take(4) "hello" "o" Ok("hell") Takes a specific number of bytes or characters
[take_while][crate::token::take_while] take_while(0.., is_alphabetic) "abc123" "123" Ok("abc") Returns the longest slice of bytes or characters for which the provided [set of tokens][crate::stream::ContainsToken] matches.
[take_till][crate::token::take_till] take_till(0.., is_alphabetic) "123abc" "abc" Ok("123") Returns a slice of bytes or characters until the provided [set of tokens][crate::stream::ContainsToken] matches. This is the reverse behaviour from take_while: take_till(f) is equivalent to take_while(0.., |c| !f(c))
[take_until][crate::token::take_until] take_until(0.., "world") "Hello world" "world" Ok("Hello ") Returns a slice of bytes or characters until the provided [literal][crate::token::literal] is found.

Choice combinators

combinator usage input new input output comment
alt alt(("ab", "cd")) "cdef" "ef" Ok("cd") Try a list of parsers and return the result of the first successful one
dispatch - - - - match for parsers
permutation permutation(("ab", "cd", "12")) "cd12abc" "c" Ok(("ab", "cd", "12")) Succeeds when all its child parser have succeeded, whatever the order

Sequence combinators

combinator usage input new input output comment
[(...) (tuples)][crate::Parser] ("ab", "XY", take(1)) "abXYZ!" "!" Ok(("ab", "XY", "Z")) Parse a series of values
[seq!] seq!(_: '(', take(2), _: ')') "(ab)cd" "cd" Ok("ab") Parse a series of values, discarding those you specify
delimited delimited('(', take(2), ')') "(ab)cd" "cd" Ok("ab") Parse three values, discarding the first and third value
preceded preceded("ab", "XY") "abXYZ" "Z" Ok("XY") Parse two values, discarding the first value
terminated terminated("ab", "XY") "abXYZ" "Z" Ok("ab") Parse two values, discarding the second value
separated_pair separated_pair("hello", ',', "world") "hello,world!" "!" Ok(("hello", "world")) Parse three values, discarding the middle value

Applying a parser multiple times

combinator usage input new input output comment
repeat repeat(1..=3, "ab") "ababc" "c" Ok(vec!["ab", "ab"]) Applies the parser between m and n times (n included) and returns the list of results in a Vec
repeat_till repeat_till(0.., "ab", "ef") "ababefg" "g" Ok((vec!["ab", "ab"], "ef")) Applies the first parser until the second applies. Returns a tuple containing the list of results from the first in a Vec and the result of the second
separated separated(1..=3, "ab", ",") "ab,ab,ab." "." Ok(vec!["ab", "ab", "ab"]) Applies the parser and separator between m and n times (n included) and returns the list of results in a Vec
Repeat::fold repeat(1..=2, be_u8).fold(|| 0, |acc, item| acc + item) [1, 2, 3] [3] Ok(3) Applies the parser between m and n times (n included) and folds the list of return value

Partial related

Modifiers

Error management and debugging

Remaining combinators

Text parsing

Character test functions

Use these functions with a combinator like take_while:

Binary format parsing

Integers

Parsing integers from binary formats can be done in two ways: With parser functions, or combinators with configurable endianness.

Bit stream parsing

Modules