rem: return f;
add: return (f);
context: fa *mkdfa(s, anchor)	/* does the real work of making a dfa */	uchar *s;	int anchor;	/* anchor = 1 for anchored matches, else 0 */{	Node *p, *p1, *reparse();	fa *f;	p = reparse(s);	p1 = op2(CAT, op2(STAR, op2(ALL, NIL, NIL), NIL), p);		/* put ALL STAR in front of reg.  exp. */	p1 = op2(CAT, p1, op2(FINAL, NIL, NIL));		/* put FINAL after reg.  exp. */	poscnt = 0;	penter(p1);	/* enter parent pointers and leaf indices */	if ((f = (fa *) calloc(1, sizeof(fa) + poscnt*sizeof(rrow))) == NULL)		overflo("no room for fa");	f->accept = poscnt-1;	/* penter has computed number of positions in re */	cfoll(f, p1);	/* set up follow sets */	freetr(p1);	if ((f->posns[0] = (int *) calloc(1, *(f->re[0].lfollow)*sizeof(int))) == NULL)			overflo("out of space in makedfa");	if ((f->posns[1] = (int *) calloc(1, sizeof(int))) == NULL)		overflo("out of space in makedfa");	*f->posns[1] = 0;	f->initstat = makeinit(f, anchor);	f->anchor = anchor;	f->restr = tostring(s);	return f;}