30 |
#include "reader.h" |
#include "reader.h" |
31 |
#include "print.h" |
#include "print.h" |
32 |
#include "reduce.h" |
#include "reduce.h" |
33 |
|
#include "closure.h" |
34 |
|
|
35 |
#if 0 |
#if 0 |
36 |
static void |
static void |
49 |
print_core (FILE *out, int state) |
print_core (FILE *out, int state) |
50 |
{ |
{ |
51 |
int i; |
int i; |
52 |
core *statep = state_table[state].state; |
short *sitems = state_table[state].state->items; |
53 |
|
int snitems = state_table[state].state->nitems; |
54 |
|
|
55 |
if (!statep->nitems) |
/* New experimental feature: if TRACE_FLAGS output all the items of |
56 |
return; |
a state, not only its kernel. */ |
57 |
|
if (trace_flag) |
58 |
|
{ |
59 |
|
closure (sitems, snitems); |
60 |
|
sitems = itemset; |
61 |
|
snitems = nitemset; |
62 |
|
} |
63 |
|
|
64 |
for (i = 0; i < statep->nitems; i++) |
if (snitems) |
65 |
{ |
{ |
66 |
short *sp; |
for (i = 0; i < snitems; i++) |
67 |
short *sp1; |
{ |
68 |
int rule; |
short *sp; |
69 |
|
short *sp1; |
70 |
|
int rule; |
71 |
|
|
72 |
sp1 = sp = ritem + statep->items[i]; |
sp1 = sp = ritem + sitems[i]; |
73 |
|
|
74 |
while (*sp > 0) |
while (*sp > 0) |
75 |
sp++; |
sp++; |
76 |
|
|
77 |
rule = -(*sp); |
rule = -(*sp); |
78 |
fprintf (out, " %s -> ", tags[rule_table[rule].lhs]); |
fprintf (out, " %s -> ", tags[rule_table[rule].lhs]); |
79 |
|
|
80 |
for (sp = ritem + rule_table[rule].rhs; sp < sp1; sp++) |
for (sp = ritem + rule_table[rule].rhs; sp < sp1; sp++) |
81 |
fprintf (out, "%s ", tags[*sp]); |
fprintf (out, "%s ", tags[*sp]); |
82 |
|
|
83 |
fputc ('.', out); |
fputc ('.', out); |
84 |
|
|
85 |
for (/* Nothing */; *sp > 0; ++sp) |
for (/* Nothing */; *sp > 0; ++sp) |
86 |
fprintf (out, " %s", tags[*sp]); |
fprintf (out, " %s", tags[*sp]); |
87 |
|
|
88 |
|
fprintf (out, _(" (rule %d)"), rule); |
89 |
|
fputc ('\n', out); |
90 |
|
} |
91 |
|
|
|
fprintf (out, _(" (rule %d)"), rule); |
|
92 |
fputc ('\n', out); |
fputc ('\n', out); |
93 |
} |
} |
|
|
|
|
fputc ('\n', out); |
|
94 |
} |
} |
95 |
|
|
96 |
static void |
static void |
332 |
|
|
333 |
print_grammar (out); |
print_grammar (out); |
334 |
|
|
335 |
|
/* New experimental feature: output all the items of a state, |
336 |
|
not only its kernel. Requires to run closure, which need |
337 |
|
memory allocation/deallocation. */ |
338 |
|
if (trace_flag) |
339 |
|
new_closure (nitems); |
340 |
for (i = 0; i < nstates; i++) |
for (i = 0; i < nstates; i++) |
341 |
print_state (out, i); |
print_state (out, i); |
342 |
|
if (trace_flag) |
343 |
|
free_closure (); |
344 |
|
|
345 |
xfclose (out); |
xfclose (out); |
346 |
} |
} |