From 2b08bcebf082a2417ef5706b5ae0664ce844f16e Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 9 Sep 2009 23:09:22 +0200 Subject: [PATCH] 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. --- ChangeLog | 10 ++++++++++ data/c++.m4 | 19 ++++++++++--------- data/lalr1.cc | 4 ++-- data/variant.hh | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 70e89b7..1182da7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2009-09-16 Akim Demaille + 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 + TODO: statistics. * TODO (Figures): New. diff --git a/data/c++.m4 b/data/c++.m4 index 3157e47..22b3375 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -178,21 +178,22 @@ m4_define([b4_public_types_declare], /// Default constructor. inline symbol_type (); - /// Constructor. - inline symbol_type (]b4_args([int t], + /// Constructor for tokens with semantic value. + inline symbol_type (]b4_args([token_type t], [const semantic_type& v], 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]))[); /// The symbol type. int type; - /// Return the type corresponding to this state. + /// The symbol type. inline int type_get_ () const; - /// Its token. + /// The token. inline token_type token () const; }; ]b4_symbol_constructor_declare]) @@ -269,20 +270,20 @@ m4_define([b4_public_types_define], inline ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args( - [int t], + [token_type t], b4_locations_if([const location_type& l]))[) : super_type (]b4_locations_if([l])[) - , type (t) + , type (yytranslate_ (t)) { } inline ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args( - [int t], + [token_type t], [const semantic_type& v], b4_locations_if([const location_type& l]))[) : super_type (v]b4_locations_if([, l])[) - , type (t) + , type (yytranslate_ (t)) { } diff --git a/data/lalr1.cc b/data/lalr1.cc index ac2fa35..1a2777e 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -29,7 +29,7 @@ m4_define([b4_integral_parser_table_declare], ]) # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT) -# --------------------------------------------- +# ------------------------------------------------------------- # Define "parser::yy_" which contents is CONTENT. m4_define([b4_integral_parser_table_define], [ const b4_int_type_for([$2]) @@ -321,7 +321,7 @@ do { \ /// The state. state_type state; - /// Return the type corresponding to this state. + /// The type (corresponding to \a state). inline int type_get_ () const; }; diff --git a/data/variant.hh b/data/variant.hh index ae26f5b..31af62b 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -262,7 +262,7 @@ b4_args(b4_symbol_if([$1], [has_type], [const b4_symbol([$1], [type])& v]), 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_locations_if([l]))); } -- 1.6.4.3