lalr1.cc: factor the yytranslate_ invocation in make_SYMBOLS.

* data/c++.m4, data/lalr1.cc (parser::symbol_type): Change the
	constructor to take a token_type instead of the (internal) symbol
	number.
	Call yytranslate_.
	* data/variant.hh (b4_symbol_constructor_define_): Therefore,
	don't call yytranslate_ here.
This commit is contained in:
Akim Demaille
2009-09-09 23:09:22 +02:00
parent c981ce9b2b
commit 2b08bcebf0
4 changed files with 23 additions and 12 deletions

View File

@@ -1,3 +1,13 @@
2009-09-16 Akim Demaille <demaille@gostai.com>
lalr1.cc: factor the yytranslate_ invocation in make_SYMBOLS.
* data/c++.m4, data/lalr1.cc (parser::symbol_type): Change the
constructor to take a token_type instead of the (internal) symbol
number.
Call yytranslate_.
* data/variant.hh (b4_symbol_constructor_define_): Therefore,
don't call yytranslate_ here.
2009-09-16 Akim Demaille <demaille@gostai.com> 2009-09-16 Akim Demaille <demaille@gostai.com>
TODO: statistics. TODO: statistics.

View File

@@ -178,21 +178,22 @@ m4_define([b4_public_types_declare],
/// Default constructor. /// Default constructor.
inline symbol_type (); inline symbol_type ();
/// Constructor. /// Constructor for tokens with semantic value.
inline symbol_type (]b4_args([int t], inline symbol_type (]b4_args([token_type t],
[const semantic_type& v], [const semantic_type& v],
b4_locations_if([const location_type& l]))[); b4_locations_if([const location_type& l]))[);
inline symbol_type (]b4_args([int t], /// Constructor for valueless tokens.
inline symbol_type (]b4_args([token_type t],
b4_locations_if([const location_type& l]))[); b4_locations_if([const location_type& l]))[);
/// The symbol type. /// The symbol type.
int type; int type;
/// Return the type corresponding to this state. /// The symbol type.
inline int type_get_ () const; inline int type_get_ () const;
/// Its token. /// The token.
inline token_type token () const; inline token_type token () const;
}; };
]b4_symbol_constructor_declare]) ]b4_symbol_constructor_declare])
@@ -269,20 +270,20 @@ m4_define([b4_public_types_define],
inline inline
]b4_parser_class_name[::symbol_type::symbol_type (]b4_args( ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args(
[int t], [token_type t],
b4_locations_if([const location_type& l]))[) b4_locations_if([const location_type& l]))[)
: super_type (]b4_locations_if([l])[) : super_type (]b4_locations_if([l])[)
, type (t) , type (yytranslate_ (t))
{ {
} }
inline inline
]b4_parser_class_name[::symbol_type::symbol_type (]b4_args( ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args(
[int t], [token_type t],
[const semantic_type& v], [const semantic_type& v],
b4_locations_if([const location_type& l]))[) b4_locations_if([const location_type& l]))[)
: super_type (v]b4_locations_if([, l])[) : super_type (v]b4_locations_if([, l])[)
, type (t) , type (yytranslate_ (t))
{ {
} }

View File

@@ -29,7 +29,7 @@ m4_define([b4_integral_parser_table_declare],
]) ])
# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT) # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
# --------------------------------------------- # -------------------------------------------------------------
# Define "parser::yy<TABLE-NAME>_" which contents is CONTENT. # Define "parser::yy<TABLE-NAME>_" which contents is CONTENT.
m4_define([b4_integral_parser_table_define], m4_define([b4_integral_parser_table_define],
[ const b4_int_type_for([$2]) [ const b4_int_type_for([$2])
@@ -321,7 +321,7 @@ do { \
/// The state. /// The state.
state_type state; state_type state;
/// Return the type corresponding to this state. /// The type (corresponding to \a state).
inline int type_get_ () const; inline int type_get_ () const;
}; };

View File

@@ -262,7 +262,7 @@ b4_args(b4_symbol_if([$1], [has_type],
[const b4_symbol([$1], [type])& v]), [const b4_symbol([$1], [type])& v]),
b4_locations_if([const location_type& l]))) b4_locations_if([const location_type& l])))
{ {
return symbol_type (b4_args([yytranslate_ (token::b4_symbol([$1], [id]))], return symbol_type (b4_args([token::b4_symbol([$1], [id])],
b4_symbol_if([$1], [has_type], [v]), b4_symbol_if([$1], [has_type], [v]),
b4_locations_if([l]))); b4_locations_if([l])));
} }