mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 10:13:03 +00:00
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.
This commit is contained in:
13
ChangeLog
13
ChangeLog
@@ -1,3 +1,16 @@
|
|||||||
|
2008-11-13 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
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 <demaille@gostai.com>
|
2008-11-13 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Honor lex-params in %define lex_symbol mode.
|
Honor lex-params in %define lex_symbol mode.
|
||||||
|
|||||||
@@ -635,7 +635,8 @@ m4_ifdef([b4_stype],
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Convert a scanner token number \a t to a symbol number.
|
/// 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.
|
/// A complete symbol, with its type.
|
||||||
template <typename Exact>
|
template <typename Exact>
|
||||||
@@ -1587,7 +1588,8 @@ b4_error_verbose_if([int yystate, int yytoken],
|
|||||||
|
|
||||||
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
||||||
]b4_parser_class_name[::token_number_type
|
]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
|
static
|
||||||
const token_number_type
|
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 unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
|
||||||
const token_number_type undef_token_ = ]b4_undef_token_number[;
|
const token_number_type undef_token_ = ]b4_undef_token_number[;
|
||||||
|
|
||||||
if (t <= yyeof_)
|
if (static_cast<int>(t) <= yyeof_)
|
||||||
return yyeof_;
|
return yyeof_;
|
||||||
else if (static_cast<unsigned int> (t) <= user_token_number_max_)
|
else if (static_cast<unsigned int> (t) <= user_token_number_max_)
|
||||||
return translate_table[t];
|
return translate_table[t];
|
||||||
|
|||||||
Reference in New Issue
Block a user