]> git.saurik.com Git - bison.git/commitdiff
Rely on the state stack to display reduction traces.
authorAkim Demaille <demaille@gostai.com>
Thu, 31 Jul 2008 10:50:42 +0000 (12:50 +0200)
committerAkim Demaille <demaille@gostai.com>
Sun, 9 Nov 2008 18:33:04 +0000 (19:33 +0100)
To display rhs symbols before a reduction, we used information about the rule
reduced, which required the tables yyrhs and yyprhs.  Now use rely only on the
state stack to get the same information.

* data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
Use them.
(parser::yyrhs_, parser::yyprhs_): Remove.
(parser::yy_reduce_print_): Use the state stack.

ChangeLog
data/lalr1.cc

index e5e9e9f36dcbf2ed05d7a89d83551fe86e9dde03..43dca2debfc900ffa3a79a5bdd97526c596e062c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+       Rely on the state stack to display reduction traces.
+       To display rhs symbols before a reduction, we used information about the rule
+       reduced, which required the tables yyrhs and yyprhs.  Now use rely only on the
+       state stack to get the same information.
+       
+       * data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
+       Use them.
+       (parser::yyrhs_, parser::yyprhs_): Remove.
+       (parser::yy_reduce_print_): Use the state stack.
+
 2008-11-09  Akim Demaille  <demaille@gostai.com>
 
        Fuse yyval and yyloc into yylhs.
index 1f4aa2520edff869cb248c17220a34ccbe885553..34bcc278df616404059c80c88bcbc5bc532d7116 100644 (file)
@@ -60,19 +60,36 @@ m4_define([b4_lhs_location],
 [yylhs.location])
 
 
+# b4_rhs_data(RULE-LENGTH, NUM)
+# -----------------------------
+# Return the data corresponding to the symbol #NUM, where the current
+# rule has RULE-LENGTH symbols on RHS.
+m4_define([b4_rhs_data],
+          [yystack_@{($1) - ($2)@}])
+
+
+# b4_rhs_state(RULE-LENGTH, NUM)
+# -----------------------------
+# The state corresponding to the symbol #NUM, where the current
+# rule has RULE-LENGTH symbols on RHS.
+m4_define([b4_rhs_state],
+          [b4_rhs_data([$1], [$2]).state])
+
+
 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
 # --------------------------------------
 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
 # symbols on RHS.
 m4_define([b4_rhs_value],
-          [b4_symbol_value([yystack_@{($1) - ($2)@}.value], [$3])])
+          [b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3])])
+
 
 # b4_rhs_location(RULE-LENGTH, NUM)
 # ---------------------------------
 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
 # on RHS.
 m4_define([b4_rhs_location],
-[yystack_@{($1) - ($2)@}.location])
+          [b4_rhs_data([$1], [$2]).location])
 
 
 # b4_symbol_actions(FILENAME, LINENO,
@@ -441,10 +458,6 @@ m4_ifdef([b4_stype],
 #endif
 
 #if YYDEBUG
-    /// A `-1'-separated list of the rules' RHS.
-    static const ]b4_int_type_for([b4_rhs])[ yyrhs_[];
-    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
-    static const ]b4_int_type_for([b4_prhs])[ yyprhs_[];
     /// For each rule, its source line number.
     static const ]b4_int_type_for([b4_rline])[ yyrline_[];
     /// For each scanner token number, its symbol number.
@@ -1210,13 +1223,6 @@ b4_error_verbose_if([ tok])[)
 #endif
 
 #if YYDEBUG
-  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-  ]b4_table_define([rhs], [b4_rhs])[;
-
-  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-     YYRHS.  */
-  ]b4_table_define([prhs], [b4_prhs])[;
-
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
   ]b4_table_define([rline], [b4_rline])[;
 
@@ -1245,7 +1251,7 @@ b4_error_verbose_if([ tok])[)
     /* The symbols being reduced.  */
     for (int yyi = 0; yyi < yynrhs; yyi++)
       YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
-                      yyrhs_[yyprhs_[yyrule] + yyi],
+                       ]yystos_@{b4_rhs_state(yynrhs, yyi + 1)@}[,
                       ]b4_rhs_value(yynrhs, yyi + 1)[,
                       ]b4_rhs_location(yynrhs, yyi + 1)[);
   }