pub mod deterministic;
pub mod nondeterministic;
pub mod data_stack;
pub mod nonterminal;
pub mod terminalclass;
pub mod state;
pub use state::State;
#[derive(Clone, Copy)]
pub struct Precedence(u8);
impl Precedence {
#[inline]
pub fn none() -> Self {
Precedence(u8::MAX)
}
#[inline]
pub fn new(level: u8) -> Self {
debug_assert!(level < u8::MAX);
Precedence(level)
}
#[inline]
pub fn is_some(&self) -> bool {
self.0 < u8::MAX
}
pub fn unwrap(self) -> u8 {
debug_assert!(self.0 < u8::MAX);
self.0
}
}
pub trait Parser {
const ERROR_USED: bool;
type Term;
type TermClass: terminalclass::TerminalClass<Term = Self::Term>;
type NonTerm: nonterminal::NonTerminal;
type State: State<TermClass = Self::TermClass, NonTerm = Self::NonTerm>;
fn get_rules(&self) -> &[crate::rule::ProductionRule<Self::TermClass, Self::NonTerm>];
fn get_states(&self) -> &[Self::State];
fn precedence_types(&self, level: u8) -> Option<crate::rule::ReduceType>;
}