[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Finer input type for yytranslate.,
Akim Demaille <=