Trait parsell::Parser
[−]
[src]
pub trait Parser { fn or_else<P>(self, other: P) -> OrElseParser<Self, P> where Self: Sized { ... } fn and_then<P>(self, other: P) -> AndThenParser<Self, P> where Self: Sized { ... } fn try_and_then<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, TryZip> where Self: Sized { ... } fn and_then_try<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, ZipTry> where Self: Sized { ... } fn try_and_then_try<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, TryZipTry> where Self: Sized { ... } fn plus<F>(self, factory: F) -> PlusParser<Self, F> where Self: Sized { ... } fn star<F>(self, factory: F) -> StarParser<Self, F> where Self: Sized { ... } fn map<F>(self, f: F) -> MapParser<Self, F> where Self: Sized { ... } fn map2<F>(self, f: F) -> MapParser<Self, Function2<F>> where Self: Sized { ... } fn map3<F>(self, f: F) -> MapParser<Self, Function3<F>> where Self: Sized { ... } fn map4<F>(self, f: F) -> MapParser<Self, Function4<F>> where Self: Sized { ... } fn map5<F>(self, f: F) -> MapParser<Self, Function5<F>> where Self: Sized { ... } fn try_map<F>(self, f: F) -> MapParser<Self, Try<F>> where Self: Sized { ... } fn try_map2<F>(self, f: F) -> MapParser<Self, Try<Function2<F>>> where Self: Sized { ... } fn try_map3<F>(self, f: F) -> MapParser<Self, Try<Function3<F>>> where Self: Sized { ... } fn try_map4<F>(self, f: F) -> MapParser<Self, Try<Function4<F>>> where Self: Sized { ... } fn try_map5<F>(self, f: F) -> MapParser<Self, Try<Function5<F>>> where Self: Sized { ... } fn pipe<P>(self, other: P) -> PipeParser<Self, P> where Self: Sized { ... } fn buffer(self) -> BufferedParser<Self> where Self: Sized { ... } }
A trait for stateless parsers.
Parsers are implemented either as committed parsers, which cannot backtrack,
or uncommitted parsers, which can backtrack on their first token of input.
For example character(char::is_alphabetic)
is uncommitted because
it will backtrack on any non-alphabetic character, but
CHARACTER
is not, because it will produce None
rather than backtracking.
Provided Methods
fn or_else<P>(self, other: P) -> OrElseParser<Self, P> where Self: Sized
Choice between parsers
fn and_then<P>(self, other: P) -> AndThenParser<Self, P> where Self: Sized
Sequencing with a committed parser
fn try_and_then<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, TryZip> where Self: Sized
Sequencing with a committed parser (bubble any errors from this parser).
fn and_then_try<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, ZipTry> where Self: Sized
Sequencing with a committed parser (bubble any errors from that parser).
fn try_and_then_try<P>(self, other: P) -> MapParser<AndThenParser<Self, P>, TryZipTry> where Self: Sized
Sequencing with a committed parser (bubble any errors from either parser).
fn plus<F>(self, factory: F) -> PlusParser<Self, F> where Self: Sized
Iterate one or more times (returns an uncommitted parser).
fn star<F>(self, factory: F) -> StarParser<Self, F> where Self: Sized
Iterate zero or more times (returns a committed parser).
fn map<F>(self, f: F) -> MapParser<Self, F> where Self: Sized
Apply a function to the result
fn map2<F>(self, f: F) -> MapParser<Self, Function2<F>> where Self: Sized
Apply a 2-arguent function to the result
fn map3<F>(self, f: F) -> MapParser<Self, Function3<F>> where Self: Sized
Apply a 3-arguent function to the result
fn map4<F>(self, f: F) -> MapParser<Self, Function4<F>> where Self: Sized
Apply a 4-arguent function to the result
fn map5<F>(self, f: F) -> MapParser<Self, Function5<F>> where Self: Sized
Apply a 5-arguent function to the result
fn try_map<F>(self, f: F) -> MapParser<Self, Try<F>> where Self: Sized
Apply a function to the result (bubble any errors).
fn try_map2<F>(self, f: F) -> MapParser<Self, Try<Function2<F>>> where Self: Sized
Apply a 2-argument function to the result (bubble any errors).
fn try_map3<F>(self, f: F) -> MapParser<Self, Try<Function3<F>>> where Self: Sized
Apply a 3-argument function to the result (bubble any errors).
fn try_map4<F>(self, f: F) -> MapParser<Self, Try<Function4<F>>> where Self: Sized
Apply a 4-argument function to the result (bubble any errors).
fn try_map5<F>(self, f: F) -> MapParser<Self, Try<Function5<F>>> where Self: Sized
Apply a 5-argument function to the result (bubble any errors).
fn pipe<P>(self, other: P) -> PipeParser<Self, P> where Self: Sized
Take the results of iterating this parser, and feed it into another parser.
fn buffer(self) -> BufferedParser<Self> where Self: Sized
A parser which produces its input.
This does its best to avoid having to buffer the input. The result of a buffered parser may be borrowed (because no buffering was required) or owned (because buffering was required). Buffering is required in the case that the input was provided in chunks, rather than contiguously. For example:
fn ignore() {} let parser = character(char::is_alphabetic).plus(ignore).buffer(); match parser.parse("abc!") { Commit(Done("!",result)) => assert_eq!(result,Borrowed("abc")), _ => panic!("can't happen"), } match parser.parse("abc") { Commit(Continue("",parsing)) => match parsing.parse("def!") { Done("!",result) => assert_eq!(result,Owned::<'static,str>(String::from("abcdef"))), _ => panic!("can't happen"), }, _ => panic!("can't happen"), }
Implementors
impl<P, F> Parser for MapParser<P, F>
impl<P, Q> Parser for AndThenParser<P, Q>
impl<P, Q> Parser for OrElseParser<P, Q>
impl<P, F> Parser for OrEmitParser<P, F>
impl<P, F> Parser for PlusParser<P, F>
impl<P, F> Parser for StarParser<P, F>
impl<F> Parser for CharacterParser<F>
impl Parser for AnyCharacterParser
impl<F> Parser for TokenParser<F>
impl Parser for AnyTokenParser
impl<P> Parser for BufferedParser<P>
impl<P, Q> Parser for PipeParser<P, Q>