[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] symbol::token.,
Akim Demaille <=