pub struct Context<P, Data, StateIndex>where
P: Parser<Term = <Data as DataStack>::Term, NonTerm = <Data as DataStack>::NonTerm, StateIndex = StateIndex>,
Data: DataStack,{
pub state_stack: Vec<StateIndex>,
/* private fields */
}Expand description
A struct that maintains the current state and the values associated with each symbol.
Fields§
§state_stack: Vec<StateIndex>stacks hold the values associated with each shifted symbol.
Implementations§
Source§impl<P, Data, StateIndex> Context<P, Data, StateIndex>
impl<P, Data, StateIndex> Context<P, Data, StateIndex>
Sourcepub fn new(
userdata: <Data as DataStack>::UserData,
) -> Context<P, Data, StateIndex>
pub fn new( userdata: <Data as DataStack>::UserData, ) -> Context<P, Data, StateIndex>
Create a new context.
state_stack is initialized with [0] (root state).
Sourcepub fn with_default_userdata() -> Context<P, Data, StateIndex>
pub fn with_default_userdata() -> Context<P, Data, StateIndex>
Create a new context using Default::default() as user data.
Sourcepub fn with_capacity(
capacity: usize,
userdata: <Data as DataStack>::UserData,
) -> Context<P, Data, StateIndex>
pub fn with_capacity( capacity: usize, userdata: <Data as DataStack>::UserData, ) -> Context<P, Data, StateIndex>
Create a new context with given capacity of state_stack and data_stack.
state_stack is initialized with [0] (root state).
Sourcepub fn with_capacity_and_default_userdata(
capacity: usize,
) -> Context<P, Data, StateIndex>
pub fn with_capacity_and_default_userdata( capacity: usize, ) -> Context<P, Data, StateIndex>
Create a new context with capacity using Default::default() as user data.
Sourcepub fn userdata(&self) -> &<Data as DataStack>::UserData
pub fn userdata(&self) -> &<Data as DataStack>::UserData
Borrow the user data owned by this context.
Sourcepub fn userdata_all(
&self,
) -> impl Iterator<Item = &<Data as DataStack>::UserData>
pub fn userdata_all( &self, ) -> impl Iterator<Item = &<Data as DataStack>::UserData>
Borrow the user data owned by this context as an iterator.
Sourcepub fn userdata_mut(&mut self) -> &mut <Data as DataStack>::UserData
pub fn userdata_mut(&mut self) -> &mut <Data as DataStack>::UserData
Mutably borrow the user data owned by this context.
Sourcepub fn userdata_all_mut(
&mut self,
) -> impl Iterator<Item = &mut <Data as DataStack>::UserData>
pub fn userdata_all_mut( &mut self, ) -> impl Iterator<Item = &mut <Data as DataStack>::UserData>
Mutably borrow the user data owned by this context as an iterator.
Sourcepub fn accept(
self,
) -> Result<(<Data as DataStack>::StartType, <Data as DataStack>::UserData), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn accept( self, ) -> Result<(<Data as DataStack>::StartType, <Data as DataStack>::UserData), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
End this context and pop the value of the start symbol from the data stack.
Sourcepub fn accept_all(
self,
) -> Result<impl Iterator<Item = (<Data as DataStack>::StartType, <Data as DataStack>::UserData)>, ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn accept_all( self, ) -> Result<impl Iterator<Item = (<Data as DataStack>::StartType, <Data as DataStack>::UserData)>, ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
End this context and return an iterator with the start symbol and final user data.
pub fn can_accept(&self) -> bool
Sourcepub fn state_stack(&self) -> impl Iterator<Item = usize>
pub fn state_stack(&self) -> impl Iterator<Item = usize>
Get iterator of state stack
Sourcepub fn expected_token(
&self,
) -> (BTreeSet<<P as Parser>::TermClass>, BTreeSet<<P as Parser>::NonTerm>)
pub fn expected_token( &self, ) -> (BTreeSet<<P as Parser>::TermClass>, BTreeSet<<P as Parser>::NonTerm>)
Simulate parser and get next expected (terminals, non-terminals) for current context.
Sourcepub fn expected_token_str<'a>(
&self,
) -> (impl Iterator<Item = &'static str>, impl Iterator<Item = &'static str>)
pub fn expected_token_str<'a>( &self, ) -> (impl Iterator<Item = &'static str>, impl Iterator<Item = &'static str>)
Same as expected_token(), but returns as printable type.
Sourcepub fn feed(
&mut self,
term: <Data as DataStack>::Term,
) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn feed( &mut self, term: <Data as DataStack>::Term, ) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
Feed one terminal to parser, and update stacks.
This will use Default::default() for location.
Sourcepub fn feed_location(
&mut self,
term: <P as Parser>::Term,
location: <Data as DataStack>::Location,
) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn feed_location( &mut self, term: <P as Parser>::Term, location: <Data as DataStack>::Location, ) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
Feed one terminal with location to parser, and update stacks.
Sourcepub fn can_feed(&self, term: &<Data as DataStack>::Term) -> bool
pub fn can_feed(&self, term: &<Data as DataStack>::Term) -> bool
Check if term can be feeded to current state.
This does not simulate for reduce action error, or panic mode.
So this function will return false even if term can be shifted as error token,
and will return true if Err variant is returned by reduce_action.