Пример #1
0
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;
}
Пример #2
0
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 */