* data/lalr1.cc (yytranslate_): Handle the EOF case.
Adjust callers.
No longer expect yychar to be equal to yyeof_, rather, test the
lookahead's (translated) kind.
+2008-11-11 Akim Demaille <demaille@gostai.com>
+
+ Let yytranslate handle the eof case.
+ * data/lalr1.cc (yytranslate_): Handle the EOF case.
+ Adjust callers.
+ No longer expect yychar to be equal to yyeof_, rather, test the
+ lookahead's (translated) kind.
+
2008-11-11 Akim Demaille <demaille@gostai.com>
yychar cannot be empty in yyerrlab.
2008-11-11 Akim Demaille <demaille@gostai.com>
yychar cannot be empty in yyerrlab.
[[YYSTYPE*], [&yyla.value]][]dnl
b4_locations_if([, [[location*], [&yyla.location]]])dnl
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
[[YYSTYPE*], [&yyla.value]][]dnl
b4_locations_if([, [[location*], [&yyla.location]]])dnl
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
+ // Convert token to internal form.
+ yyla.type = yytranslate_ (yychar);
+ // Beware that yylex may return -2 to mean EOF, but which
+ // turns out to the be value of YYEMPTY.
+ yychar = !yyempty_;
- /* Convert token to internal form. */
- if (yychar <= yyeof_)
- {
- yychar = yyla.type = yyeof_;
- YYCDEBUG << "Now at end of input." << std::endl;
- }
- else
- {
- yyla.type = yytranslate_ (yychar);
- YY_SYMBOL_PRINT ("Next token is", yyla);
- }
+ YY_SYMBOL_PRINT ("Next token is", yyla);
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
error, discard it. */
/* Return failure if at end of input. */
error, discard it. */
/* Return failure if at end of input. */
+ if (yyla.type == yyeof_)
YYABORT;
else
{]b4_assert_if([
YYABORT;
else
{]b4_assert_if([
const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
const token_number_type undef_token_ = ]b4_undef_token_number[;
const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
const token_number_type undef_token_ = ]b4_undef_token_number[;
- if (static_cast<unsigned int> (t) <= user_token_number_max_)
+ if (t <= yyeof_)
+ return yyeof_;
+ else if (static_cast<unsigned int> (t) <= user_token_number_max_)
return translate_table[t];
else
return undef_token_;
return translate_table[t];
else
return undef_token_;