bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Let yytranslate handle the eof case.


From: Akim Demaille
Subject: [PATCH] Let yytranslate handle the eof case.
Date: Tue, 11 Nov 2008 14:33:16 -0000

        * 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     |    8 ++++++++
 data/lalr1.cc |   23 ++++++++++-------------
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e8e8ac2..7ce96d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2008-11-11  Akim Demaille  <address@hidden>
 
+       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  <address@hidden>
+
        yychar cannot be empty in yyerrlab.
        * TODO (yychar == yyempty_): New.
        * data/lalr1.cc: Remove the handling of this case.
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 8c5b334..2a0a5f2 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<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_;
-- 
1.6.0.2.588.g3102





reply via email to

[Prev in Thread] Current Thread [Next in Thread]