: states()
, nchars(charset.size() - 1) // (n + 1) bounds for n ranges
{
+ std::map<size_t, std::set<RuleOp*> > s2rules;
ord_hash_set_t kernels;
nfa_state_t **const buffer = new nfa_state_t*[nfa.size];
std::vector<std::vector<nfa_state_t*> > arcs(nchars);
s->ctx = true;
break;
case nfa_state_t::FIN:
- {
- RuleOp *rule = n->value.fin.rule;
- if (!s->rule)
- {
- s->rule = rule;
- }
- else
- {
- const rule_rank_t r1 = s->rule->rank;
- const rule_rank_t r2 = rule->rank;
- if (r2 < r1)
- {
- rules[r1].shadow.insert (r2);
- s->rule = rule;
- }
- else if (r1 < r2)
- {
- rules[r2].shadow.insert (r1);
- }
- }
+ s2rules[i].insert(n->value.fin.rule);
break;
- }
default:
break;
}
}
}
delete[] buffer;
+
+ const size_t count = states.size();
+ for (size_t i = 0; i < count; ++i)
+ {
+ dfa_state_t *s = states[i];
+ std::set<RuleOp*> &rs = s2rules[i];
+ // for each final state: choose the rule with the smallest rank
+ for (std::set<RuleOp*>::const_iterator j = rs.begin(); j != rs.end(); ++j)
+ {
+ RuleOp *rule = *j;
+ if (!s->rule || rule->rank < s->rule->rank)
+ {
+ s->rule = rule;
+ }
+ }
+ // other rules are shadowed by the chosen rule
+ for (std::set<RuleOp*>::const_iterator j = rs.begin(); j != rs.end(); ++j)
+ {
+ RuleOp *rule = *j;
+ if (s->rule != rule)
+ {
+ rules[rule->rank].shadow.insert(s->rule->rank);
+ }
+ }
+ }
}
dfa_t::~dfa_t()
}
-re2c: warning: line 336: unreachable rule in condition 'STR_P1' (shadowed by rule at line 255) [-Wunreachable-rules]
-re2c: warning: line 336: unreachable rule in condition 'STR_P2' (shadowed by rule at line 334) [-Wunreachable-rules]
+re2c: warning: line 336: unreachable rule in condition 'STR_P1' (shadowed by rules at lines 204, 228, 232, 254, 255) [-Wunreachable-rules]
+re2c: warning: line 336: unreachable rule in condition 'STR_P2' (shadowed by rules at lines 297, 330, 334) [-Wunreachable-rules]
re2c: warning: line 340: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
re2c: warning: line 384: column 32: escape has no effect: '\.' [-Wuseless-escape]
re2c: warning: line 391: column 27: escape has no effect: '\[' [-Wuseless-escape]
re2c: warning: line 392: column 11: escape has no effect: '\[' [-Wuseless-escape]
-re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rule at line 587) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rules at lines 582, 587) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_OFFSET' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rules at lines 500, 541, 643) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_SECTION_VALUE' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rules at lines 541, 547, 551, 559, 563, 569, 577, 623, 643) [-Wunreachable-rules]
re2c: warning: line 384: column 32: escape has no effect: '\.' [-Wuseless-escape]
re2c: warning: line 391: column 27: escape has no effect: '\[' [-Wuseless-escape]
re2c: warning: line 392: column 11: escape has no effect: '\[' [-Wuseless-escape]
-re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rule at line 587) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rules at lines 582, 587) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_OFFSET' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rules at lines 500, 541, 643) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_SECTION_VALUE' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rules at lines 541, 547, 551, 559, 563, 569, 577, 623, 643) [-Wunreachable-rules]
re2c: warning: line 652: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]
re2c: warning: line 384: column 32: escape has no effect: '\.' [-Wuseless-escape]
re2c: warning: line 391: column 27: escape has no effect: '\[' [-Wuseless-escape]
re2c: warning: line 392: column 11: escape has no effect: '\[' [-Wuseless-escape]
-re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rule at line 587) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rules at lines 582, 587) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_OFFSET' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_RAW' (shadowed by rules at lines 500, 541, 643) [-Wunreachable-rules]
re2c: warning: line 623: unreachable rule in condition 'ST_SECTION_VALUE' (shadowed by rule at line 573) [-Wunreachable-rules]
-re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rule at line 643) [-Wunreachable-rules]
+re2c: warning: line 648: unreachable rule in condition 'ST_VALUE' (shadowed by rules at lines 541, 547, 551, 559, 563, 569, 577, 623, 643) [-Wunreachable-rules]
re2c: warning: line 4: column 32: escape has no effect: '\.' [-Wuseless-escape]
re2c: warning: line 11: column 27: escape has no effect: '\[' [-Wuseless-escape]
re2c: warning: line 12: column 11: escape has no effect: '\[' [-Wuseless-escape]
-re2c: warning: line 55: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rule at line 49) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rules at lines 48, 49) [-Wunreachable-rules]
re2c: warning: line 50: unreachable rule in condition 'ST_OFFSET' (shadowed by rule at line 46) [-Wunreachable-rules]
-re2c: warning: line 55: unreachable rule in condition 'ST_RAW' (shadowed by rule at line 54) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_RAW' (shadowed by rules at lines 37, 39, 54) [-Wunreachable-rules]
re2c: warning: line 50: unreachable rule in condition 'ST_SECTION_VALUE' (shadowed by rule at line 46) [-Wunreachable-rules]
-re2c: warning: line 55: unreachable rule in condition 'ST_VALUE' (shadowed by rule at line 54) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_VALUE' (shadowed by rules at lines 39, 40, 41, 43, 44, 45, 47, 50, 54) [-Wunreachable-rules]
re2c: warning: line 4: column 32: escape has no effect: '\.' [-Wuseless-escape]
re2c: warning: line 11: column 27: escape has no effect: '\[' [-Wuseless-escape]
re2c: warning: line 12: column 11: escape has no effect: '\[' [-Wuseless-escape]
-re2c: warning: line 55: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rule at line 49) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_DOUBLE_QUOTES' (shadowed by rules at lines 48, 49) [-Wunreachable-rules]
re2c: warning: line 50: unreachable rule in condition 'ST_OFFSET' (shadowed by rule at line 46) [-Wunreachable-rules]
-re2c: warning: line 55: unreachable rule in condition 'ST_RAW' (shadowed by rule at line 54) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_RAW' (shadowed by rules at lines 37, 39, 54) [-Wunreachable-rules]
re2c: warning: line 50: unreachable rule in condition 'ST_SECTION_VALUE' (shadowed by rule at line 46) [-Wunreachable-rules]
-re2c: warning: line 55: unreachable rule in condition 'ST_VALUE' (shadowed by rule at line 54) [-Wunreachable-rules]
+re2c: warning: line 55: unreachable rule in condition 'ST_VALUE' (shadowed by rules at lines 39, 40, 41, 43, 44, 45, 47, 50, 54) [-Wunreachable-rules]
re2c: warning: line 56: looks like you use hardcoded numbers instead of autogenerated condition names: better add '/*!types:re2c*/' directive or '-t, --type-header' option and don't rely on fixed condition order. [-Wcondition-order]