static nfa * addnfa(nfagrammar *gr, char *name) { nfa *nf; nf = newnfa(name); gr->gr_nfa = (nfa **)PyObject_REALLOC(gr->gr_nfa, sizeof(nfa*) * (gr->gr_nnfas + 1)); if (gr->gr_nfa == NULL) Py_FatalError("out of mem"); gr->gr_nfa[gr->gr_nnfas++] = nf; addlabel(&gr->gr_ll, NAME, nf->nf_name); return nf; }
nfa dfa2nfa(register dfa da) { register nfa result; register posint state; register posint letter; result = newnfa(); result->highest_state = da->highest_state; result->alphabet_size = da->alphabet_size; result->minimal = FALSE; result->is_eps = FALSE; result->infin = newfinal(result->highest_state); result->delta = newndelta(result->alphabet_size, result->highest_state); setinit(result->infin[da->init]); for (state = 0; state <= result->highest_state; state++) setfinal(result->infin[state], da->final[state]); for (letter = 1; letter <= result->alphabet_size; letter++) for (state = 0; state <= result->highest_state; state++) { connect(result->delta, letter, state, da->delta[letter][state]); } return result; } /* dfa2nfa */