use std::fmt::Debug;
use std::fmt::Display;
#[derive(Clone, Debug)]
pub struct ParseError<Term, Location, ReduceActionError> {
pub term: crate::TerminalSymbol<Term>,
pub location: Option<Location>,
pub reduce_action_errors: Vec<ReduceActionError>,
pub no_precedences: Vec<usize>,
pub(crate) states: Vec<usize>,
}
impl<Term, Location, ReduceActionError> ParseError<Term, Location, ReduceActionError> {
pub fn location(&self) -> &Option<Location> {
&self.location
}
pub fn term(&self) -> &crate::TerminalSymbol<Term> {
&self.term
}
pub fn states(&self) -> impl Iterator<Item = usize> + '_ {
self.states.iter().copied()
}
}
impl<Term, Location, ReduceActionError> Display for ParseError<Term, Location, ReduceActionError>
where
Term: Display,
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ParseError: {}, States: {:?}", self.term, self.states)
}
}