MCPcopy Create free account
hub / github.com/Genivia/RE-flex / gencode_dfa_closure

Method gencode_dfa_closure

lib/pattern.cpp:3426–3529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3424
3425#ifndef WITH_NO_CODEGEN
3426void Pattern::gencode_dfa_closure(FILE *file, const DFA::State *state, int nest, bool peek) const
3427{
3428 bool elif = false;
3429 if (state->redo)
3430 {
3431 if (peek)
3432 ::fprintf(file, "%*sm.FSM_REDO(c);\n", 2*nest, "");
3433 else
3434 ::fprintf(file, "%*sm.FSM_REDO();\n", 2*nest, "");
3435 }
3436 else if (state->accept > 0)
3437 {
3438 if (peek)
3439 ::fprintf(file, "%*sm.FSM_TAKE(%u, c);\n", 2*nest, "", state->accept);
3440 else
3441 ::fprintf(file, "%*sm.FSM_TAKE(%u);\n", 2*nest, "", state->accept);
3442 }
3443 for (Lookaheads::const_iterator i = state->tails.begin(); i != state->tails.end(); ++i)
3444 ::fprintf(file, "%*sm.FSM_TAIL(%u);\n", 2*nest, "", *i);
3445 if (nest > 5)
3446 return;
3447 for (DFA::State::Edges::const_reverse_iterator i = state->edges.rbegin(); i != state->edges.rend(); ++i)
3448 {
3449#if WITH_COMPACT_DFA == -1
3450 Char lo = i->first;
3451 Char hi = i->second.first;
3452#else
3453 Char hi = i->first;
3454 Char lo = i->second.first;
3455#endif
3456 if (is_meta(lo))
3457 {
3458 do
3459 {
3460 switch (lo)
3461 {
3462 case META_EOB:
3463 case META_EOL:
3464 case META_EWE:
3465 case META_BWE:
3466 case META_NWE:
3467 case META_WBE:
3468 ::fprintf(file, "%*s", 2*nest, "");
3469 if (elif)
3470 ::fprintf(file, "else ");
3471 ::fprintf(file, "if (m.FSM_META_%s(c)) {\n", meta_label[lo - META_MIN]);
3472 gencode_dfa_closure(file, i->second.second, nest + 1, peek);
3473 ::fprintf(file, "%*s}\n", 2*nest, "");
3474 elif = true;
3475 break;
3476 default:
3477 ::fprintf(file, "%*s", 2*nest, "");
3478 if (elif)
3479 ::fprintf(file, "else ");
3480 ::fprintf(file, "if (m.FSM_META_%s()) {\n", meta_label[lo - META_MIN]);
3481 gencode_dfa_closure(file, i->second.second, nest + 1, peek);
3482 ::fprintf(file, "%*s}\n", 2*nest, "");
3483 elif = true;

Callers

nothing calls this directly

Calls 3

print_charFunction · 0.85
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected