]> git.saurik.com Git - bison.git/blobdiff - src/print.c
Use ASCII for Sebastien Fricker's name.
[bison.git] / src / print.c
index 7d16da5f1d2229e46bd11b9c67adfc7f7d94a067..08feaafbcc543b2b2a42e9193a012ea7fad7249e 100644 (file)
@@ -1,6 +1,6 @@
 /* Print information on generated parser, for bison,
 
 /* Print information on generated parser, for bison,
 
-   Copyright (C) 1984, 1986, 1989, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1984, 1986, 1989, 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 
+#include <config.h>
 #include "system.h"
 
 #include <bitset.h>
 #include "system.h"
 
 #include <bitset.h>
@@ -38,9 +38,9 @@
 #include "reduce.h"
 #include "state.h"
 #include "symtab.h"
 #include "reduce.h"
 #include "state.h"
 #include "symtab.h"
+#include "tables.h"
 
 static bitset shift_set;
 
 static bitset shift_set;
-static bitset look_ahead_set;
 
 #if 0
 static void
 
 #if 0
 static void
@@ -111,9 +111,9 @@ print_core (FILE *out, state *s)
       for (/* Nothing */; *sp >= 0; ++sp)
        fprintf (out, " %s", symbols[*sp]->tag);
 
       for (/* Nothing */; *sp >= 0; ++sp)
        fprintf (out, " %s", symbols[*sp]->tag);
 
-      /* Display the look-ahead tokens?  */
-      if (report_flag & report_look_ahead_tokens)
-       state_rule_look_ahead_tokens_print (s, &rules[r], out);
+      /* Display the lookahead tokens?  */
+      if (report_flag & report_lookahead_tokens)
+       state_rule_lookahead_tokens_print (s, &rules[r], out);
 
       fputc ('\n', out);
     }
 
       fputc ('\n', out);
     }
@@ -132,7 +132,7 @@ print_transitions (state *s, FILE *out, bool display_transitions_p)
   size_t width = 0;
   int i;
 
   size_t width = 0;
   int i;
 
-  /* Compute the width of the look-ahead token column.  */
+  /* Compute the width of the lookahead token column.  */
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
@@ -148,7 +148,7 @@ print_transitions (state *s, FILE *out, bool display_transitions_p)
   fputc ('\n', out);
   width += 2;
 
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens and shifts.  */
+  /* Report lookahead tokens and shifts.  */
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
@@ -180,7 +180,7 @@ print_errs (FILE *out, state *s)
   size_t width = 0;
   int i;
 
   size_t width = 0;
   int i;
 
-  /* Compute the width of the look-ahead token column.  */
+  /* Compute the width of the lookahead token column.  */
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       max_length (&width, errp->symbols[i]->tag);
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       max_length (&width, errp->symbols[i]->tag);
@@ -192,7 +192,7 @@ print_errs (FILE *out, state *s)
   fputc ('\n', out);
   width += 2;
 
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens and errors.  */
+  /* Report lookahead tokens and errors.  */
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       {
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       {
@@ -206,85 +206,20 @@ print_errs (FILE *out, state *s)
 }
 
 
 }
 
 
-/*-------------------------------------------------------------.
-| Return the default rule of S if it has one, NULL otherwise.  |
-`-------------------------------------------------------------*/
-
-static rule *
-state_default_rule (state *s)
-{
-  reductions *reds = s->reductions;
-  rule *default_rule = NULL;
-  int cmax = 0;
-  int i;
-
-  /* No need for a look-ahead.  */
-  if (s->consistent)
-    return reds->rules[0];
-
-  /* 1. Each reduction is possibly masked by the look-ahead tokens on which
-     we shift (S/R conflicts)...  */
-  bitset_zero (shift_set);
-  {
-    transitions *trans = s->transitions;
-    FOR_EACH_SHIFT (trans, i)
-      {
-       /* If this state has a shift for the error token, don't use a
-            default rule.  */
-       if (TRANSITION_IS_ERROR (trans, i))
-         return NULL;
-       bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
-      }
-  }
-
-  /* 2. Each reduction is possibly masked by the look-ahead tokens on which
-     we raise an error (due to %nonassoc).  */
-  {
-    errs *errp = s->errs;
-    for (i = 0; i < errp->num; i++)
-      if (errp->symbols[i])
-       bitset_set (shift_set, errp->symbols[i]->number);
-  }
-
-  for (i = 0; i < reds->num; ++i)
-    {
-      int count = 0;
-
-      /* How many non-masked look-ahead tokens are there for this
-        reduction?  */
-      bitset_andn (look_ahead_set, reds->look_ahead_tokens[i], shift_set);
-      count = bitset_count (look_ahead_set);
-
-      if (count > cmax)
-       {
-         cmax = count;
-         default_rule = reds->rules[i];
-       }
-
-      /* 3. And finally, each reduction is possibly masked by previous
-        reductions (in R/R conflicts, we keep the first reductions).
-        */
-      bitset_or (shift_set, shift_set, reds->look_ahead_tokens[i]);
-    }
-
-  return default_rule;
-}
-
-
-/*--------------------------------------------------------------------------.
-| Report a reduction of RULE on LOOK_AHEAD_TOKEN (which can be `default').  |
-| If not ENABLED, the rule is masked by a shift or a reduce (S/R and        |
-| R/R conflicts).                                                           |
-`--------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------------.
+| Report a reduction of RULE on LOOKAHEAD_TOKEN (which can be `default').  |
+| If not ENABLED, the rule is masked by a shift or a reduce (S/R and       |
+| R/R conflicts).                                                          |
+`-------------------------------------------------------------------------*/
 
 static void
 print_reduction (FILE *out, size_t width,
 
 static void
 print_reduction (FILE *out, size_t width,
-                const char *look_ahead_token,
+                const char *lookahead_token,
                 rule *r, bool enabled)
 {
   int j;
                 rule *r, bool enabled)
 {
   int j;
-  fprintf (out, "    %s", look_ahead_token);
-  for (j = width - strlen (look_ahead_token); j > 0; --j)
+  fprintf (out, "    %s", lookahead_token);
+  for (j = width - strlen (lookahead_token); j > 0; --j)
     fputc (' ', out);
   if (!enabled)
     fputc ('[', out);
     fputc (' ', out);
   if (!enabled)
     fputc ('[', out);
@@ -314,23 +249,24 @@ print_reductions (FILE *out, state *s)
   if (reds->num == 0)
     return;
 
   if (reds->num == 0)
     return;
 
-  default_rule = state_default_rule (s);
+  if (yydefact[s->number] != 0)
+    default_rule = &rules[yydefact[s->number] - 1];
 
   bitset_zero (shift_set);
   FOR_EACH_SHIFT (trans, i)
     bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
 
 
   bitset_zero (shift_set);
   FOR_EACH_SHIFT (trans, i)
     bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
 
-  /* Compute the width of the look-ahead token column.  */
+  /* Compute the width of the lookahead token column.  */
   if (default_rule)
     width = strlen (_("$default"));
 
   if (default_rule)
     width = strlen (_("$default"));
 
-  if (reds->look_ahead_tokens)
+  if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
        bool count = bitset_test (shift_set, i);
 
        for (j = 0; j < reds->num; ++j)
     for (i = 0; i < ntokens; i++)
       {
        bool count = bitset_test (shift_set, i);
 
        for (j = 0; j < reds->num; ++j)
-         if (bitset_test (reds->look_ahead_tokens[j], i))
+         if (bitset_test (reds->lookahead_tokens[j], i))
            {
              if (! count)
                {
            {
              if (! count)
                {
@@ -352,15 +288,15 @@ print_reductions (FILE *out, state *s)
   fputc ('\n', out);
   width += 2;
 
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens (or $default) and reductions.  */
-  if (reds->look_ahead_tokens)
+  /* Report lookahead tokens (or $default) and reductions.  */
+  if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
        bool defaulted = false;
        bool count = bitset_test (shift_set, i);
 
        for (j = 0; j < reds->num; ++j)
     for (i = 0; i < ntokens; i++)
       {
        bool defaulted = false;
        bool count = bitset_test (shift_set, i);
 
        for (j = 0; j < reds->num; ++j)
-         if (bitset_test (reds->look_ahead_tokens[j], i))
+         if (bitset_test (reds->lookahead_tokens[j], i))
            {
              if (! count)
                {
            {
              if (! count)
                {
@@ -563,11 +499,9 @@ print_results (void)
     new_closure (nritems);
   /* Storage for print_reductions.  */
   shift_set =  bitset_create (ntokens, BITSET_FIXED);
     new_closure (nritems);
   /* Storage for print_reductions.  */
   shift_set =  bitset_create (ntokens, BITSET_FIXED);
-  look_ahead_set = bitset_create (ntokens, BITSET_FIXED);
   for (i = 0; i < nstates; i++)
     print_state (out, states[i]);
   bitset_free (shift_set);
   for (i = 0; i < nstates; i++)
     print_state (out, states[i]);
   bitset_free (shift_set);
-  bitset_free (look_ahead_set);
   if (report_flag & report_itemsets)
     free_closure ();
 
   if (report_flag & report_itemsets)
     free_closure ();