From 3067fbef531832df1e43bbd28787655808361eed Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 5 Dec 2001 09:26:05 +0000 Subject: [PATCH] * src/gram.c, src/gram.h (ritem_print): New. * src/gram.c (dummy): Remove, now there is actual code in gram.c. (This useless function was defined only to work around VMS linkers that can't handle compilation units with variables only). * src/reduce.c (dump_grammar): Use it to trace the construction of ritem. --- ChangeLog | 9 +++++++++ src/gram.c | 14 ++++++++++---- src/gram.h | 4 ++++ src/reader.c | 3 +++ src/reduce.c | 20 ++++++++++++-------- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c0df688..1a82f438 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2001-12-05 Akim Demaille + + * src/gram.c, src/gram.h (ritem_print): New. + * src/gram.c (dummy): Remove, now there is actual code in gram.c. + (This useless function was defined only to work around VMS linkers + that can't handle compilation units with variables only). + * src/reduce.c (dump_grammar): Use it to trace the construction of + ritem. + 2001-12-04 Paul Eggert * src/bison.simple (union yyalloc): Change member names diff --git a/src/gram.c b/src/gram.c index 1df89a02..35302616 100644 --- a/src/gram.c +++ b/src/gram.c @@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */ #include "system.h" #include "gram.h" +#include "reader.h" void dummy PARAMS((void)); @@ -52,10 +53,15 @@ int pure_parser; int error_token_number; -/* This is to avoid linker problems which occur on VMS when using GCC, - when the file in question contains data definitions only. */ - void -dummy (void) +ritem_print (FILE *out) { + int i; + fputs ("RITEM\n", out); + for (i = 0; ritem[i]; ++i) + if (ritem[i] > 0) + fprintf (out, " %s", tags[ritem[i]]); + else + fprintf (out, " (rule %d)\n", -ritem[i]); + fputs ("\n\n", out); } diff --git a/src/gram.h b/src/gram.h index ca55d007..516907c2 100644 --- a/src/gram.h +++ b/src/gram.h @@ -147,4 +147,8 @@ extern int pure_parser; /* ERROR_TOKEN_NUMBER is the token number of the error token. */ extern int error_token_number; + + +/* Dump RITEM for traces. */ +void ritem_print (FILE *out); #endif /* !GRAM_H_ */ diff --git a/src/reader.c b/src/reader.c index 0cce616d..6bfc7d73 100644 --- a/src/reader.c +++ b/src/reader.c @@ -2005,6 +2005,9 @@ packgram (void) } ritem[itemno] = 0; + + if (trace_flag) + ritem_print (stderr); } /*-------------------------------------------------------------------. diff --git a/src/reduce.c b/src/reduce.c index 190f3577..048f5a63 100644 --- a/src/reduce.c +++ b/src/reduce.c @@ -455,18 +455,22 @@ dump_grammar (FILE *out) fprintf (out, "%5d %5d %5d %s\n", i, sprec[i], sassoc[i], tags[i]); fprintf (out, "\n\n"); fprintf (out, "Rules\n-----\n\n"); - fprintf (out, "Num (Prec, Assoc) Lhs : (@Rhs) Ritems [Num?]\n"); + fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); for (i = 1; i <= nrules; i++) { - fprintf (out, "%-5d(%5d%5d)%5d : (@%-5d)", + int rhs_count = 0; + /* Find the last RHS index in ritems. */ + for (r = &ritem[rule_table[i].rhs]; *r > 0; ++r) + ++rhs_count; + fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->", i, - rule_table[i].prec, - rule_table[i].assoc, - rule_table[i].lhs, - rule_table[i].rhs); + rule_table[i].prec, rule_table[i].assoc, rule_table[i].useful, + rule_table[i].rhs, rule_table[i].rhs + rhs_count - 1, + rule_table[i].lhs); + /* Dumped the RHS. */ for (r = &ritem[rule_table[i].rhs]; *r > 0; r++) - fprintf (out, "%5d", *r); - fprintf (out, " [%d]\n", -(*r)); + fprintf (out, "%3d", *r); + fprintf (out, " [%d]\n", -(*r)); } fprintf (out, "\n\n"); fprintf (out, "Rules interpreted\n-----------------\n\n"); -- 2.45.2