From: Akim Demaille Date: Mon, 18 Aug 2008 20:16:40 +0000 (+0200) Subject: Let yytranslate handle the eof case. X-Git-Tag: v2.7.90~1079 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/aba12ad162e23b8e7d669d9ca4a782e1914bc9d6?ds=inline 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. --- diff --git a/ChangeLog b/ChangeLog index e8e8ac2b..7ce96d14 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-11-11 Akim Demaille + + 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 yychar cannot be empty in yyerrlab. diff --git a/data/lalr1.cc b/data/lalr1.cc index 8c5b3345..2a0a5f23 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -1149,19 +1149,14 @@ m4_popdef([b4_at_dollar])])dnl [[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. */ @@ -1284,7 +1279,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[; error, discard it. */ /* Return failure if at end of input. */ - if (yychar == yyeof_) + if (yyla.type == yyeof_) YYABORT; else {]b4_assert_if([ @@ -1536,7 +1531,9 @@ b4_error_verbose_if([ tok])[) 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 (t) <= user_token_number_max_) + if (t <= yyeof_) + return yyeof_; + else if (static_cast (t) <= user_token_number_max_) return translate_table[t]; else return undef_token_;