version 1.6, 1999/04/18 17:06:30 |
version 1.7, 1999/04/20 17:31:29 |
|
|
/* NCHARS is 2**n */ |
/* NCHARS is 2**n */ |
#define MAXLIN 22 |
#define MAXLIN 22 |
|
|
#define type(v) (v)->nobj |
#define type(v) (v)->nobj /* badly overloaded here */ |
|
#define info(v) (v)->ntype /* badly overloaded here */ |
#define left(v) (v)->narg[0] |
#define left(v) (v)->narg[0] |
#define right(v) (v)->narg[1] |
#define right(v) (v)->narg[1] |
#define parent(v) (v)->nnext |
#define parent(v) (v)->nnext |
|
|
{ |
{ |
switch (type(p)) { |
switch (type(p)) { |
LEAF |
LEAF |
left(p) = (Node *) poscnt; |
info(p) = poscnt; |
poscnt++; |
poscnt++; |
break; |
break; |
UNARY |
UNARY |
|
|
|
|
switch (type(v)) { |
switch (type(v)) { |
LEAF |
LEAF |
f->re[(int) left(v)].ltype = type(v); |
f->re[info(v)].ltype = type(v); |
f->re[(int) left(v)].lval.np = right(v); |
f->re[info(v)].lval.np = right(v); |
while (f->accept >= maxsetvec) { /* guessing here! */ |
while (f->accept >= maxsetvec) { /* guessing here! */ |
maxsetvec *= 4; |
maxsetvec *= 4; |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
|
|
follow(v); /* computes setvec and setcnt */ |
follow(v); /* computes setvec and setcnt */ |
if ((p = (int *) calloc(1, (setcnt+1)*sizeof(int))) == NULL) |
if ((p = (int *) calloc(1, (setcnt+1)*sizeof(int))) == NULL) |
overflo("out of space building follow set"); |
overflo("out of space building follow set"); |
f->re[(int) left(v)].lfollow = p; |
f->re[info(v)].lfollow = p; |
*p = setcnt; |
*p = setcnt; |
for (i = f->accept; i >= 0; i--) |
for (i = f->accept; i >= 0; i--) |
if (setvec[i] == 1) |
if (setvec[i] == 1) |
|
|
|
|
switch (type(p)) { |
switch (type(p)) { |
LEAF |
LEAF |
lp = (int) left(p); /* look for high-water mark of subscripts */ |
lp = info(p); /* look for high-water mark of subscripts */ |
while (setcnt >= maxsetvec || lp >= maxsetvec) { /* guessing here! */ |
while (setcnt >= maxsetvec || lp >= maxsetvec) { /* guessing here! */ |
maxsetvec *= 4; |
maxsetvec *= 4; |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int)); |
tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int)); |
if (setvec == 0 || tmpset == 0) { abort(); |
if (setvec == 0 || tmpset == 0) |
overflo("out of space in first()"); |
overflo("out of space in first()"); |
} |
|
} |
} |
if (setvec[lp] != 1) { |
if (setvec[lp] != 1) { |
setvec[lp] = 1; |
setvec[lp] = 1; |
|
|
|
|
switch (rtok) { |
switch (rtok) { |
case CHAR: |
case CHAR: |
np = op2(CHAR, NIL, (Node *) rlxval); |
np = op2(CHAR, NIL, itonp(rlxval)); |
rtok = relex(); |
rtok = relex(); |
return (unary(np)); |
return (unary(np)); |
case ALL: |
case ALL: |
|
|
return (unary(np)); |
return (unary(np)); |
case '^': |
case '^': |
rtok = relex(); |
rtok = relex(); |
return (unary(op2(CHAR, NIL, (Node *) HAT))); |
return (unary(op2(CHAR, NIL, itonp(HAT)))); |
case '$': |
case '$': |
rtok = relex(); |
rtok = relex(); |
return (unary(op2(CHAR, NIL, NIL))); |
return (unary(op2(CHAR, NIL, NIL))); |
|
|
maxsetvec *= 4; |
maxsetvec *= 4; |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); |
tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int)); |
tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int)); |
if (setvec == 0 || tmpset == 0) { abort(); |
if (setvec == 0 || tmpset == 0) |
overflo("out of space in cgoto()"); |
overflo("out of space in cgoto()"); |
} |
|
} |
} |
for (i = 0; i <= f->accept; i++) |
for (i = 0; i <= f->accept; i++) |
setvec[i] = 0; |
setvec[i] = 0; |
|
|
p = f->posns[s]; |
p = f->posns[s]; |
for (i = 1; i <= *p; i++) { |
for (i = 1; i <= *p; i++) { |
if ((k = f->re[p[i]].ltype) != FINAL) { |
if ((k = f->re[p[i]].ltype) != FINAL) { |
if ((k == CHAR && c == f->re[p[i]].lval.i) |
if ((k == CHAR && c == ptoi(f->re[p[i]].lval.np)) |
|| (k == DOT && c != 0 && c != HAT) |
|| (k == DOT && c != 0 && c != HAT) |
|| (k == ALL && c != 0) |
|| (k == ALL && c != 0) |
|| (k == CCL && member(c, f->re[p[i]].lval.up)) |
|| (k == CCL && member(c, f->re[p[i]].lval.up)) |