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