From 258cddbc3695f2095cbfbc9ff95309b28733f7d2 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 25 Jun 2012 16:52:30 +0200 Subject: [PATCH] c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE. * 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 10829f54..7eebe910 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 6688c06b..a5c1ee73 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: $@])])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 4d0a1bcb..699d7304 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 4f0b2688..e82e654f 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 57f3dace..7cf088b2 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 4f2e1c62..b1631665 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 e0d6ed3a..29e9ba84 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); -- 2.45.2