|
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 |
} |