Struct pest::ParserState
[−]
[src]
pub struct ParserState<'i, R: RuleType> { pub atomicity: Atomicity, pub stack: Vec<Span<'i>>, // some fields omitted }
A struct
which contains the complete state of a Parser
.
Fields
atomicity: Atomicity
Specifies current atomicity
stack: Vec<Span<'i>>
Stack of Span
s
Methods
impl<'i, R: RuleType> ParserState<'i, R>
[src]
fn rule<F>(
&mut self,
rule: R,
pos: Position<'i>,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>, Position<'i>) -> Result<Position<'i>, Position<'i>>,
[src]
&mut self,
rule: R,
pos: Position<'i>,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>, Position<'i>) -> Result<Position<'i>, Position<'i>>,
Wrapper needed to generate tokens.
Examples
enum Rule { a } let input = "a"; let pairs: Vec<_> = pest::state(input, |state, pos| { state.rule(Rule::a, pos, |_, p| Ok(p)) }).unwrap().collect(); assert_eq!(pairs.len(), 1);
fn sequence<F>(&mut self, f: F) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
[src]
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
Wrapper which removes Tokens
in case of a sequence's failure.
Usually used in conjunction with
Position::sequence
.
Examples
enum Rule { a } let input = "a"; let pairs: Vec<_> = pest::state(input, |state, pos| { state.sequence(move |state| { pos.sequence(|p| { state.rule(Rule::a, p, |_, p| Ok(p)).and_then(|p| { p.match_string("b") }) }) }).or_else(|p| { Ok(p) }) }).unwrap().collect(); assert_eq!(pairs.len(), 0);
fn lookahead<F>(
&mut self,
is_positive: bool,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
[src]
&mut self,
is_positive: bool,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
Wrapper which stops Token
s from being generated.
Usually used in conjunction with
Position::lookahead
.
Examples
enum Rule { a } let input = "a"; let pairs: Vec<_> = pest::state(input, |state, pos| { state.lookahead(true, move |state| { state.rule(Rule::a, pos, |_, p| Ok(p)) }) }).unwrap().collect(); assert_eq!(pairs.len(), 0);
fn atomic<F>(
&mut self,
atomicity: Atomicity,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
[src]
&mut self,
atomicity: Atomicity,
f: F
) -> Result<Position<'i>, Position<'i>> where
F: FnOnce(&mut ParserState<'i, R>) -> Result<Position<'i>, Position<'i>>,
Wrapper which stops Token
s from being generated according to is_atomic
.
Examples
enum Rule { a } let input = "a"; let pairs: Vec<_> = pest::state(input, |state, pos| { state.atomic(Atomicity::Atomic, move |state| { state.rule(Rule::a, pos, |_, p| Ok(p)) }) }).unwrap().collect(); assert_eq!(pairs.len(), 0);