[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE.
From: |
Akim Demaille |
Subject: |
[PATCH 1/2] c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE. |
Date: |
Wed, 27 Jun 2012 10:18:51 +0200 |
* src/output.c (prepare_symbols): Do not define b4_token_table.
(prepare): Define b4_token_table_flag.
* data/bison.m4 (b4_token_table_if): New.
Arm it when error-verbose.
* data/glr.c, data/yacc.c (YYTOKEN_TABLE): Remove.
Use m4.
* data/lalr1.cc: Likewise.
(YYERROR_VERBOSE): Remove.
* NEWS, doc/bison.texi: Document this.
---
NEWS | 26 +++++++++++++++++---------
data/bison.m4 | 22 +++++++++++++---------
data/glr.c | 7 +------
data/lalr1.cc | 30 +++++++-----------------------
data/yacc.c | 7 +------
doc/bison.texi | 3 ++-
src/output.c | 2 +-
7 files changed, 42 insertions(+), 55 deletions(-)
diff --git a/NEWS b/NEWS
index 10829f5..7eebe91 100644
--- a/NEWS
+++ b/NEWS
@@ -13,14 +13,16 @@ GNU Bison NEWS
generated for C supprt ISO C90, and are tested with ISO C99 and ISO C11
compilers.
-*** Deprecated features
+*** Features deprecated since Bison 1.875
- The definitions of yystype and yyltype will be removed, as announced since
- Bison 1.875. Use YYSTYPE and YYLTYPE only.
+ The definitions of yystype and yyltype will be removed; use YYSTYPE and
+ YYLTYPE.
- YYPARSE_PARAM and YYLEX_PARAM, which were deprecated in favor of
- %parse-param and %lex-param (introduced in Bison 1.875), will no longer be
- supported.
+ YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of %parse-param and
+ %lex-param, will no longer be supported.
+
+ Support for the preprocessor symbol YYERROR_VERBOSE will be removed, use
+ %error-verbose.
*** The generated header will be included (yacc.c)
@@ -30,9 +32,9 @@ GNU Bison NEWS
because existing versions of ylwrap (e.g., Automake 1.12.1) do not support
it.
-** Headers (yacc.c, glr.c, glr.cc)
+** Headers
-*** Guards
+*** Guards (yacc.c, glr.c, glr.cc)
The generated headers are now guarded, as is already the case for C++
parsers (lalr1.cc). For intance, with --defines=foo.h:
@@ -42,7 +44,7 @@ GNU Bison NEWS
...
#endif /* !YY_FOO_H */
-*** New declarations
+*** New declarations (yacc.c, glr.c)
The generated header now declares yydebug and yyparse. Both honor
--name-prefix=bar_, and yield
@@ -57,6 +59,12 @@ GNU Bison NEWS
in order to facilitate the inclusion of several parser headers inside a
single compilation unit.
+*** Exported symbols in C++
+
+ The symbols YYTOKEN_TABLE and YYERROR_VERBOSE, which were defined in the
+ header, are removed, as they prevent the possibility of including several
+ generated headers from a single compilation unit.
+
* Noteworthy changes in release 2.5.1 (2012-06-05) [stable]
** Future changes:
diff --git a/data/bison.m4 b/data/bison.m4
index 6688c06..a5c1ee7 100644
--- a/data/bison.m4
+++ b/data/bison.m4
@@ -233,9 +233,9 @@ m4_define([b4_define_flag_if],
# _b4_define_flag_if($1, $2, FLAG)
# --------------------------------
-# This macro works around the impossibility to define macros
-# inside macros, because issuing `[$1]' is not possible in M4 :(.
-# This sucks hard, GNU M4 should really provide M5 like $$1.
+# Work around the impossibility to define macros inside macros,
+# because issuing `[$1]' is not possible in M4. GNU M4 should provide
+# $$1 a la M5/TeX.
m4_define([_b4_define_flag_if],
[m4_if([$1$2], $[1]$[2], [],
[m4_fatal([$0: Invalid arguments: address@hidden)])dnl
@@ -246,12 +246,16 @@ m4_define([b4_$3_if],
# b4_FLAG_if(IF-TRUE, IF-FALSE)
# -----------------------------
# Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise.
-b4_define_flag_if([defines]) # Whether headers are requested.
-b4_define_flag_if([error_verbose]) # Whether error are verbose.
-b4_define_flag_if([glr]) # Whether a GLR parser is requested.
-b4_define_flag_if([locations]) # Whether locations are tracked.
-b4_define_flag_if([nondeterministic]) # Whether conflicts should be handled.
-b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated.
+b4_define_flag_if([defines]) # Whether headers are requested.
+b4_define_flag_if([error_verbose]) # Whether error are verbose.
+b4_define_flag_if([glr]) # Whether a GLR parser is requested.
+b4_define_flag_if([locations]) # Whether locations are tracked.
+b4_define_flag_if([nondeterministic]) # Whether conflicts should be handled.
+b4_define_flag_if([token_table]) # Whether yytoken_table is demanded.
+b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated.
+
+# yytoken_table is needed to support verbose errors.
+b4_error_verbose_if([m4_define([b4_token_table_flag], [1])])
## ------------------------- ##
diff --git a/data/glr.c b/data/glr.c
index 4d0a1bc..699d730 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -215,11 +215,6 @@ b4_percent_code_get([[top]])[
# define YYERROR_VERBOSE ]b4_error_verbose_flag[
#endif
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
/* Default (constant) value used for initialization for null
right-hand sides. Unlike the standard yacc.c template,
here we set the default value of $$ to a zeroed-out value.
@@ -367,7 +362,7 @@ static const ]b4_int_type_for([b4_rline])[ yyrline[] =
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 4f0b268..e82e654 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -62,19 +62,6 @@ b4_copyright([Skeleton interface for Bison LALR(1) parsers
in C++],
# define YYDEBUG ]b4_debug_flag[
#endif
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE ]b4_error_verbose_flag[
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
]b4_namespace_open[
/// A Bison parser.
@@ -211,17 +198,15 @@ b4_user_stype
/// For a rule, its LHS.
static const ]b4_int_type_for([b4_r1])[ yyr1_[];
/// For a rule, its RHS length.
- static const ]b4_int_type_for([b4_r2])[ yyr2_[];
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
- /// For a symbol, its name in clear.
- static const char* const yytname_[];
-#endif]b4_error_verbose_if([
+ static const ]b4_int_type_for([b4_r2])[ yyr2_[]; ]b4_error_verbose_if([
/// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *n);])[
-#if YYDEBUG
+]b4_token_table_if([], [[#if YYDEBUG]])[
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+]b4_token_table_if([[#if YYDEBUG]])[
/// A type to store symbol numbers and -1.
typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
/// A `-1'-separated list of the rules' RHS.
@@ -1051,7 +1036,7 @@ b4_error_verbose_if([int yystate, int yytoken],
]b4_r2[
};
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+]b4_token_table_if([], [[#if YYDEBUG]])[
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at \a yyntokens_, nonterminals. */
const char*
@@ -1059,9 +1044,8 @@ b4_error_verbose_if([int yystate, int yytoken],
{
]b4_tname[
};
-#endif
-#if YYDEBUG
+]b4_token_table_if([[#if YYDEBUG]])[
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
const ]b4_parser_class_name[::rhs_number_type
]b4_parser_class_name[::yyrhs_[] =
diff --git a/data/yacc.c b/data/yacc.c
index 57f3dac..7cf088b 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -336,11 +336,6 @@ m4_if(b4_prefix, [yy], [],
# define YYERROR_VERBOSE ]b4_error_verbose_flag[
#endif
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
/* In a future release of Bison, this section will be replaced
by #include "@basename(]b4_spec_defines_file[@)". */
]b4_shared_declarations[
@@ -607,7 +602,7 @@ static const ]b4_int_type_for([b4_rline])[ yyrline[] =
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
diff --git a/doc/bison.texi b/doc/bison.texi
index 4f2e1c6..b163166 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -11216,7 +11216,8 @@ Reporting Function @code{yyerror}}.
An obsolete macro that you define with @code{#define} in the prologue
to request verbose, specific error message strings
when @code{yyerror} is called. It doesn't matter what definition you
-use for @code{YYERROR_VERBOSE}, just whether you define it. Using
+use for @code{YYERROR_VERBOSE}, just whether you define it.
+Supported by the C skeletons only; using
@code{%error-verbose} is preferred. @xref{Error Reporting}.
@end deffn
diff --git a/src/output.c b/src/output.c
index e0d6ed3..29e9ba8 100644
--- a/src/output.c
+++ b/src/output.c
@@ -142,7 +142,6 @@ escaped_output (FILE *out, char const *string)
static void
prepare_symbols (void)
{
- MUSCLE_INSERT_BOOL ("token_table", token_table_flag);
MUSCLE_INSERT_INT ("tokens_number", ntokens);
MUSCLE_INSERT_INT ("nterms_number", nvars);
MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
@@ -624,6 +623,7 @@ prepare (void)
MUSCLE_INSERT_BOOL ("nondeterministic_flag", nondeterministic_parser);
MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag);
MUSCLE_INSERT_BOOL ("tag_seen_flag", tag_seen);
+ MUSCLE_INSERT_BOOL ("token_table_flag", token_table_flag);
MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag);
MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag);
--
1.7.11.1