mirror of
https://github.com/fluencelabs/lalrpop
synced 2025-06-05 14:31:23 +00:00
shift conflicts do not need to be traced
This commit is contained in:
parent
ed089c27fd
commit
e72378d2bc
@ -41,7 +41,26 @@ impl<'trace, 'grammar> LaneTracer<'trace, 'grammar> {
|
||||
conflict: ConflictIndex,
|
||||
item: LR0Item<'grammar>) {
|
||||
let mut visited_set = Set::default();
|
||||
self.continue_trace(state, conflict, item, &mut visited_set);
|
||||
|
||||
// if the conflict item is a "shift" item, then the context
|
||||
// is always the termianl to shift (and conflicts only arise
|
||||
// around shifting terminal, so it must be a terminal)
|
||||
match item.shift_symbol() {
|
||||
Some((Symbol::Terminal(term), _)) => {
|
||||
let mut token_set = TokenSet::new(self.grammar);
|
||||
token_set.insert(self.grammar, Token::Terminal(term));
|
||||
self.table.add_lookahead(state, conflict, &token_set);
|
||||
}
|
||||
|
||||
Some((Symbol::Nonterminal(_), _)) => {
|
||||
panic!("invalid conflict item `{:?}`: shifts nonterminal",
|
||||
item);
|
||||
}
|
||||
|
||||
None => {
|
||||
self.continue_trace(state, conflict, item, &mut visited_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn continue_trace(&mut self,
|
||||
|
Loading…
x
Reference in New Issue
Block a user