[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
05-fyi-traverse.patch
From: |
Akim Demaille |
Subject: |
05-fyi-traverse.patch |
Date: |
Wed, 05 Dec 2001 08:24:27 +0100 |
Index: ChangeLog
from Akim Demaille <address@hidden>
* src/lalr.c (traverse): Use arrays instead of pointers.
Index: src/lalr.c
--- src/lalr.c Sat, 17 Nov 2001 17:06:51 +0100 akim
+++ src/lalr.c Sat, 01 Dec 2001 13:47:13 +0100 akim
@@ -50,7 +50,7 @@
static int infinity;
static int ngotos;
-/* And for the famous F variable, which named is so descriptive that a
+/* And for the famous F variable, which name is so descriptive that a
comment is hardly needed. <grin>. */
static unsigned *F = NULL;
#define F(Rule) (F + (Rule) * tokensetsize)
@@ -66,57 +66,39 @@
static void
traverse (int i)
{
- unsigned *fp1;
- unsigned *fp2;
- unsigned *fp3;
int j;
- short *rp;
-
+ size_t k;
int height;
- unsigned *base;
+ size_t size = F (i + 1) - F(i);
VERTICES[++top] = i;
INDEX[i] = height = top;
- base = F (i);
- fp3 = F (i + 1);
+ if (R[i])
+ for (j = 0; R[i][j] >= 0; ++j)
+ {
+ if (INDEX[R[i][j]] == 0)
+ traverse (R[i][j]);
- rp = R[i];
- if (rp)
- {
- while ((j = *rp++) >= 0)
- {
- if (INDEX[j] == 0)
- traverse (j);
-
- if (INDEX[i] > INDEX[j])
- INDEX[i] = INDEX[j];
-
- fp1 = base;
- fp2 = F (j);
-
- while (fp1 < fp3)
- *fp1++ |= *fp2++;
- }
- }
+ if (INDEX[i] > INDEX[R[i][j]])
+ INDEX[i] = INDEX[R[i][j]];
+
+ for (k = 0; k < size; ++k)
+ F (i)[k] |= F (R[i][j])[k];
+ }
if (INDEX[i] == height)
- {
- for (;;)
- {
- j = VERTICES[top--];
- INDEX[j] = infinity;
-
- if (i == j)
- break;
-
- fp1 = base;
- fp2 = F (j);
-
- while (fp1 < fp3)
- *fp2++ = *fp1++;
- }
- }
+ for (;;)
+ {
+ j = VERTICES[top--];
+ INDEX[j] = infinity;
+
+ if (i == j)
+ break;
+
+ for (k = 0; k < size; ++k)
+ F (i)[k] = F (j)[k];
+ }
}
@@ -212,7 +194,10 @@
}
-/* Return the size of the longest ride hand side of the rules. */
+/*------------------------------------------.
+| Return the size of the longest rule RHS. |
+`------------------------------------------*/
+
static size_t
maxrhs (void)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 05-fyi-traverse.patch,
Akim Demaille <=