use cfg_grammar::RuleContainer;
use super::FirstSets;
use super::PerSymbolSets;
use super::PredictSets;
pub struct LastSets {
map: PerSymbolSets,
}
impl LastSets {
pub fn new<G>(grammar: &G) -> Self
where
G: RuleContainer + Default,
{
let reversed_grammar = grammar.reverse();
let map = {
let first_sets = FirstSets::new(&reversed_grammar);
first_sets.map
};
LastSets { map }
}
}
impl PredictSets for LastSets {
fn predict_sets(&self) -> &PerSymbolSets {
&self.map
}
}