diff options
| author | Quentin Carbonneaux | 2015-03-04 16:19:35 -0500 |
|---|---|---|
| committer | Quentin Carbonneaux | 2015-03-04 16:19:35 -0500 |
| commit | a22b21bf02a5458c9cc0913c8a4d094ea86045d7 (patch) | |
| tree | e03395d7f09fa6f2e0a9c5049bb557317d1f2983 | |
| parent | a0a2f1faf27e5a92155e119eef1c18c98de758f2 (diff) | |
oh boy...
| -rw-r--r-- | miniyacc.c | 18 |
1 files changed, 6 insertions, 12 deletions
@@ -25,7 +25,7 @@ enum { MaxRhs = 32, MaxTk = 500, MaxNt = 500, - MaxRl = 500, + MaxRl = 800, MaxTm = 1000, TSetSz = (MaxTk+31)/32, @@ -275,19 +275,13 @@ iclose(Item *i) if (!r) die("some non-terminals are not defined"); l = -1; - for (;;) { - do { - if (++l>=ntk) { - r++; - l = 0; - } - } while (!GetBit(t->lk.t, l)); - if (r-rs>=nrl || r->lhs != s) - break; + tszero(&t1.lk); + for (l=0; l<ntk; l++) + if (GetBit(t->lk.t, l)) + first(&t1.lk, rem, l); + for (; r-rs<nrl && r->lhs==s; r++) { t1.rule = r; t1.dot = 0; - tszero(&t1.lk); - first(&t1.lk, rem, l); chg |= iadd(i, &t1); } } |
