]> git.saurik.com Git - bison.git/commitdiff
* data/bison.c++: Catch up with bison.simple:
authorAkim Demaille <akim@epita.fr>
Tue, 28 May 2002 09:53:35 +0000 (09:53 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 28 May 2002 09:53:35 +0000 (09:53 +0000)
2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
and Paul Eggert  <eggert@twinsun.com>: `error' handing.
2002-05-26  Akim Demaille  <akim@epita.fr>: stos_, token_number_,
and popping traces.

ChangeLog
data/bison.c++
data/bison.simple

index 55542c3cdd5820d6c2c3dfa9c527bafbe6d45e43..7598bfa76ea457594bb919917229023642c5444c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,13 +1,21 @@
+2002-05-28  Akim Demaille  <akim@epita.fr>
+
+       * data/bison.c++: Catch up with bison.simple:
+       2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+       and Paul Eggert  <eggert@twinsun.com>: `error' handing.
+       2002-05-26  Akim Demaille  <akim@epita.fr>: stos_, token_number_,
+       and popping traces.
+
 2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
 
        * src/output.c (output_skeleton): Put an explicit path in front of
        the skeleton file name, rather than relying on the -I directory,
        to partially alleviate effects of having a skeleton file lying around
        in the current directory.
-       
+
 2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
 
-       * src/conflicts.c (log_resolution): Correct typo: 
+       * src/conflicts.c (log_resolution): Correct typo:
        obstack_printf should be obstack_fgrow1.
 
 2002-05-26  Akim Demaille  <akim@epita.fr>
@@ -75,7 +83,7 @@
 
 2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
        and Paul Eggert  <eggert@twinsun.com>
-       
+
        * data/bison.simple (yyparse): Correct error handling to conform to
        POSIX and yacc.  Specifically, after syntax error is discovered,
        do not reduce further before shifting the error token.
        * data/bison.simple (yyr1): Don't use yy_token_number_type as element
        type; it isn't always big enough, since it doesn't necessarily
        include non-terminals.
-       (yytranslate): Expand definition of yy_token_number_type, so that 
+       (yytranslate): Expand definition of yy_token_number_type, so that
        the latter can be removed.
        (yy_token_number_type): Remove, only one use.
        * data/bison.c++ (r1_): Parallel change to yyr1 in bison.simple---
        don't use TokenNumberType as element type.
-       
+
        * tests/regression.at: Modify expected output to agree with change
        to yyr1 and yytranslate.
-       
+
 2002-05-13  Florian Krohm  <florian@edamail.fishkill.ibm.com>
 
        * src/reader.c (parse_action): Use copy_character instead of
index c418bad324582ffec9b2370fea4e6f6e19ec487e..8b58e08db24100ede46e596e00623cc9106d5b07 100644 (file)
@@ -272,6 +272,8 @@ namespace yy
     static const RhsNumberType rhs_[[]];
     static const b4_uint_type(b4_prhs_max) prhs_[[]];
     static const b4_uint_type(b4_rline_max) rline_[[]];
+    static const b4_uint_type(b4_stos_max) stos_[[]];
+    static const short token_number_[[]];
 #endif
 
     /* Even more tables.  */
@@ -567,47 +569,62 @@ yy::b4_name::parse ()
      token.  */
 
   errstatus = 3;
-  goto yyerrhandle;
 
-  /* Pop the current state because it cannot handle the error token.  */
- yyerrdefault:
- yyerrpop:
-  if (!state_stack_.height ())
-    goto yyabortlab;
-  state_ = (state_stack_.pop (), state_stack_[[0]]);
-  semantic_stack_.pop ();
-  location_stack_.pop ();;
+  for (;;)
+    {
+      n_ = pact_[[state_]];
+      if (n_ != flag_)
+       {
+         n_ += terror_;
+         if (0 <= n_ && n_ <= last_ && check_[[n_]] == terror_)
+           {
+             n_ = table_[[n_]];
+             if (0 < n_)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (!state_stack_.height ())
+       goto yyabortlab;
 
 #if YYDEBUG
-  if (debug_)
-    {
-      YYFPRINTF (stderr, "Error: state stack now");
-      for (StateStack::ConstIterator i = state_stack_.begin ();
-          i != state_stack_.end (); ++i)
-       YYFPRINTF (stderr, " %d", *i);
-      YYFPRINTF (stderr, "\n");
-    }
+      if (debug_)
+       {
+         if (stos_[[state_]] < ntokens_)
+           {
+             YYFPRINTF (stderr, "Error: popping token %d (%s",
+                        token_number_[[stos_[state_]]],
+                        name_[[stos_[state_]]]);
+# ifdef YYPRINT
+             YYPRINT (stderr, token_number_[[stos_[state_]]],
+                      semantic_stack_.top ());
+# endif
+             YYFPRINTF (stderr, ")\n");
+           }
+         else
+           {
+             YYFPRINTF (stderr, "Error: popping nonterminal (%s)\n",
+                        name_[[stos_[state_]]]);
+           }
+       }
 #endif
 
- yyerrhandle:
-  n_ = pact_[[state_]];
-  if (n_ == flag_)
-    goto yyerrdefault;
-
-  n_ += terror_;
-  if (n_ < 0 || n_ > last_ || check_[[n_]] != terror_)
-    goto yyerrdefault;
+      state_ = (state_stack_.pop (), state_stack_[[0]]);
+      semantic_stack_.pop ();
+      location_stack_.pop ();;
 
-  n_ = table_[[n_]];
-  if (n_ < 0)
-    {
-      if (n_ == flag_)
-       goto yyerrpop;
-      n_ = -n_;
-      goto yyreduce;
+#if YYDEBUG
+      if (debug_)
+       {
+         YYFPRINTF (stderr, "Error: state stack now");
+         for (StateStack::ConstIterator i = state_stack_.begin ();
+              i != state_stack_.end (); ++i)
+           YYFPRINTF (stderr, " %d", *i);
+         YYFPRINTF (stderr, "\n");
+       }
+#endif
     }
-  else if (!n_)
-    goto yyerrpop;
 
   if (n_ == final_)
     goto yyacceptlab;
@@ -686,6 +703,24 @@ yy::b4_name::check_[[]] =
   b4_check
 };
 
+#if YYDEBUG
+/* STOS_[[STATE-NUM]] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+const b4_uint_type(b4_stos_max)
+yy::b4_name::stos_[[]] =
+{
+  b4_stos
+};
+
+/* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding
+   to YYLEX-NUM.  */
+const short
+yy::b4_name::token_number_[[]] =
+{
+  b4_toknum
+};
+#endif
+
 /* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives.  */
 const b4_uint_type(b4_r1_max)
 yy::b4_name::r1_[[]] =
index b595946ab64025254726f2a7a7f3b59b36077cde..1beb5ed779f37b6a3cb2119efd81d6a08fef0416 100644 (file)
@@ -371,7 +371,8 @@ static const char *const yytname[[]] =
 };
 #endif
 
-/* YYTOKNUM[[YYN]] -- Index in YYTNAME corresponding to YYLEX.  */
+/* YYTOKNUM[[YYLEX-NUM]] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
 static const short yytoknum[[]] =
 {
   b4_toknum