]> git.saurik.com Git - bison.git/blobdiff - src/conflicts.c
version 3.0
[bison.git] / src / conflicts.c
index f8ed17727eb36bda9ce9bec2e54388a51ddb5914..184047362064d6da09eef800c6eff2967abaf034 100644 (file)
@@ -1,6 +1,6 @@
 /* Find and resolve or report lookahead conflicts for bison,
 
 /* Find and resolve or report lookahead conflicts for bison,
 
-   Copyright (C) 1984, 1989, 1992, 2000-2012 Free Software Foundation,
+   Copyright (C) 1984, 1989, 1992, 2000-2013 Free Software Foundation,
    Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -276,11 +276,13 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors, int *nerrs)
            The precedence of shifting is that of token i.  */
         if (symbols[i]->prec < redprec)
           {
            The precedence of shifting is that of token i.  */
         if (symbols[i]->prec < redprec)
           {
+            register_precedence (redrule->prec->number, i);
             log_resolution (redrule, i, reduce_resolution);
             flush_shift (s, i);
           }
         else if (symbols[i]->prec > redprec)
           {
             log_resolution (redrule, i, reduce_resolution);
             flush_shift (s, i);
           }
         else if (symbols[i]->prec > redprec)
           {
+            register_precedence (i, redrule->prec->number);
             log_resolution (redrule, i, shift_resolution);
             flush_reduce (lookahead_tokens, i);
           }
             log_resolution (redrule, i, shift_resolution);
             flush_reduce (lookahead_tokens, i);
           }
@@ -301,16 +303,19 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors, int *nerrs)
               break;
 
             case right_assoc:
               break;
 
             case right_assoc:
+              register_assoc (i, redrule->prec->number);
               log_resolution (redrule, i, right_resolution);
               flush_reduce (lookahead_tokens, i);
               break;
 
             case left_assoc:
               log_resolution (redrule, i, right_resolution);
               flush_reduce (lookahead_tokens, i);
               break;
 
             case left_assoc:
+              register_assoc (i, redrule->prec->number);
               log_resolution (redrule, i, left_resolution);
               flush_shift (s, i);
               break;
 
             case non_assoc:
               log_resolution (redrule, i, left_resolution);
               flush_shift (s, i);
               break;
 
             case non_assoc:
+              register_assoc (i, redrule->prec->number);
               log_resolution (redrule, i, nonassoc_resolution);
               flush_shift (s, i);
               flush_reduce (lookahead_tokens, i);
               log_resolution (redrule, i, nonassoc_resolution);
               flush_shift (s, i);
               flush_reduce (lookahead_tokens, i);
@@ -398,7 +403,7 @@ conflicts_solve (void)
       set_conflicts (states[i], errors);
 
       /* For uniformity of the code, make sure all the states have a valid
       set_conflicts (states[i], errors);
 
       /* For uniformity of the code, make sure all the states have a valid
-         `errs' member.  */
+         'errs' member.  */
       if (!states[i]->errs)
         states[i]->errs = errs_new (0, 0);
     }
       if (!states[i]->errs)
         states[i]->errs = errs_new (0, 0);
     }
@@ -569,7 +574,7 @@ conflicts_print (void)
      different strings to translate.  */
   {
     int total = count_sr_conflicts ();
      different strings to translate.  */
   {
     int total = count_sr_conflicts ();
-    // If %expect is not used, but %expect-rr is, then expect 0 sr.
+    /* If %expect is not used, but %expect-rr is, then expect 0 sr.  */
     int expected =
       (expected_sr_conflicts == -1 && expected_rr_conflicts != -1)
       ? 0
     int expected =
       (expected_sr_conflicts == -1 && expected_rr_conflicts != -1)
       ? 0
@@ -591,7 +596,7 @@ conflicts_print (void)
 
   {
     int total = count_rr_conflicts (true);
 
   {
     int total = count_rr_conflicts (true);
-    // If %expect-rr is not used, but %expect is, then expect 0 rr.
+    /* If %expect-rr is not used, but %expect is, then expect 0 rr.  */
     int expected =
       (expected_rr_conflicts == -1 && expected_sr_conflicts != -1)
       ? 0
     int expected =
       (expected_rr_conflicts == -1 && expected_sr_conflicts != -1)
       ? 0