summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux2015-03-04 16:19:35 -0500
committerQuentin Carbonneaux2015-03-04 16:19:35 -0500
commita22b21bf02a5458c9cc0913c8a4d094ea86045d7 (patch)
treee03395d7f09fa6f2e0a9c5049bb557317d1f2983
parenta0a2f1faf27e5a92155e119eef1c18c98de758f2 (diff)
oh boy...
-rw-r--r--miniyacc.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/miniyacc.c b/miniyacc.c
index b9cd43d..21a9237 100644
--- a/miniyacc.c
+++ b/miniyacc.c
@@ -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);
}
}