Fix handling of precedence for repeat rules

This commit is contained in:
Max Brunsfeld 2015-11-01 21:00:44 -08:00
parent d6ee28abd0
commit d7cb48aae7
6 changed files with 1039 additions and 919 deletions

View file

@ -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,
})));

View file

@ -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);
}
}