From: Akim Demaille Date: Mon, 1 Sep 2008 08:51:46 +0000 (+0200) Subject: symbol::token. X-Git-Tag: v2.7.90~1050 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/202598d3ab40e58385028c842ff79a680e79bbe8?ds=sidebyside symbol::token. This is allows the user to get the type of a token return by yylex. * data/lalr1.cc (symbol::token): New. (yytoknum_): Define when %define lex_symbol, independently of %debug. (yytoken_number_): Move into... (symbol::token): here, since that's the only use. The other one is YYPRINT which was not officially supported by lalr1.cc, and anyway it did not work since YYPRINT uses this array under a different name (yytoknum). --- diff --git a/ChangeLog b/ChangeLog index 48808a51..134e862d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2008-11-13 Akim Demaille + + symbol::token. + This is allows the user to get the type of a token return by + yylex. + + * data/lalr1.cc (symbol::token): New. + (yytoknum_): Define when %define lex_symbol, independently of + %debug. + (yytoken_number_): Move into... + (symbol::token): here, since that's the only use. + The other one is YYPRINT which was not officially supported + by lalr1.cc, and anyway it did not work since YYPRINT uses this + array under a different name (yytoknum). + 2008-11-13 Akim Demaille YYERRCODE. diff --git a/data/lalr1.cc b/data/lalr1.cc index 8256e0d1..15a42580 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -346,6 +346,21 @@ m4_define([b4_symbol_constructor_definitions], { return type; } +]b4_lex_symbol_if([[ + ]b4_parser_class_name[::token_type + ]b4_parser_class_name[::symbol_type::token () const + { + // YYTOKNUM[NUM] -- (External) token number corresponding to the + // (internal) symbol number NUM (which must be that of a token). */ + static + const ]b4_int_type_for([b4_toknum])[ + yytoken_number_[] = + { + ]b4_toknum[ + }; + return static_cast (yytoken_number_[type]); + } +]])[ ]b4_variant_if( [ // Implementation of make_symbol for each symbol type. @@ -727,9 +742,6 @@ m4_ifdef([b4_stype], #if YYDEBUG /// For each rule, its source line number. static const ]b4_int_type_for([b4_rline])[ yyrline_[]; - /// (External) token number corresponding to the (internal) symbol - /// number (which must be that of a token). - static const ]b4_int_type_for([b4_toknum])[ yytoken_number_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. @@ -810,6 +822,9 @@ m4_ifdef([b4_stype], /// Return the type corresponding to this state. inline int type_get_ () const; + + /// Its token. + inline token_type token () const; }; ]b4_symbol_constructor_declarations[ @@ -1564,12 +1579,6 @@ b4_error_verbose_if([int yystate, int yytoken], symbol of state STATE-NUM. */ ]b4_table_define([stos], [b4_stos])[; -#if YYDEBUG - /* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ - ]b4_table_define([token_number], [b4_toknum])[; -#endif - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ ]b4_table_define([r1], [b4_r1])[;