]> git.saurik.com Git - bison.git/commitdiff
Let yytranslate handle the eof case.
authorAkim Demaille <demaille@gostai.com>
Mon, 18 Aug 2008 20:16:40 +0000 (22:16 +0200)
committerAkim Demaille <demaille@gostai.com>
Tue, 11 Nov 2008 14:29:39 +0000 (15:29 +0100)
* 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.

ChangeLog
data/lalr1.cc

index e8e8ac2bcba56dfc7e33aac47c5cdb622fdd560f..7ce96d14d591bebf5a5c9bcf08ab7848d7632e78 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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.
index 8c5b33450d19cc3006e9cc7ab7658743059cf1d6..2a0a5f233f42f7b624afeb0c7c2c8bab8a44f0cc 100644 (file)
@@ -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))[;
                                     [[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.  */
@@ -1284,7 +1279,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
            error, discard it.  */
 
         /* Return failure if at end of input.  */
            error, discard it.  */
 
         /* Return failure if at end of input.  */
-        if (yychar == yyeof_)
+        if (yyla.type == yyeof_)
           YYABORT;
         else
           {]b4_assert_if([
           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[;
 
     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_;