CCL
%token <i> FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE
if (f->re[i].ltype == CCL || f->re[i].ltype == NCCL)
if (type(p) == CCL && (*(char *)right(p)) == '\0')
#define LEAF case CCL: case NCCL: case CHAR: case DOT: case FINAL: case ALL:
case CCL:
np = op2(CCL, NIL, (Node *)cclenter((char *)rlxstr));
return (unary(op2(CCL, NIL,
case CCL:
return (CCL);
(k == CCL &&
| CCL { $$ = op2(CCL, (NODE *) 0, cclenter($1)); }
%left STRING DOT CCL NCCL CHAR
if (type(p) == CCL &&
#define LEAF case CCL: case NCCL: case CHAR: case DOT:
case CCL:
case CCL:
k == DOT || k == CCL &&
| CCL
%token CHAR CCL NCCL STR DELIM SCON ITER NEWE NULLS XSCON ARRAY POINTER
%left CHAR CCL NCCL '(' '.' STR NULLS
x = CCL;
case STR: case CCL: case NCCL:
*ep++ = CCL;
case CCL:
case CCL | RNGE:
case CCL | STAR:
*ep++ = CCL;
case CCL:
case CCL|CSTAR:
while (cclass(ep, *lp++, ep[-1] == (CCL|CSTAR)))
*ep++ = CCL;
case CCL|RNGE:
if (!__cclass(ep, *lp++, ep[-1] == (CCL | RNGE)))
if (!__cclass(ep, *lp++, ep[-1] == (CCL|RNGE)))
case CCL:
case CCL|PLUS:
if (!__cclass(ep, *lp++, ep[-1] == (CCL | PLUS)))
case CCL|STAR:
while (__cclass(ep, *lp++, ((ep[-1] == (CCL | STAR)) ||
(ep[-1] == (CCL | PLUS)))))
*ep++ = CCL;
case CCL:
case CCL | RNGE:
case CCL | STAR:
*ep++ = CCL;
case CCL:
case CCL|CSTAR:
while (cclass(ep, *lp++, ep[-1] == (CCL|CSTAR)))