51 |
static bitset V1; |
static bitset V1; |
52 |
|
|
53 |
static int nuseful_productions; |
static int nuseful_productions; |
54 |
static int nuseless_productions; |
int nuseless_productions; |
55 |
static int nuseful_nonterminals; |
static int nuseful_nonterminals; |
56 |
int nuseless_nonterminals; |
int nuseless_nonterminals; |
57 |
|
|
371 |
} |
} |
372 |
} |
} |
373 |
|
|
|
static void |
|
|
dump_grammar (FILE *out) |
|
|
{ |
|
|
int i; |
|
|
item_number_t *r; |
|
374 |
|
|
|
fprintf (out, "REDUCED GRAMMAR\n\n"); |
|
|
fprintf (out, |
|
|
"ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n", |
|
|
ntokens, nvars, nsyms, nrules, nritems); |
|
|
fprintf (out, "Variables\n---------\n\n"); |
|
|
fprintf (out, "Value Sprec Sassoc Tag\n"); |
|
|
for (i = ntokens; i < nsyms; i++) |
|
|
fprintf (out, "%5d %5d %5d %s\n", |
|
|
i, |
|
|
symbols[i]->prec, symbols[i]->assoc, |
|
|
quotearg_style (escape_quoting_style, symbols[i]->tag)); |
|
|
fprintf (out, "\n\n"); |
|
|
fprintf (out, "Rules\n-----\n\n"); |
|
|
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); |
|
|
for (i = 1; i < nrules + nuseless_productions + 1; i++) |
|
|
{ |
|
|
int rhs_count = 0; |
|
|
/* Find the last RHS index in ritems. */ |
|
|
for (r = rules[i].rhs; *r >= 0; ++r) |
|
|
++rhs_count; |
|
|
fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->", |
|
|
i - 1, |
|
|
rules[i].prec->prec, |
|
|
rules[i].prec->assoc, |
|
|
rules[i].useful, |
|
|
rules[i].rhs - ritem, |
|
|
rules[i].rhs - ritem + rhs_count - 1, |
|
|
rules[i].lhs->number); |
|
|
/* Dumped the RHS. */ |
|
|
for (r = rules[i].rhs; *r >= 0; r++) |
|
|
fprintf (out, "%3d", *r); |
|
|
fprintf (out, " [%d]\n", -(*r) - 1); |
|
|
} |
|
|
fprintf (out, "\n\n"); |
|
|
fprintf (out, "Rules interpreted\n-----------------\n\n"); |
|
|
for (i = 1; i < nrules + nuseless_productions + 1; i++) |
|
|
{ |
|
|
fprintf (out, "%-5d %s :", |
|
|
i, quotearg_style (escape_quoting_style, rules[i].lhs->tag)); |
|
|
for (r = rules[i].rhs; *r >= 0; r++) |
|
|
fprintf (out, " %s", |
|
|
quotearg_style (escape_quoting_style, symbols[*r]->tag)); |
|
|
fputc ('\n', out); |
|
|
} |
|
|
fprintf (out, "\n\n"); |
|
|
} |
|
375 |
|
|
376 |
|
|
377 |
|
|
443 |
|
|
444 |
if (trace_flag) |
if (trace_flag) |
445 |
{ |
{ |
446 |
dump_grammar (stderr); |
grammar_dump (stderr, "Reduced Grammar"); |
447 |
|
|
448 |
fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals\ |
fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals\ |
449 |
, and %d productions.\n", |
, and %d productions.\n", |