I committed the attached patch.
Index: ChangeLog
===================================================================
RCS file: /sources/bison/bison/ChangeLog,v
retrieving revision 1.1610
diff -p -u -r1.1610 ChangeLog
--- ChangeLog   21 Nov 2006 07:07:35 -0000      1.1610
+++ ChangeLog   2 Dec 2006 01:48:03 -0000
@@ -1,3 +1,25 @@
+2006-12-01  Joel E. Denny  <[EMAIL PROTECTED]>
+
+       Support a file name argument to %defines.  Deprecate `=' in
+       %file-prefix, %name-prefix, and %output.  Discussed at
+       <http://lists.gnu.org/archive/html/help-bison/2006-09/msg00001.html>.
+       * NEWS (2.3a+): Mention.
+       * doc/bison.texinfo (Decl Summary, Bison Symbols): Add entry for new
+       form of %defines, and remove `=' from entries for %file-prefix,
+       %name-prefix, and %output.
+       * src/parse-gram.y (prologue_declaration): Implement.
+       * tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple
+       LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from
+       all but one occurrence of %name-prefix.
+       * tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix.
+       * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise.
+       * tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one
+       occurrence of each of %file-prefix and %output.  Add check for %defines
+       with argument.
+       * tests/reduce.at (Useless Terminals, Useless Nonterminals,
+       Useless Rules, Reduced Automaton, Underivable Rules, Empty Language):
+       Remove the `=' from %output.
+
 2006-11-21  Joel E. Denny  <[EMAIL PROTECTED]>
 
        Don't escape $ in test case titles since Autoconf 2.61 now does that
Index: NEWS
===================================================================
RCS file: /sources/bison/bison/NEWS,v
retrieving revision 1.166
diff -p -u -r1.166 NEWS
--- NEWS        21 Nov 2006 00:43:26 -0000      1.166
+++ NEWS        2 Dec 2006 01:48:04 -0000
@@ -6,6 +6,18 @@ Changes in version 2.3a+ (????-??-??):
 * The -g and --graph options now output graphs in Graphviz DOT format,
   not VCG format.
 
+* The grammar file may now specify the name of the parser header file using
+  %defines.  For example:
+
+    %defines "parser.h"
+
+* The `=' that used to be required in the following declarations is now
+  deprecated:
+
+    %file-prefix "parser"
+    %name-prefix "c_"
+    %output "parser.c"
+
 * Revised warning: unset or unused mid-rule values
 
   Since Bison 2.2, Bison has warned about mid-rule values that are set but not
Index: doc/bison.texinfo
===================================================================
RCS file: /sources/bison/bison/doc/bison.texinfo,v
retrieving revision 1.212
diff -p -u -r1.212 bison.texinfo
--- doc/bison.texinfo   21 Nov 2006 00:43:26 -0000      1.212
+++ doc/bison.texinfo   2 Dec 2006 01:48:07 -0000
@@ -4598,12 +4598,16 @@ header also contains their code.
 @xref{Table of Symbols, ,%requires}.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
[EMAIL PROTECTED] deffn
+
 @deffn {Directive} %destructor
 Specify how the parser should reclaim the memory associated to
 discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %file-prefix="@var{prefix}"
[EMAIL PROTECTED] {Directive} %file-prefix "@var{prefix}"
 Specify a prefix to use for all Bison output file names.  The names are
 chosen as if the input file were named @[EMAIL PROTECTED]
 @end deffn
@@ -4616,14 +4620,14 @@ grammar does not use it, using @samp{%lo
 accurate syntax error messages.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %name-prefix="@var{prefix}"
[EMAIL PROTECTED] {Directive} %name-prefix "@var{prefix}"
 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 parsers
 is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
 @code{yylval}, @code{yychar}, @code{yydebug}, and
 (if locations are used) @code{yylloc}.  For example, if you use
[EMAIL PROTECTED]"c_"}, the names become @code{c_parse}, @code{c_lex},
[EMAIL PROTECTED] "c_"}, the names become @code{c_parse}, @code{c_lex},
 and so on.  In C++ parsers, it is only the surrounding namespace which is
 named @var{prefix} instead of @samp{yy}.
 @xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
@@ -4656,7 +4660,7 @@ associate errors with the parser file, t
 file in its own right.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %output="@var{file}"
[EMAIL PROTECTED] {Directive} %output "@var{file}"
 Specify @var{file} for the parser file.
 @end deffn
 
@@ -7265,7 +7269,7 @@ Pretend that @code{%locations} was speci
 
 @item -p @var{prefix}
 @itemx [EMAIL PROTECTED]
-Pretend that @code{%name-prefix="@var{prefix}"} was specified.
+Pretend that @code{%name-prefix "@var{prefix}"} was specified.
 @xref{Decl Summary}.
 
 @item -l
@@ -8653,6 +8657,11 @@ Bison declaration to create a header fil
 @xref{Decl Summary}.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
[EMAIL PROTECTED] Summary}.
[EMAIL PROTECTED] deffn
+
 @deffn {Directive} %destructor
 Specify how the parser should reclaim the memory associated to
 discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
@@ -8685,7 +8694,7 @@ Bison declaration to request verbose, sp
 when @code{yyerror} is called.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %file-prefix="@var{prefix}"
[EMAIL PROTECTED] {Directive} %file-prefix "@var{prefix}"
 Bison declaration to set the prefix of the output files.  @xref{Decl
 Summary}.
 @end deffn
@@ -8717,7 +8726,7 @@ function is applied to the two semantic 
 @xref{GLR Parsers, ,Writing @acronym{GLR} Parsers}.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %name-prefix="@var{prefix}"
[EMAIL PROTECTED] {Directive} %name-prefix "@var{prefix}"
 Bison declaration to rename the external symbols.  @xref{Decl Summary}.
 @end deffn
 
@@ -8739,7 +8748,7 @@ Bison declaration to assign nonassociati
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
[EMAIL PROTECTED] {Directive} %output="@var{file}"
[EMAIL PROTECTED] {Directive} %output "@var{file}"
 Bison declaration to set the name of the parser file.  @xref{Decl
 Summary}.
 @end deffn
Index: src/parse-gram.y
===================================================================
RCS file: /sources/bison/bison/src/parse-gram.y,v
retrieving revision 1.99
diff -p -u -r1.99 parse-gram.y
--- src/parse-gram.y    21 Nov 2006 00:43:26 -0000      1.99
+++ src/parse-gram.y    2 Dec 2006 01:48:08 -0000
@@ -226,10 +226,16 @@ prologue_declaration:
 | "%debug"                         { debug_flag = true; }
 | "%define" STRING content.opt     { muscle_insert ($2, $3); }
 | "%defines"                       { defines_flag = true; }
+| "%defines" STRING
+    {
+      defines_flag = true;
+      spec_defines_file = xstrdup ($2);
+    }
 | "%error-verbose"                 { error_verbose = true; }
 | "%expect" INT                    { expected_sr_conflicts = $2; }
 | "%expect-rr" INT                { expected_rr_conflicts = $2; }
-| "%file-prefix" "=" STRING        { spec_file_prefix = $3; }
+| "%file-prefix" STRING            { spec_file_prefix = $2; }
+| "%file-prefix" "=" STRING        { spec_file_prefix = $3; } /* deprecated */
 | "%glr-parser"
     {
       nondeterministic_parser = true;
@@ -241,10 +247,12 @@ prologue_declaration:
     }
 | "%lex-param" "{...}"         { add_param ("lex_param", $2, @2); }
 | "%locations"                  { locations_flag = true; }
-| "%name-prefix" "=" STRING     { spec_name_prefix = $3; }
+| "%name-prefix" STRING         { spec_name_prefix = $2; }
+| "%name-prefix" "=" STRING     { spec_name_prefix = $3; } /* deprecated */
 | "%no-lines"                   { no_lines_flag = true; }
 | "%nondeterministic-parser"   { nondeterministic_parser = true; }
-| "%output" "=" STRING          { spec_outfile = $3; }
+| "%output" STRING              { spec_outfile = $2; }
+| "%output" "=" STRING          { spec_outfile = $3; }  /* deprecated */
 | "%parse-param" "{...}"       { add_param ("parse_param", $2, @2); }
 | "%pure-parser"                { pure_parser = true; }
 | "%push-parser"                { push_parser = true; }
Index: tests/calc.at
===================================================================
RCS file: /sources/bison/bison/tests/calc.at,v
retrieving revision 1.93
diff -p -u -r1.93 calc.at
--- tests/calc.at       8 Nov 2006 20:28:57 -0000       1.93
+++ tests/calc.at       2 Dec 2006 01:48:08 -0000
@@ -556,7 +556,7 @@ AT_CHECK_CALC_LALR()
 
 AT_CHECK_CALC_LALR([%defines])
 AT_CHECK_CALC_LALR([%locations])
-AT_CHECK_CALC_LALR([%name-prefix="calc"])
+AT_CHECK_CALC_LALR([%name-prefix="calc"]) dnl test deprecated `='
 AT_CHECK_CALC_LALR([%verbose])
 AT_CHECK_CALC_LALR([%yacc])
 AT_CHECK_CALC_LALR([%error-verbose])
@@ -565,15 +565,15 @@ AT_CHECK_CALC_LALR([%pure-parser %locati
 AT_CHECK_CALC_LALR([%push-parser %locations])
 AT_CHECK_CALC_LALR([%error-verbose %locations])
 
-AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix="calc" 
%verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix "calc" 
%verbose %yacc])
 
 AT_CHECK_CALC_LALR([%debug])
-AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix 
"calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc])
-AT_CHECK_CALC_LALR([%push-parser %error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%push-parser %error-verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
+AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
 
 
 # ----------------------- #
@@ -594,7 +594,7 @@ AT_CHECK_CALC_GLR()
 
 AT_CHECK_CALC_GLR([%defines])
 AT_CHECK_CALC_GLR([%locations])
-AT_CHECK_CALC_GLR([%name-prefix="calc"])
+AT_CHECK_CALC_GLR([%name-prefix "calc"])
 AT_CHECK_CALC_GLR([%verbose])
 AT_CHECK_CALC_GLR([%yacc])
 AT_CHECK_CALC_GLR([%error-verbose])
@@ -602,14 +602,14 @@ AT_CHECK_CALC_GLR([%error-verbose])
 AT_CHECK_CALC_GLR([%pure-parser %locations])
 AT_CHECK_CALC_GLR([%error-verbose %locations])
 
-AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix="calc" 
%verbose %yacc])
+AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix "calc" 
%verbose %yacc])
 
 AT_CHECK_CALC_GLR([%debug])
-AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix 
"calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
+AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
 
 
 # ----------------------------- #
@@ -626,13 +626,13 @@ m4_define([AT_CHECK_CALC_LALR1_CC],
 [AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations] $@)])
 
 AT_CHECK_CALC_LALR1_CC([])
-AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix="calc" %verbose 
%yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix "calc" %verbose 
%yacc])
 
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" 
%verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" 
%verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" 
%verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" 
%verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 
 
@@ -650,11 +650,11 @@ m4_define([AT_CHECK_CALC_GLR_CC],
 [AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations] $@)])
 
 AT_CHECK_CALC_GLR_CC([])
-AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
 
 AT_CHECK_CALC_GLR_CC([%debug])
-AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix="calc" %verbose 
%yacc])
+AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix "calc" %verbose 
%yacc])
 
-AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" 
%verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" 
%verbose %yacc])
 
-AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" 
%verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" 
%verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
Index: tests/headers.at
===================================================================
RCS file: /sources/bison/bison/tests/headers.at,v
retrieving revision 1.14
diff -p -u -r1.14 headers.at
--- tests/headers.at    13 Feb 2006 19:07:04 -0000      1.14
+++ tests/headers.at    2 Dec 2006 01:48:08 -0000
@@ -89,7 +89,7 @@ AT_SETUP([export YYLTYPE])
 AT_DATA_GRAMMAR([input.y],
 [%locations
 
-%name-prefix="my_"
+%name-prefix "my_"
 %{
 #include <stdio.h>
 #include <stdlib.h>
Index: tests/local.at
===================================================================
RCS file: /sources/bison/bison/tests/local.at,v
retrieving revision 1.17
diff -p -u -r1.17 local.at
--- tests/local.at      13 Oct 2006 05:00:26 -0000      1.17
+++ tests/local.at      2 Dec 2006 01:48:08 -0000
@@ -64,8 +64,8 @@ m4_pushdef([AT_PURE_AND_LOC_IF],
 m4_pushdef([AT_GLR_OR_PARAM_IF],
 [m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])])
 m4_pushdef([AT_NAME_PREFIX],
-[m4_bmatch([$3], [%name-prefix=".*"],
-           [m4_bregexp([$3], [name-prefix="\([^"]*\)"], [\1])],
+[m4_bmatch([$3], [%name-prefix ".*"],
+           [m4_bregexp([$3], [name-prefix "\([^"]*\)"], [\1])],
            [yy])])
 # yyerror receives the location if %location & %pure & (%glr or %parse-param).
 m4_pushdef([AT_YYERROR_ARG_LOC_IF],
Index: tests/output.at
===================================================================
RCS file: /sources/bison/bison/tests/output.at,v
retrieving revision 1.11
diff -p -u -r1.11 output.at
--- tests/output.at     12 Oct 2006 23:29:52 -0000      1.11
+++ tests/output.at     2 Dec 2006 01:48:08 -0000
@@ -64,13 +64,13 @@ AT_CHECK_OUTPUT([foo.y], [%defines %verb
 AT_CHECK_OUTPUT([foo.yy], [%defines %verbose %yacc],[],
                [y.output y.tab.c y.tab.h])
 
-# Exercise %output and %file-prefix
-AT_CHECK_OUTPUT([foo.y], [%file-prefix="bar" %defines %verbose],      [],
+# Exercise %output and %file-prefix including deprecated `='
+AT_CHECK_OUTPUT([foo.y], [%file-prefix "bar" %defines %verbose],      [],
                [bar.output bar.tab.c bar.tab.h])
 AT_CHECK_OUTPUT([foo.y], [%output="bar.c" %defines %verbose %yacc],[],
                [bar.output bar.c bar.h])
 AT_CHECK_OUTPUT([foo.y],
-               [%file-prefix="baz" %output="bar.c" %defines %verbose %yacc],
+               [%file-prefix="baz" %output "bar.c" %defines %verbose %yacc],
                [],
                [bar.output bar.c bar.h])
 
@@ -86,6 +86,10 @@ AT_CHECK_OUTPUT([foo.yy], [],
                [--defines=foo.hpp -o foo.c++],
                [foo.c++ foo.hpp])
 
+AT_CHECK_OUTPUT([foo.yy], [%defines "foo.hpp"],
+               [-o foo.c++],
+               [foo.c++ foo.hpp])
+
 AT_CHECK_OUTPUT([foo.yy], [],
                [-o foo.c++ --graph=foo.gph],
                [foo.c++ foo.gph])
Index: tests/reduce.at
===================================================================
RCS file: /sources/bison/bison/tests/reduce.at,v
retrieving revision 1.14
diff -p -u -r1.14 reduce.at
--- tests/reduce.at     14 May 2005 06:49:48 -0000      1.14
+++ tests/reduce.at     2 Dec 2006 01:48:08 -0000
@@ -27,7 +27,7 @@ AT_SETUP([Useless Terminals])
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 
 %token useless1
 %token useless2
@@ -71,7 +71,7 @@ AT_SETUP([Useless Nonterminals])
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 
 %nterm useless1
 %nterm useless2
@@ -128,7 +128,7 @@ AT_KEYWORDS([report])
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful;
@@ -221,7 +221,7 @@ AT_DATA([[not-reduced.y]],
 /* A useful one. */
 %token useful
 %verbose
-%output="not-reduced.c"
+%output "not-reduced.c"
 
 %%
 
@@ -267,7 +267,7 @@ AT_DATA([[reduced.y]],
 /* A useful one. */
 %token useful
 %verbose
-%output="reduced.c"
+%output "reduced.c"
 
 %%
 
@@ -304,7 +304,7 @@ AT_KEYWORDS([report])
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful | underivable;
@@ -342,7 +342,7 @@ AT_CLEANUP
 AT_SETUP([Empty Language])
 
 AT_DATA([[input.y]],
-[[%output="input.c"
+[[%output "input.c"
 %%
 exp: exp;
 ]])

Reply via email to