pub struct Context<Data, StateIndex, const MAX_REDUCE_RULES: usize>where
Data: DataStack,{ /* private fields */ }Expand description
A struct that maintains the current state and the values associated with each symbol. This handles the divergence and merging of the parser.
Implementations§
Source§impl<Data, StateIndex, const MAX_REDUCE_RULES: usize> Context<Data, StateIndex, MAX_REDUCE_RULES>
impl<Data, StateIndex, const MAX_REDUCE_RULES: usize> Context<Data, StateIndex, MAX_REDUCE_RULES>
Sourcepub fn new() -> Context<Data, StateIndex, MAX_REDUCE_RULES>
pub fn new() -> Context<Data, StateIndex, MAX_REDUCE_RULES>
Create a new context.
current_nodes is initialized with a root node.
pub fn node(&self, node: usize) -> &Node<Data, StateIndex>
pub fn node_mut(&mut self, node: usize) -> &mut Node<Data, StateIndex>
Sourcepub fn debug_check(&self)
pub fn debug_check(&self)
for debugging; checks for memory leak, not freed nodes, etc.
Sourcepub fn states(&self) -> impl Iterator<Item = usize>
pub fn states(&self) -> impl Iterator<Item = usize>
Get current states in every diverged paths.
Sourcepub fn state_stacks(&self) -> impl Iterator<Item = impl Iterator<Item = usize>>
pub fn state_stacks(&self) -> impl Iterator<Item = impl Iterator<Item = usize>>
Get iterators of state stacks in all diverged paths.
Sourcepub fn accept<P>(
self,
parser: &P,
userdata: &mut <Data as DataStack>::UserData,
) -> Result<impl Iterator<Item = <Data as DataStack>::StartType>, ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn accept<P>( self, parser: &P, userdata: &mut <Data as DataStack>::UserData, ) -> Result<impl Iterator<Item = <Data as DataStack>::StartType>, ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
End this context and return iterator of the start value from the data stack.
Sourcepub fn trace<P>(
&self,
parser: &P,
) -> HashSet<<Data as DataStack>::NonTerm, FxBuildHasher>
pub fn trace<P>( &self, parser: &P, ) -> HashSet<<Data as DataStack>::NonTerm, FxBuildHasher>
Get set of %trace non-terminal symbols that current context is trying to parse.
The order of the returned set does not mean anything. If the current context is attempting to recognize following grammar:
Chunk -> Statement -> IfStatement -> ReturnStatement -> …
Then the returned set will be:
[Chunk, Statement, IfStatement, ReturnStatement]
Sourcepub fn backtraces<'a, P>(
&'a self,
parser: &'a P,
) -> impl Iterator<Item = Backtrace<<P as Parser>::TermClass, <P as Parser>::NonTerm>> + 'a
pub fn backtraces<'a, P>( &'a self, parser: &'a P, ) -> impl Iterator<Item = Backtrace<<P as Parser>::TermClass, <P as Parser>::NonTerm>> + 'a
Get backtrace infos for all paths.
Sourcepub fn expected_token<P>(
&self,
parser: &P,
) -> (BTreeSet<<P as Parser>::TermClass>, BTreeSet<<P as Parser>::NonTerm>)
pub fn expected_token<P>( &self, parser: &P, ) -> (BTreeSet<<P as Parser>::TermClass>, BTreeSet<<P as Parser>::NonTerm>)
Get next expected (terminals, non-terminals) for current context.
Sourcepub fn expected_token_str<'a, P>(
&self,
parser: &P,
) -> (impl Iterator<Item = &'static str>, impl Iterator<Item = &'static str>)
pub fn expected_token_str<'a, P>( &self, parser: &P, ) -> (impl Iterator<Item = &'static str>, impl Iterator<Item = &'static str>)
Same as expected_token(), but returns as printable type.
Sourcepub fn feed<P>(
&mut self,
parser: &P,
term: <Data as DataStack>::Term,
userdata: &mut <Data as DataStack>::UserData,
) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn feed<P>( &mut self, parser: &P, term: <Data as DataStack>::Term, userdata: &mut <Data as DataStack>::UserData, ) -> 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<P>(
&mut self,
parser: &P,
term: <P as Parser>::Term,
userdata: &mut <Data as DataStack>::UserData,
location: <Data as DataStack>::Location,
) -> Result<(), ParseError<<Data as DataStack>::Term, <Data as DataStack>::Location, <Data as DataStack>::ReduceActionError>>
pub fn feed_location<P>( &mut self, parser: &P, term: <P as Parser>::Term, userdata: &mut <Data as DataStack>::UserData, 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 state stack.
Sourcepub fn can_feed<P>(&self, parser: &P, term: &<P as Parser>::Term) -> bool
pub fn can_feed<P>(&self, parser: &P, term: &<P as Parser>::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.