mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 10:13:03 +00:00
* src/nullable.c (nullable_print): New.
(set_nullable): Call it when tracing. Better locality of variables.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/nullable.c (nullable_print): New.
|
||||||
|
(set_nullable): Call it when tracing.
|
||||||
|
Better locality of variables.
|
||||||
|
|
||||||
|
|
||||||
2001-11-19 Akim Demaille <akim@epita.fr>
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/print.c (print_actions): Better locality of variables.
|
* src/print.c (print_actions): Better locality of variables.
|
||||||
|
|||||||
@@ -25,28 +25,35 @@
|
|||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
|
#include "reader.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "nullable.h"
|
#include "nullable.h"
|
||||||
|
|
||||||
char *nullable = NULL;
|
char *nullable = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
nullable_print (FILE *out)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
fputs ("NULLABLE\n", out);
|
||||||
|
for (i = ntokens; i < nsyms; i++)
|
||||||
|
fprintf (out, "\t%s: %s\n", tags[i], nullable[i] ? "yes" : "no");
|
||||||
|
fputs ("\n\n", out);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
set_nullable (void)
|
set_nullable (void)
|
||||||
{
|
{
|
||||||
short *r;
|
short *r;
|
||||||
short *s1;
|
short *s1;
|
||||||
short *s2;
|
short *s2;
|
||||||
int ruleno;
|
|
||||||
int symbol;
|
|
||||||
shorts *p;
|
shorts *p;
|
||||||
|
|
||||||
short *squeue;
|
short *squeue;
|
||||||
short *rcount;
|
short *rcount;
|
||||||
shorts **rsets;
|
shorts **rsets;
|
||||||
shorts *relts;
|
shorts *relts;
|
||||||
char any_tokens;
|
|
||||||
short *r1;
|
|
||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
fprintf (stderr, "Entering set_nullable\n");
|
fprintf (stderr, "Entering set_nullable\n");
|
||||||
@@ -69,7 +76,7 @@ set_nullable (void)
|
|||||||
{
|
{
|
||||||
if (*r < 0)
|
if (*r < 0)
|
||||||
{
|
{
|
||||||
symbol = rule_table[-(*r++)].lhs;
|
int symbol = rule_table[-(*r++)].lhs;
|
||||||
if (symbol >= 0 && !nullable[symbol])
|
if (symbol >= 0 && !nullable[symbol])
|
||||||
{
|
{
|
||||||
nullable[symbol] = 1;
|
nullable[symbol] = 1;
|
||||||
@@ -78,17 +85,16 @@ set_nullable (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
r1 = r;
|
int any_tokens = 0;
|
||||||
any_tokens = 0;
|
int symbol;
|
||||||
|
short *r1 = r;
|
||||||
for (symbol = *r++; symbol > 0; symbol = *r++)
|
for (symbol = *r++; symbol > 0; symbol = *r++)
|
||||||
{
|
if (ISTOKEN (symbol))
|
||||||
if (ISTOKEN (symbol))
|
any_tokens = 1;
|
||||||
any_tokens = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!any_tokens)
|
if (!any_tokens)
|
||||||
{
|
{
|
||||||
ruleno = -symbol;
|
int ruleno = -symbol;
|
||||||
r = r1;
|
r = r1;
|
||||||
for (symbol = *r++; symbol > 0; symbol = *r++)
|
for (symbol = *r++; symbol > 0; symbol = *r++)
|
||||||
{
|
{
|
||||||
@@ -107,11 +113,11 @@ set_nullable (void)
|
|||||||
p = rsets[*s1++];
|
p = rsets[*s1++];
|
||||||
while (p)
|
while (p)
|
||||||
{
|
{
|
||||||
ruleno = p->value;
|
int ruleno = p->value;
|
||||||
p = p->next;
|
p = p->next;
|
||||||
if (--rcount[ruleno] == 0)
|
if (--rcount[ruleno] == 0)
|
||||||
{
|
{
|
||||||
symbol = rule_table[ruleno].lhs;
|
int symbol = rule_table[ruleno].lhs;
|
||||||
if (symbol >= 0 && !nullable[symbol])
|
if (symbol >= 0 && !nullable[symbol])
|
||||||
{
|
{
|
||||||
nullable[symbol] = 1;
|
nullable[symbol] = 1;
|
||||||
@@ -125,6 +131,9 @@ set_nullable (void)
|
|||||||
XFREE (rcount);
|
XFREE (rcount);
|
||||||
XFREE (rsets + ntokens);
|
XFREE (rsets + ntokens);
|
||||||
XFREE (relts);
|
XFREE (relts);
|
||||||
|
|
||||||
|
if (trace_flag)
|
||||||
|
nullable_print (stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user