1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use grammar::{ContextFree, ContextFreeRef};
use prediction::PerSymbolSets;
use rule::container::EmptyRuleContainer;
use super::FirstSetsCollector;
pub struct LastSets {
map: PerSymbolSets,
}
impl LastSets {
pub fn new<'a, G>(grammar: &'a G) -> Self
where G: ContextFree + EmptyRuleContainer,
for<'b> &'b G: ContextFreeRef<'b, Target = G>,
G::History: Clone,
{
let reversed_grammar = grammar.reverse();
let map = {
let first_sets = FirstSetsCollector::new(&reversed_grammar);
first_sets.map
};
LastSets { map }
}
pub fn last_sets(&self) -> &PerSymbolSets {
&self.map
}
}