[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
20-fyi-eof-is-valid.patch
From: |
Akim Demaille |
Subject: |
20-fyi-eof-is-valid.patch |
Date: |
Thu, 27 Dec 2001 19:02:25 +0100 |
Index: ChangeLog
from Akim Demaille <address@hidden>
Try to make the use of the eoftoken valid. Given that its value
is 0 which was also used as a sentinel in ritem, (i) make sure >= 0
is used instead of > 0 where appropriate, (ii), depend upon nritems
instead of the 0-sentinel.
* src/gram.h, src/gram.c (nritems): New.
Expected to be duplication of nitems, but for the time being...
* src/reader.c (packgram): Assert nritems and nitems are equal.
* src/LR0.c (allocate_itemsets, new_itemsets): Adjust.
* src/closure.c (print_closure, print_fderives): Likewise.
* src/gram.c (ritem_print): Likewise.
* src/print.c (print_core, print_grammar): Likewise.
* src/print_graph.c: Likewise.
Index: src/LR0.c
--- src/LR0.c Thu, 27 Dec 2001 11:15:14 +0100 akim
+++ src/LR0.c Thu, 27 Dec 2001 15:35:45 +0100 akim
@@ -68,8 +68,8 @@
int count = 0;
short *symbol_count = XCALLOC (short, nsyms + nuseless_nonterminals);
- for (i = 0; ritem[i]; ++i)
- if (ritem[i] > 0)
+ for (i = 0; i < nritems; ++i)
+ if (ritem[i] >= 0)
{
count++;
symbol_count[ritem[i]]++;
@@ -152,7 +152,7 @@
for (i = 0; i < nitemset; ++i)
{
int symbol = ritem[itemset[i]];
- if (symbol > 0)
+ if (symbol >= 0)
{
if (!kernel_size[symbol])
{
Index: src/closure.c
--- src/closure.c Tue, 11 Dec 2001 20:43:12 +0100 akim
+++ src/closure.c Thu, 27 Dec 2001 15:35:09 +0100 akim
@@ -60,7 +60,7 @@
{
short *rp;
fprintf (stderr, " %2d: .", array[i]);
- for (rp = &ritem[array[i]]; *rp > 0; ++rp)
+ for (rp = &ritem[array[i]]; *rp >= 0; ++rp)
fprintf (stderr, " %s", tags[*rp]);
fprintf (stderr, " (rule %d)\n", -*rp);
}
@@ -101,7 +101,7 @@
{
short *rhsp;
fprintf (stderr, "\t\t%d:", j);
- for (rhsp = ritem + rule_table[j].rhs; *rhsp > 0; ++rhsp)
+ for (rhsp = ritem + rule_table[j].rhs; *rhsp >= 0; ++rhsp)
fprintf (stderr, " %s", tags[*rhsp]);
fputc ('\n', stderr);
}
Index: src/gram.c
--- src/gram.c Tue, 04 Dec 2001 14:02:26 +0100 akim
+++ src/gram.c Thu, 27 Dec 2001 15:26:46 +0100 akim
@@ -32,6 +32,8 @@
int nvars;
short *ritem = NULL;
+int nritems;
+
rule_t *rule_table = NULL;
short *rprec = NULL;
short *rprecsym = NULL;
@@ -60,8 +62,8 @@
{
int i;
fputs ("RITEM\n", out);
- for (i = 0; ritem[i]; ++i)
- if (ritem[i] > 0)
+ for (i = 0; i < nritems; ++i)
+ if (ritem[i] >= 0)
fprintf (out, " %s", tags[ritem[i]]);
else
fprintf (out, " (rule %d)\n", -ritem[i]);
Index: src/gram.h
--- src/gram.h Wed, 26 Dec 2001 19:05:39 +0100 akim
+++ src/gram.h Thu, 27 Dec 2001 15:27:05 +0100 akim
@@ -98,6 +98,7 @@
extern int nvars;
extern short *ritem;
+extern int nritems;
extern short *sprec;
extern short *sassoc;
Index: src/print.c
--- src/print.c Thu, 27 Dec 2001 14:58:13 +0100 akim
+++ src/print.c Thu, 27 Dec 2001 15:39:54 +0100 akim
@@ -88,7 +88,7 @@
sp1 = sp = ritem + sitems[i];
- while (*sp > 0)
+ while (*sp >= 0)
sp++;
rule = -(*sp);
@@ -99,7 +99,7 @@
fputc ('.', out);
- for (/* Nothing */; *sp > 0; ++sp)
+ for (/* Nothing */; *sp >= 0; ++sp)
fprintf (out, " %s", escape (tags[*sp]));
fprintf (out, _(" (rule %d)"), rule);
@@ -378,8 +378,8 @@
fprintf (out, _(" %3d %3d %s ->"),
i, rule_table[i].line, escape (tags[rule_table[i].lhs]));
rule = &ritem[rule_table[i].rhs];
- if (*rule > 0)
- while (*rule > 0)
+ if (*rule >= 0)
+ while (*rule >= 0)
fprintf (out, " %s", escape (tags[*rule++]));
else
fprintf (out, " /* %s */", _("empty"));
@@ -400,7 +400,7 @@
sprintf (buffer, " (%d)", i);
for (j = 1; j <= nrules; j++)
- for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+ for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
if (*rule == token_translations[i])
{
END_TEST (65);
@@ -421,7 +421,7 @@
{
if (rule_table[j].lhs == i)
left_count++;
- for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+ for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
if (*rule == i)
{
right_count++;
@@ -456,7 +456,7 @@
sprintf (buffer + strlen (buffer), _(" on right:"));
for (j = 1; j <= nrules; j++)
{
- for (rule = &ritem[rule_table[j].rhs]; *rule > 0; rule++)
+ for (rule = &ritem[rule_table[j].rhs]; *rule >= 0; rule++)
if (*rule == i)
{
END_TEST (65);
Index: src/reader.c
--- src/reader.c Thu, 27 Dec 2001 14:58:13 +0100 akim
+++ src/reader.c Thu, 27 Dec 2001 15:39:54 +0100 akim
@@ -1764,6 +1764,8 @@
}
ritem[itemno] = 0;
+ nritems = itemno;
+ assert (nritems == nitems);
if (trace_flag)
ritem_print (stderr);
Index: src/output.c
--- src/output.c Thu, 27 Dec 2001 11:15:14 +0100 akim
+++ src/output.c Thu, 27 Dec 2001 16:14:10 +0100 akim
@@ -204,7 +204,7 @@
yyrhs = XMALLOC (short, yyrhs_size);
for (sp = ritem + 1, i = 1; *sp; ++sp, ++i)
- yyrhs[i] = *sp > 0 ? *sp : 0;
+ yyrhs[i] = *sp >= 0 ? *sp : 0;
output_table_data (&format_obstack, yyrhs,
ritem[0], 1, yyrhs_size);
Index: src/print_graph.c
--- src/print_graph.c Thu, 27 Dec 2001 11:44:04 +0100 akim
+++ src/print_graph.c Thu, 27 Dec 2001 16:30:58 +0100 akim
@@ -66,7 +66,7 @@
sp1 = sp = ritem + sitems[i];
- while (*sp > 0)
+ while (*sp >= 0)
sp++;
rule = -(*sp);
@@ -81,7 +81,7 @@
obstack_1grow (node_obstack, '.');
- for (/* Nothing */; *sp > 0; ++sp)
+ for (/* Nothing */; *sp >= 0; ++sp)
obstack_fgrow1 (node_obstack, " %s", escape (tags[*sp]));
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 20-fyi-eof-is-valid.patch,
Akim Demaille <=