rem: first(left(p)); return(0);
add: (void) first(left(p)); return (0);
context: first(p)		/* collects initially active leaves of p into setvec */	register Node *p;	/* returns 0 or 1 depending on whether p matches empty string */{	register int b;	switch(type(p)) {	LEAF		if (setvec[(int) left(p)] != 1) {			setvec[(int) left(p)] = 1;			setcnt++;		}		if (type(p) == CCL && (*(uchar *) right(p)) == '\0')			return(0);		/* empty CCL */		else return(1);	case PLUS:		if (first(left(p)) == 0) return(0);		return(1);	case STAR:	case QUEST:		first(left(p));		return(0);	case CAT:		if (first(left(p)) == 0 && first(right(p)) == 0) return(0);		return(1);	case OR:		b = first(right(p));		if (first(left(p)) == 0 || b == 0) return(0);		return(1);	}	ERROR "unknown type %d in first", type(p) FATAL;	return(-1);}