Fix handling of precedence for repeat rules
This commit is contained in:
parent
d6ee28abd0
commit
d7cb48aae7
6 changed files with 1039 additions and 919 deletions
|
|
@ -89,7 +89,8 @@ class LexTableBuilder {
|
|||
rules::Metadata::build(
|
||||
separator_rule,
|
||||
{
|
||||
{ rules::START_TOKEN, 1 }, { rules::PRECEDENCE, -1 },
|
||||
{ rules::START_TOKEN, 1 },
|
||||
{ rules::PRECEDENCE, -99999 },
|
||||
}),
|
||||
rule,
|
||||
})));
|
||||
|
|
|
|||
|
|
@ -109,13 +109,17 @@ class LexItemTransitions : public rules::RuleFn<void> {
|
|||
LexItemSet::TransitionMap content_transitions;
|
||||
LexItemTransitions(&content_transitions, this).apply(rule->content);
|
||||
for (const auto &pair : content_transitions) {
|
||||
PrecedenceRange precedence(pair.second.second);
|
||||
if (precedence.empty && !precedence_stack->empty())
|
||||
precedence.add(precedence_stack->back());
|
||||
|
||||
merge_transition(transitions, pair.first, pair.second.first,
|
||||
pair.second.second);
|
||||
precedence);
|
||||
merge_transition(
|
||||
transitions, pair.first,
|
||||
transform_item_set(pair.second.first, [&rule](rule_ptr item_rule) {
|
||||
return rules::Seq::build({ item_rule, rule->copy() });
|
||||
}), pair.second.second);
|
||||
}), precedence);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue