bison-patches
[Top][All Lists]
Advanced

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

[PATCH] Finer input type for yytranslate.


From: Akim Demaille
Subject: [PATCH] Finer input type for yytranslate.
Date: Thu, 13 Nov 2008 05:33:54 -0000

This patch is debatable: the tradition expects yylex to return an int
which happens to correspond to token_number (which is an enum).  This
allows for instance to return characters (such as '*' etc.).  But this
goes against the stronger typing I am trying to have with the new
lex interface which return a symbol_type.  So in this case, feed
yytranslate_ with a token_type.

        * data/lalr1.cc (yytranslate_): When in %define lex-symbol,
        expect a token_type.
---
 ChangeLog     |   13 +++++++++++++
 data/lalr1.cc |    8 +++++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0ba320e..fdc0d61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2008-11-13  Akim Demaille  <address@hidden>
 
+       Finer input type for yytranslate.
+       This patch is debatable: the tradition expects yylex to return an int
+       which happens to correspond to token_number (which is an enum).  This
+       allows for instance to return characters (such as '*' etc.).  But this
+       goes against the stronger typing I am trying to have with the new
+       lex interface which return a symbol_type.  So in this case, feed
+       yytranslate_ with a token_type.
+       
+       * data/lalr1.cc (yytranslate_): When in %define lex-symbol,
+       expect a token_type.
+
+2008-11-13  Akim Demaille  <address@hidden>
+
        Honor lex-params in %define lex_symbol mode.
        * data/lalr1.cc: Use b4_lex_param.
 
diff --git a/data/lalr1.cc b/data/lalr1.cc
index c2c634c..6b0d9d9 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -635,7 +635,8 @@ m4_ifdef([b4_stype],
 #endif
 
     /// Convert a scanner token number \a t to a symbol number.
-    static inline token_number_type yytranslate_ (int t);
+    static inline token_number_type yytranslate_ (]b4_lex_symbol_if(
+                                                  [token_type], [int])[ t);
 
     /// A complete symbol, with its type.
     template <typename Exact>
@@ -1587,7 +1588,8 @@ b4_error_verbose_if([int yystate, int yytoken],
 
   /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
   ]b4_parser_class_name[::token_number_type
-  ]b4_parser_class_name[::yytranslate_ (int t)
+  ]b4_parser_class_name[::yytranslate_ (]b4_lex_symbol_if([token_type],
+                                                          [int])[ t)
   {
     static
     const token_number_type
@@ -1598,7 +1600,7 @@ b4_error_verbose_if([int yystate, int yytoken],
     const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
     const token_number_type undef_token_ = ]b4_undef_token_number[;
 
-    if (t <= yyeof_)
+    if (static_cast<int>(t) <= yyeof_)
       return yyeof_;
     else if (static_cast<unsigned int> (t) <= user_token_number_max_)
       return translate_table[t];
-- 
1.6.0.2.588.g3102





reply via email to

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