rem: return unary(op2(CCL, NIL, (Node *) tostring("")));
add: return (unary(op2(CCL, NIL,  (Node *)tostring((uchar *)""))));
context: Node *primary(){	Node *np;	switch (rtok) {	case CHAR:		np = op2(CHAR, NIL, (Node *) rlxval);		rtok = relex();		return (unary(np));	case ALL:		rtok = relex();		return (unary(op2(ALL, NIL, NIL)));	case DOT:		rtok = relex();		return (unary(op2(DOT, NIL, NIL)));	case CCL:		np = op2(CCL, NIL, (Node*) cclenter(rlxstr));		rtok = relex();		return (unary(np));	case NCCL:		np = op2(NCCL, NIL, (Node *) cclenter(rlxstr));		rtok = relex();		return (unary(np));	case '^':		rtok = relex();		return (unary(op2(CHAR, NIL, (Node *) HAT)));	case '$':		rtok = relex();		return (unary(op2(CHAR, NIL, NIL)));	case '(':		rtok = relex();		if (rtok == ')') {	/* special pleading for () */			rtok = relex();			return unary(op2(CCL, NIL, (Node *) tostring("")));		}		np = regexp();		if (rtok == ')') {			rtok = relex();			return (unary(np));		}		else			ERROR "syntax error in regular expression %s at %s", lastre, prestr FATAL;	default:		ERROR "illegal primary in regular expression %s at %s", lastre, prestr FATAL;	}	/*NOTREACHED*/}