mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-16 15:53:03 +00:00
* src/nullable.c (set_nullable): Deobfuscate the handling of
ritem. `symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2001-12-05 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/nullable.c (set_nullable): Deobfuscate the handling of
|
||||||
|
ritem.
|
||||||
|
`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
|
||||||
|
|
||||||
|
|
||||||
2001-12-05 Akim Demaille <akim@epita.fr>
|
2001-12-05 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/gram.c, src/gram.h (ritem_print): New.
|
* src/gram.c, src/gram.h (ritem_print): New.
|
||||||
|
|||||||
@@ -71,41 +71,35 @@ set_nullable (void)
|
|||||||
relts = XCALLOC (shorts, nitems + nvars + 1);
|
relts = XCALLOC (shorts, nitems + nvars + 1);
|
||||||
p = relts;
|
p = relts;
|
||||||
|
|
||||||
r = ritem;
|
for (r = ritem; *r; ++r)
|
||||||
while (*r)
|
|
||||||
{
|
{
|
||||||
if (*r < 0)
|
/* Walk RITEM to find (i), if there are any tokens in the
|
||||||
{
|
RHS, and (ii), to find RULENO. */
|
||||||
int symbol = rule_table[-(*r++)].lhs;
|
int ruleno;
|
||||||
if (symbol >= 0 && !nullable[symbol])
|
int any_tokens = 0;
|
||||||
{
|
short *r1;
|
||||||
nullable[symbol] = 1;
|
for (r1 = r; *r1 > 0; ++r1)
|
||||||
*s2++ = symbol;
|
if (ISTOKEN (*r1))
|
||||||
}
|
any_tokens = 1;
|
||||||
}
|
ruleno = -*r1;
|
||||||
else
|
|
||||||
{
|
|
||||||
int any_tokens = 0;
|
|
||||||
int symbol;
|
|
||||||
short *r1 = r;
|
|
||||||
for (symbol = *r++; symbol > 0; symbol = *r++)
|
|
||||||
if (ISTOKEN (symbol))
|
|
||||||
any_tokens = 1;
|
|
||||||
|
|
||||||
if (!any_tokens)
|
/* Examine the RHS of the rule. */
|
||||||
{
|
if (!any_tokens)
|
||||||
int ruleno = -symbol;
|
for (/* Nothing. */; *r > 0; ++r)
|
||||||
r = r1;
|
{
|
||||||
for (symbol = *r++; symbol > 0; symbol = *r++)
|
rcount[ruleno]++;
|
||||||
{
|
p->next = rsets[*r];
|
||||||
rcount[ruleno]++;
|
p->value = ruleno;
|
||||||
p->next = rsets[symbol];
|
rsets[*r] = p;
|
||||||
p->value = ruleno;
|
p++;
|
||||||
rsets[symbol] = p;
|
}
|
||||||
p++;
|
|
||||||
}
|
/* Examine its LHS. */
|
||||||
}
|
if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])
|
||||||
}
|
{
|
||||||
|
nullable[rule_table[ruleno].lhs] = 1;
|
||||||
|
*s2++ = rule_table[ruleno].lhs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (s1 < s2)
|
while (s1 < s2)
|
||||||
|
|||||||
Reference in New Issue
Block a user