clearly deprecate %name-prefix

* src/scan-gram.l (%name-prefix): Issue a deprecation warning.

* tests/calc.at, tests/headers.at, tests/input.at, tests/java.at,
* tests/javapush.at, tests/local.at: Adjust expectations.
Or disable -Wdeprecated.

* doc/bison.texi: Document that %name-prefix is replaced by %define
api.prefix.
This commit is contained in:
Akim Demaille
2019-01-02 19:09:56 +01:00
parent 9ec93d4e34
commit b90675e67a
9 changed files with 63 additions and 49 deletions

12
NEWS
View File

@@ -19,8 +19,16 @@ GNU Bison NEWS
** Deprecated features ** Deprecated features
The use of the %error-verbose directive is deprecated in favor of "%define The %error-verbose directive is deprecated in favor of '%define
parse.error verbose" since Bison 3.0, but no warning was issued. parse.error verbose' since Bison 3.0, but no warning was issued.
The '%name-prefix "xx"' directive is deprecated in favor of '%define
api.prefix {xx}' since Bison 3.0, but no warning was issued. These
directives are slightly different, you might need to adjust your code.
%name-prefix renames only symbols with external linkage, while api.prefix
also renames types and macros, including @code{YYDEBUG},
@code{YYTOKENTYPE}, @code{yytokentype}, @code{YYSTYPE}, @code{YYLTYPE},
etc.
The following variables have been renamed for consistency. Backward The following variables have been renamed for consistency. Backward
compatibility is ensured, but upgrading is recommended. compatibility is ensured, but upgrading is recommended.

View File

@@ -5692,6 +5692,10 @@ it, using @samp{%locations} allows for more accurate syntax error messages.
@end deffn @end deffn
@deffn {Directive} %name-prefix "@var{prefix}" @deffn {Directive} %name-prefix "@var{prefix}"
Obsoleted by @samp{%define api.prefix @{@var{prefix}@}}. @xref{Multiple
Parsers, ,Multiple Parsers in the Same Program}. For C++ parsers, see the
@samp{%define api.namespace} documentation in this section.
Rename the external symbols used in the parser so that they start with Rename the external symbols used in the parser so that they start with
@var{prefix} instead of @samp{yy}. The precise list of symbols renamed in C @var{prefix} instead of @samp{yy}. The precise list of symbols renamed in C
parsers is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs}, parsers is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
@@ -5700,9 +5704,11 @@ parsers is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
@code{yypull_parse}, @code{yypstate}, @code{yypstate_new} and @code{yypull_parse}, @code{yypstate}, @code{yypstate_new} and
@code{yypstate_delete} will also be renamed. For example, if you use @code{yypstate_delete} will also be renamed. For example, if you use
@samp{%name-prefix "c_"}, the names become @code{c_parse}, @code{c_lex}, and @samp{%name-prefix "c_"}, the names become @code{c_parse}, @code{c_lex}, and
so on. For C++ parsers, see the @samp{%define api.namespace} documentation so on.
in this section. @xref{Multiple Parsers, ,Multiple Parsers in the Same
Program}. Contrary to defining @code{api.prefix}, some symbols are @emph{not} renamed
by @code{%name-prefix}, for instance @code{YYDEBUG}, @code{YYTOKENTYPE},
@code{yytokentype}, @code{YYSTYPE}, @code{YYLTYPE}.
@end deffn @end deffn
@ifset defaultprec @ifset defaultprec
@@ -5880,21 +5886,8 @@ Any absolute or relative C++ namespace reference without a trailing
@code{"::"}. For example, @code{"foo"} or @code{"::foo::bar"}. @code{"::"}. For example, @code{"foo"} or @code{"::foo::bar"}.
@item Default Value: @item Default Value:
The value specified by @code{%name-prefix}, which defaults to @code{yy}. @code{yy}, unless you used the obsolete @samp{%name-prefix "@var{prefix}"}
This usage of @code{%name-prefix} is for backward compatibility and can be directive.
confusing since @code{%name-prefix} also specifies the textual prefix for
the lexical analyzer function. Thus, if you specify @code{%name-prefix}, it
is best to also specify @samp{%define api.namespace} so that
@code{%name-prefix} @emph{only} affects the lexical analyzer function. For
example, if you specify:
@example
%define api.namespace @{foo@}
%name-prefix "bar::"
@end example
The parser namespace is @code{foo} and @code{yylex} is referenced as
@code{bar::lex}.
@end itemize @end itemize
@end deffn @end deffn
@c api.namespace @c api.namespace
@@ -5996,7 +5989,7 @@ Any valid identifier.
@item Default Value: @item Default Value:
In C++, @code{parser}. In Java, @code{YYParser} or In C++, @code{parser}. In Java, @code{YYParser} or
@code{@var{name-prefix}Parser} (@pxref{Java Bison Interface}). @code{@var{api.prefix}Parser} (@pxref{Java Bison Interface}).
@item History: @item History:
Introduced in Bison 3.3 to replace @code{parser_class_name}. Introduced in Bison 3.3 to replace @code{parser_class_name}.
@@ -6709,7 +6702,7 @@ extern int cdebug;
Prior to Bison 2.6, a feature similar to @code{api.prefix} was provided by Prior to Bison 2.6, a feature similar to @code{api.prefix} was provided by
the obsolete directive @code{%name-prefix} (@pxref{Table of Symbols, ,Bison the obsolete directive @code{%name-prefix} (@pxref{Table of Symbols, ,Bison
Symbols}) and the option @code{--name-prefix} (@pxref{Bison Options}). Symbols}) and the option @option{--name-prefix} (@pxref{Bison Options}).
@node Interface @node Interface
@chapter Parser C-Language Interface @chapter Parser C-Language Interface
@@ -12240,7 +12233,7 @@ single Java source file named @file{@var{basename}.java} containing the
parser implementation. Using a grammar file without a @file{.y} suffix is parser implementation. Using a grammar file without a @file{.y} suffix is
currently broken. The basename of the parser implementation file can be currently broken. The basename of the parser implementation file can be
changed by the @code{%file-prefix} directive or the changed by the @code{%file-prefix} directive or the
@option{-p}/@option{--name-prefix} option. The entire parser implementation @option{-b}/@option{--file-prefix} option. The entire parser implementation
file name can be changed by the @code{%output} directive or the file name can be changed by the @code{%output} directive or the
@option{-o}/@option{--output} option. The parser implementation file @option{-o}/@option{--output} option. The parser implementation file
contains a single class for the parser. contains a single class for the parser.
@@ -12373,10 +12366,9 @@ properly, the position class should override the @code{equals} and
@c - Reporting errors @c - Reporting errors
The name of the generated parser class defaults to @code{YYParser}. The The name of the generated parser class defaults to @code{YYParser}. The
@code{YY} prefix may be changed using the @code{%name-prefix} directive or @code{YY} prefix may be changed using the @samp{%define api.prefix}.
the @option{-p}/@option{--name-prefix} option. Alternatively, use Alternatively, use @samp{%define api.parser.class @{@var{name}@}} to give a
@samp{%define api.parser.class @{@var{name}@}} to give a custom name to the custom name to the class. The interface of this class is detailed below.
class. The interface of this class is detailed below.
By default, the parser class has package visibility. A declaration By default, the parser class has package visibility. A declaration
@samp{%define public} will change to public visibility. Remember that, @samp{%define public} will change to public visibility. Remember that,
@@ -12753,12 +12745,6 @@ constructor that @emph{creates} a lexer. Default is none.
@xref{Java Scanner Interface}. @xref{Java Scanner Interface}.
@end deffn @end deffn
@deffn {Directive} %name-prefix "@var{prefix}"
The prefix of the parser class name @code{@var{prefix}Parser} if
@samp{%define api.parser.class} is not used. Default is @code{YY}.
@xref{Java Bison Interface}.
@end deffn
@deffn {Directive} %parse-param @{@var{type} @var{name}@} @deffn {Directive} %parse-param @{@var{type} @var{name}@}
A parameter for the parser class added as parameters to constructor(s) A parameter for the parser class added as parameters to constructor(s)
and as fields initialized by the constructor(s). Default is none. and as fields initialized by the constructor(s). Default is none.
@@ -12807,6 +12793,12 @@ Not supported. Use @code{%code imports} instead.
@xref{Java Differences}. @xref{Java Differences}.
@end deffn @end deffn
@deffn {Directive} {%define api.prefix} @{@var{prefix}@}
The prefix of the parser class name @code{@var{prefix}Parser} if
@samp{%define api.parser.class} is not used. Default is @code{YY}.
@xref{Java Bison Interface}.
@end deffn
@deffn {Directive} {%define abstract} @deffn {Directive} {%define abstract}
Whether the parser class is declared @code{abstract}. Default is false. Whether the parser class is declared @code{abstract}. Default is false.
@xref{Java Bison Interface}. @xref{Java Bison Interface}.
@@ -12860,7 +12852,7 @@ The package to put the parser class in. Default is none.
@deffn {Directive} {%define api.parser.class} @{@var{name}@} @deffn {Directive} {%define api.parser.class} @{@var{name}@}
The name of the parser class. Default is @code{YYParser} or The name of the parser class. Default is @code{YYParser} or
@code{@var{name-prefix}Parser}. @xref{Java Bison Interface}. @code{@var{api.prefix}Parser}. @xref{Java Bison Interface}.
@end deffn @end deffn
@deffn {Directive} {%define api.position.type} @{@var{class}@} @deffn {Directive} {%define api.position.type} @{@var{class}@}

View File

@@ -237,7 +237,6 @@ eqopt ([[:space:]]*=)?
"%lex-param" RETURN_PERCENT_PARAM (lex); "%lex-param" RETURN_PERCENT_PARAM (lex);
"%locations" RETURN_PERCENT_FLAG ("locations"); "%locations" RETURN_PERCENT_FLAG ("locations");
"%merge" return BISON_DIRECTIVE (MERGE); "%merge" return BISON_DIRECTIVE (MERGE);
"%name-prefix" return BISON_DIRECTIVE (NAME_PREFIX);
"%no-default-prec" return BISON_DIRECTIVE (NO_DEFAULT_PREC); "%no-default-prec" return BISON_DIRECTIVE (NO_DEFAULT_PREC);
"%no-lines" return BISON_DIRECTIVE (NO_LINES); "%no-lines" return BISON_DIRECTIVE (NO_LINES);
"%nonassoc" return PERCENT_NONASSOC; "%nonassoc" return PERCENT_NONASSOC;
@@ -266,13 +265,19 @@ eqopt ([[:space:]]*=)?
issued only since Bison 3.3. */ issued only since Bison 3.3. */
"%error-verbose" DEPRECATED ("%define parse.error verbose"); "%error-verbose" DEPRECATED ("%define parse.error verbose");
/* Deprecated since Bison 2.6 (2012-07-19), but the warning is
issued only since Bison 3.3. */
"%name"[-_]"prefix"{eqopt} {
deprecated_directive (loc, yytext, "%define api.prefix");
return BISON_DIRECTIVE (NAME_PREFIX);
}
/* Deprecated since Bison 2.7.90, 2012. */ /* Deprecated since Bison 2.7.90, 2012. */
"%default"[-_]"prec" DEPRECATED ("%default-prec"); "%default"[-_]"prec" DEPRECATED ("%default-prec");
"%error"[-_]"verbose" DEPRECATED ("%define parse.error verbose"); "%error"[-_]"verbose" DEPRECATED ("%define parse.error verbose");
"%expect"[-_]"rr" DEPRECATED ("%expect-rr"); "%expect"[-_]"rr" DEPRECATED ("%expect-rr");
"%file-prefix"{eqopt} DEPRECATED ("%file-prefix"); "%file-prefix"{eqopt} DEPRECATED ("%file-prefix");
"%fixed"[-_]"output"[-_]"files" DEPRECATED ("%fixed-output-files"); "%fixed"[-_]"output"[-_]"files" DEPRECATED ("%fixed-output-files");
"%name"[-_]"prefix"{eqopt} DEPRECATED ("%name-prefix");
"%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec"); "%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec");
"%no"[-_]"lines" DEPRECATED ("%no-lines"); "%no"[-_]"lines" DEPRECATED ("%no-lines");
"%output"{eqopt} DEPRECATED ("%output"); "%output"{eqopt} DEPRECATED ("%output");

View File

@@ -445,18 +445,22 @@ sed '/^Starting/d
/ \$[[0-9$]]* = /d / \$[[0-9$]]* = /d
/^yydestructor:/d' stderr >at-stderr /^yydestructor:/d' stderr >at-stderr
mv at-stderr stderr mv at-stderr stderr
# 2. Create the reference error message. # 2. Create the reference error message.
AT_DATA([[expout]], AT_DATA([[expout]],
[$5 [$5
]) ])
# 3. If locations are not used, remove them. # 3. If locations are not used, remove them.
AT_YYERROR_SEES_LOC_IF([], AT_YYERROR_SEES_LOC_IF([],
[[sed 's/^[-0-9.]*: //' expout >at-expout [[sed 's/^[-0-9.]*: //' expout >at-expout
mv at-expout expout]]) mv at-expout expout]])
# 4. If error-verbose is not used, strip the', unexpected....' part. # 4. If error-verbose is not used, strip the', unexpected....' part.
m4_bmatch([$1], [%define parse.error verbose], [], m4_bmatch([$1], [%define parse.error verbose], [],
[[sed 's/syntax error, .*$/syntax error/' expout >at-expout [[sed 's/syntax error, .*$/syntax error/' expout >at-expout
mv at-expout expout]]) mv at-expout expout]])
# 5. Check # 5. Check
AT_CHECK([cat stderr], 0, [expout]) AT_CHECK([cat stderr], 0, [expout])
]) ])
@@ -494,7 +498,7 @@ AT_SETUP([Calculator $1 $2])
AT_BISON_OPTION_PUSHDEFS([$1]) AT_BISON_OPTION_PUSHDEFS([$1])
AT_DATA_CALC_Y([$1]) AT_DATA_CALC_Y([$1])
AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]]), [], [$2]) AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]], [[], []]), [$2], [-Wno-deprecated])
AT_CHECK_SPACES([calc.AT_LANG_EXT AT_DEFINES_IF([calc.AT_LANG_HDR])]) AT_CHECK_SPACES([calc.AT_LANG_EXT AT_DEFINES_IF([calc.AT_LANG_HDR])])
# Test the priorities. # Test the priorities.

View File

@@ -84,7 +84,9 @@ AT_DATA_GRAMMAR([input.y],
exp: %empty; exp: %empty;
]]) ]])
AT_BISON_CHECK([--defines -o input.c input.y]) AT_BISON_CHECK([--defines -o input.c input.y], [], [],
[[input.y:11.1-12: warning: deprecated directive: '%name-prefix', use '%define api.prefix' [-Wdeprecated]
]])
# YYLTYPE should be defined, and MY_LLOC declared. # YYLTYPE should be defined, and MY_LLOC declared.
AT_DATA([caller.c], AT_DATA([caller.c],

View File

@@ -2310,7 +2310,7 @@ m4_pushdef([AT_TEST],
%% %%
exp: %empty; exp: %empty;
]]) ]])
AT_BISON_CHECK([[$2 input.y]], [[1]], [[]], AT_BISON_CHECK([[$2 -Wno-deprecated input.y]], [[1]], [[]],
[[$3: error: '%name-prefix' and '%define api.prefix' cannot be used together [[$3: error: '%name-prefix' and '%define api.prefix' cannot be used together
]]) ]])
]) ])
@@ -2501,7 +2501,9 @@ AT_DATA_GRAMMAR([[input.y]],
%token_table %token_table
%error-verbose %error-verbose
%glr-parser %glr-parser
%% exp : '0' %name-prefix "bar"
%%
exp : '0'
]]) ]])
AT_BISON_CHECK([[input.y]], [[1]], [[]], AT_BISON_CHECK([[input.y]], [[1]], [[]],
@@ -2512,7 +2514,7 @@ input.y:13.1-14: warning: deprecated directive: '%file-prefix =', use '%file-pre
input.y:14.1-15.2: warning: deprecated directive: '%file-prefix\n =', use '%file-prefix' [-Wdeprecated] input.y:14.1-15.2: warning: deprecated directive: '%file-prefix\n =', use '%file-prefix' [-Wdeprecated]
input.y:17.1-19: warning: deprecated directive: '%fixed-output_files', use '%fixed-output-files' [-Wdeprecated] input.y:17.1-19: warning: deprecated directive: '%fixed-output_files', use '%fixed-output-files' [-Wdeprecated]
input.y:18.1-19: warning: deprecated directive: '%fixed_output-files', use '%fixed-output-files' [-Wdeprecated] input.y:18.1-19: warning: deprecated directive: '%fixed_output-files', use '%fixed-output-files' [-Wdeprecated]
input.y:20.1-13: warning: deprecated directive: '%name-prefix=', use '%name-prefix' [-Wdeprecated] input.y:20.1-13: warning: deprecated directive: '%name-prefix=', use '%define api.prefix' [-Wdeprecated]
input.y:21.1-16: warning: deprecated directive: '%no-default_prec', use '%no-default-prec' [-Wdeprecated] input.y:21.1-16: warning: deprecated directive: '%no-default_prec', use '%no-default-prec' [-Wdeprecated]
input.y:22.1-16: warning: deprecated directive: '%no_default-prec', use '%no-default-prec' [-Wdeprecated] input.y:22.1-16: warning: deprecated directive: '%no_default-prec', use '%no-default-prec' [-Wdeprecated]
input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wdeprecated] input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wdeprecated]
@@ -2522,6 +2524,7 @@ input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-tabl
input.y:27.1-14: warning: deprecated directive: '%error-verbose', use '%define parse.error verbose' [-Wdeprecated] input.y:27.1-14: warning: deprecated directive: '%error-verbose', use '%define parse.error verbose' [-Wdeprecated]
input.y:27-6: error: %define variable 'parse.error' redefined input.y:27-6: error: %define variable 'parse.error' redefined
input.y:11-6: previous definition input.y:11-6: previous definition
input.y:29.1-12: warning: deprecated directive: '%name-prefix', use '%define api.prefix' [-Wdeprecated]
]]) ]])
AT_CLEANUP AT_CLEANUP
@@ -2581,7 +2584,6 @@ AT_DATA_GRAMMAR([[input.y]],
%file-prefix %file-prefix
"bar" "bar"
%fixed-output-files %fixed-output-files
%name-prefix "foo"
%no-default-prec %no-default-prec
%no-lines %no-lines
%output "foo" %output "foo"

View File

@@ -263,7 +263,7 @@ AT_DATA_JAVA_CALC_Y([$1
$2 $2
}]) }])
AT_BISON_CHECK([-o Calc.java Calc.y]) AT_BISON_CHECK([-Wno-deprecated -o Calc.java Calc.y])
AT_JAVA_COMPILE([Calc.java]) AT_JAVA_COMPILE([Calc.java])
# Test the priorities. # Test the priorities.
@@ -401,7 +401,7 @@ start: END {$2};
%% %%
class m4_default([$3], [Position]) {} class m4_default([$3], [Position]) {}
]) ])
AT_BISON_CHECK([[YYParser.y]]) AT_BISON_CHECK([[-Wno-deprecated YYParser.y]])
AT_CHECK([[grep '[mb]4_' YYParser.y]], [1], [ignore]) AT_CHECK([[grep '[mb]4_' YYParser.y]], [1], [ignore])
AT_JAVA_COMPILE([[YYParser.java]]) AT_JAVA_COMPILE([[YYParser.java]])
]) ])

View File

@@ -345,7 +345,7 @@ AT_DATA([input],[[1 + 2 * 3 = 7
# Compose pieces to build the actual .y file. # Compose pieces to build the actual .y file.
AT_DATA([Calc.y],[[/* Infix notation calculator--calc */ AT_DATA([Calc.y],[[/* Infix notation calculator--calc */
%language "Java" %language "Java"
%name-prefix "Calc"
%define api.parser.class {Calc} %define api.parser.class {Calc}
%code { %code {
@@ -619,7 +619,7 @@ AT_BISON_OPTION_PUSHDEFS
AT_DATA([Calc.y],[[/* Infix notation calculator--calc. */ AT_DATA([Calc.y],[[/* Infix notation calculator--calc. */
%language "Java" %language "Java"
%name-prefix "Calc"
%define api.parser.class {Calc} %define api.parser.class {Calc}
%lex-param { Reader rdr } %lex-param { Reader rdr }
%locations %locations

View File

@@ -874,15 +874,16 @@ m4_define([AT_LANG_HDR(c)], [h])
m4_define([AT_LANG_HDR(c++)], [hh]) m4_define([AT_LANG_HDR(c++)], [hh])
# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2], [EXTRA-COMPILER-FLAGS) # AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2],
# ------------------------------------------------------------------ # [$4: EXTRA-COMPILER-FLAGS, [$5: EXTRA-BISON-FLAGS])
# -------------------------------------------------------------------
# Compile OUTPUT.y to OUTPUT.c, OUTPUT.cc, or OUTPUT.java, and then # Compile OUTPUT.y to OUTPUT.c, OUTPUT.cc, or OUTPUT.java, and then
# compile it to OUTPUT or OUTPUT.class. If OTHER is specified, compile # compile it to OUTPUT or OUTPUT.class. If OTHER is specified, compile
# OUTPUT-OTHER.c, OUTPUT-OTHER.cc, or OUTPUT-OTHER.java to OUTPUT or # OUTPUT-OTHER.c, OUTPUT-OTHER.cc, or OUTPUT-OTHER.java to OUTPUT or
# OUTPUT.java along with it. Relies on AT_CXX_IF and # OUTPUT.java along with it. Relies on AT_CXX_IF and
# AT_JAVA_IF. # AT_JAVA_IF.
m4_define([AT_FULL_COMPILE], m4_define([AT_FULL_COMPILE],
[AT_BISON_CHECK([-o $1.AT_LANG_EXT $1.y]) [AT_BISON_CHECK([$5 -o $1.AT_LANG_EXT $1.y])
AT_LANG_COMPILE([$1], AT_LANG_COMPILE([$1],
m4_join([ ], m4_join([ ],
[$1.AT_LANG_EXT], [$1.AT_LANG_EXT],