Lines 68-73
Link Here
|
68 |
|
68 |
|
69 |
static int setcnt; |
69 |
static int setcnt; |
70 |
static int poscnt; |
70 |
static int poscnt; |
|
|
71 |
static int subexprlvl; /* incremented in parenthesized subexpression */ |
71 |
|
72 |
|
72 |
char *patbeg; |
73 |
char *patbeg; |
73 |
int patlen; |
74 |
int patlen; |
Lines 657-669
Link Here
|
657 |
case '$': |
658 |
case '$': |
658 |
rtok = relex(); |
659 |
rtok = relex(); |
659 |
return (unary(op2(CHAR, NIL, NIL))); |
660 |
return (unary(op2(CHAR, NIL, NIL))); |
|
|
661 |
case ')': |
662 |
np = op2(CHAR, NIL, itonp(')')); |
663 |
rtok = relex(); |
664 |
return (unary(np)); |
660 |
case '(': |
665 |
case '(': |
661 |
rtok = relex(); |
666 |
rtok = relex(); |
662 |
if (rtok == ')') { /* special pleading for () */ |
667 |
if (rtok == ')') { /* special pleading for () */ |
663 |
rtok = relex(); |
668 |
rtok = relex(); |
664 |
return unary(op2(CCL, NIL, (Node *) tostring(""))); |
669 |
return unary(op2(CCL, NIL, (Node *) tostring(""))); |
665 |
} |
670 |
} |
|
|
671 |
subexprlvl++; |
666 |
np = regexp(); |
672 |
np = regexp(); |
|
|
673 |
subexprlvl--; |
667 |
if (rtok == ')') { |
674 |
if (rtok == ')') { |
668 |
rtok = relex(); |
675 |
rtok = relex(); |
669 |
return (unary(np)); |
676 |
return (unary(np)); |
Lines 681-686
Link Here
|
681 |
switch (rtok) { |
688 |
switch (rtok) { |
682 |
case CHAR: case DOT: case ALL: case EMPTYRE: case CCL: case NCCL: case '$': case '(': |
689 |
case CHAR: case DOT: case ALL: case EMPTYRE: case CCL: case NCCL: case '$': case '(': |
683 |
return (concat(op2(CAT, np, primary()))); |
690 |
return (concat(op2(CAT, np, primary()))); |
|
|
691 |
case ')': |
692 |
if (!subexprlvl) |
693 |
return (concat(op2(CAT, np, primary()))); |
684 |
} |
694 |
} |
685 |
return (np); |
695 |
return (np); |
686 |
} |
696 |
} |