bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] symbol::token.


From: Akim Demaille
Subject: [PATCH] symbol::token.
Date: Thu, 13 Nov 2008 06:04:51 -0000

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).
---
 ChangeLog     |   15 +++++++++++++++
 data/lalr1.cc |   27 ++++++++++++++++++---------
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 48808a5..134e862 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2008-11-13  Akim Demaille  <address@hidden>
 
+       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  <address@hidden>
+
        YYERRCODE.
        * TODO (YYERRCODE): Mention the case of $undef.
 
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 8256e0d..15a4258 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<token_type> (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])[;
 
-- 
1.6.0.2.588.g3102





reply via email to

[Prev in Thread] Current Thread [Next in Thread]