+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>
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
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. */
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;
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_[[]] =