[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [updated PATCH] %language declaration
From: |
Paolo Bonzini |
Subject: |
Re: [updated PATCH] %language declaration |
Date: |
Mon, 11 Dec 2006 10:49:45 +0100 |
User-agent: |
Thunderbird 1.5.0.8 (Macintosh/20061025) |
1. When there is a command-line flag and an equivalent grammar directive,
the description of one in the manual usually cross-references the other.
Done.
2. The version number 2.3a+ is a temporary version number
Ok, but then I have to change extexi to drop the %require version. See
the attached patch.
3. I think we should document this %language feature as experimental
4. In language_argmatch, I believe your `if (!language)' is a fallacy
since language is initialized upon allocation. Also, why is `args' plural
here and not in skeleton_arg?
5. In output.c, why do you have DEFINE (program_name)?
All fixed.
6. I think your new m4_fatal messages should follow the format of the
existing ones in glr.cc and lalr1.cc.
I think there is no reason to mention the skeleton name in the error
messages -- and I didn't put it here because it is as ugly as
"c-skel.m4". The real fix would be to use another "@foo" directive,
parsed by scan-skel.l and executed as a "complain".
By the way, can
internationalization work with m4_fatal?
No. Calling the gettext function could be achieved with the same
solution I outlined above. But this is part of a bigger problem, which
is that xgettext does not know about m4 syntax.
7. I seem to recall that Akim dislikes the ".tab" that appears in output
file names. I don't care for it, and Automake prefers to remove it. Of
course, we hang on to it anyway for backward-compatibility. Since
%language is new, is this perhaps a good opportunity to get rid of ".tab"
for all languages?
I don't know, I view it as more consistent %language "C" is a no-op.
But I'm not going to argue much on this. :-)
What do you think of the attached patch?
Paolo
2006-10-09 Paolo Bonzini <address@hidden>
* NEWS: Document %language.
* data/c-skel.m4, data/c++-skel.m4: New.
* data/glr.c: Complain on push parsers.
* doc/bison.texinfo (C++ Parser Interface): Prefer %language
over %skeleton.
(Directives): Document %language and %skeleton.
(Command line): Document -L.
* examples/extexi: Rewrite %require directive.
* examples/calc++/Makefile.am: Pass VERSION to extexi.
* src/files.c (compute_exts_from_gc): Look in language structure
for .y extension.
(compute_file_name_parts): Check whether .tab should be added.
* src/getargs.c (valid_languages, skeleton_prio, language_prio,
language, skeleton_arg, language_argmatch): New.
(long_options): Add --language.
(getargs): Use skeleton_arg, add -L/--language.
* src/getargs.h: Include location.h.
(struct bison_language, language, skeleton_arg, language_argmatch): New.
* src/output.c (prepare): Pick default skeleton from struct language.
Don't dispatch C skeletons here.
* src/parse-gram.y (PERCENT_LANGUAGE): New.
(prologue_declaration): Add "%language" rule, use skeleton_arg.
* src/scan-gram.l ("%language"): New rule.
* tests/calc.at: Test %skeleton and %language.
* tests/local.at (AT_SKEL_CC_IF): Look for %language.
(AT_GLR_IF): Look for %skeleton "glr.cc".
(AT_LALR1_CC_IF, AT_GLR_CC_IF): Rewrite.
(AT_YACC_IF): Reject %language.
Index: NEWS
===================================================================
RCS file: /sources/bison/bison/NEWS,v
retrieving revision 1.168
diff -u -r1.168 NEWS
--- NEWS 5 Dec 2006 23:13:41 -0000 1.168
+++ NEWS 11 Dec 2006 08:54:12 -0000
@@ -131,6 +131,11 @@
Also see the new section `Prologue Alternatives' in the Bison manual.
+* A new experimental directive %language allows to specify the language
+ of the generated parser. Supported languages are C (the default) and
+ C++. Besides the skeleton that is used, the directive affects
+ the names of the generated files if the grammar has extension ".y".
+
Changes in version 2.3a, 2006-09-13:
* Instead of %union, you can define and use your own union type
Index: data/Makefile.am
===================================================================
RCS file: /sources/bison/bison/data/Makefile.am,v
retrieving revision 1.15
diff -u -r1.15 Makefile.am
--- data/Makefile.am 12 Oct 2006 22:40:52 -0000 1.15
+++ data/Makefile.am 14 Nov 2006 14:04:47 -0000
@@ -16,8 +16,8 @@
## 02110-1301 USA
dist_pkgdata_DATA = README bison.m4 \
- c.m4 yacc.c glr.c push.c \
- c++.m4 location.cc lalr1.cc glr.cc
+ c-skel.m4 c.m4 yacc.c glr.c push.c \
+ c++-skel.m4 c++.m4 location.cc lalr1.cc glr.cc
m4sugardir = $(pkgdatadir)/m4sugar
dist_m4sugar_DATA = m4sugar/m4sugar.m4
Index: data/c-skel.m4
===================================================================
RCS file: data/c-skel.m4
diff -N data/c-skel.m4
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ data/c-skel.m4 14 Nov 2006 14:07:58 -0000
@@ -0,0 +1,28 @@
+m4_divert(-1) -*- Autoconf -*-
+
+# C skeleton dispatching for Bison.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+b4_push_if( [m4_define([b4_used_skeleton],
[b4_pkgdatadir/[push.c]])])
+b4_glr_if( [m4_define([b4_used_skeleton],
[b4_pkgdatadir/[glr.c]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton],
[b4_pkgdatadir/[glr.c]])])
+
+m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[yacc.c]])
+m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
+
+m4_include(b4_used_skeleton)
Index: data/c++-skel.m4
===================================================================
RCS file: data/c++-skel.m4
diff -N data/c++-skel.m4
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ data/c++-skel.m4 14 Nov 2006 14:07:58 -0000
@@ -0,0 +1,29 @@
+m4_divert(-1) -*- Autoconf -*-
+
+# C++ skeleton dispatching for Bison.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+b4_glr_if( [m4_define([b4_used_skeleton],
[b4_pkgdatadir/[glr.cc]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton],
[b4_pkgdatadir/[glr.cc]])])
+
+b4_push_if([m4_fatal([%push-parser is not supported by C++])])
+
+m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[lalr1.cc]])
+m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
+
+m4_include(b4_used_skeleton)
Index: data/glr.c
===================================================================
RCS file: /sources/bison/bison/data/glr.c,v
retrieving revision 1.191
diff -u -r1.191 glr.c
--- data/glr.c 15 Oct 2006 12:37:06 -0000 1.191
+++ data/glr.c 14 Nov 2006 14:04:47 -0000
@@ -21,6 +21,9 @@
m4_include(b4_pkgdatadir/[c.m4])
+b4_push_if([
+m4_fatal([Non-deterministic push parsers are not yet supported])])
+
## ---------------- ##
## Default values. ##
## ---------------- ##
Index: doc/bison.texinfo
===================================================================
RCS file: /sources/bison/bison/doc/bison.texinfo,v
retrieving revision 1.215
diff -u -r1.215 bison.texinfo
--- doc/bison.texinfo 9 Dec 2006 18:52:01 -0000 1.215
+++ doc/bison.texinfo 11 Dec 2006 08:54:30 -0000
@@ -4619,6 +4619,11 @@
chosen as if the input file were named @address@hidden
@end deffn
address@hidden {Directive} %language="@var{language}"
+Specify the programming language for the generated parser. Currently
+supported languages include C, C++ and Java.
address@hidden deffn
+
@deffn {Directive} %locations
Generate the code processing the locations (@pxref{Action Features,
,Special Features for Use in Actions}). This mode is enabled as soon as
@@ -4681,6 +4686,11 @@
Require a Version of Bison}.
@end deffn
address@hidden {Directive} %skeleton "@var{file}"
+Specify the skeleton to use. You probably don't need this option unless
+you are developing Bison.
address@hidden deffn
+
@deffn {Directive} %token-table
Generate an array of token names in the parser file. The name of the
array is @code{yytname}; @address@hidden is the name of the
@@ -7262,8 +7272,9 @@
@table @option
@item -S @var{file}
@itemx address@hidden
-Specify the skeleton to use. You probably don't need this option unless
-you are developing Bison.
+Specify the skeleton to use, as if @code{%skeleton} was specified
+(@pxref{Decl Summary, , Bison Declaration Summary}). You probably
+don't need this option unless you are developing Bison.
@item -t
@itemx --debug
@@ -7271,6 +7282,12 @@
already defined, so that the debugging facilities are compiled.
@xref{Tracing, ,Tracing Your Parser}.
address@hidden -L @var{language}
address@hidden address@hidden
+Specify the programming language for the generated parser, as if
address@hidden was specified (@pxref{Decl Summary, , Bison Declaration
+Summary}). Currently supported languages include C, C++ and Java.
+
@item --locations
Pretend that @code{%locations} was specified. @xref{Decl Summary}.
@@ -7433,14 +7450,24 @@
@node C++ Bison Interface
@subsection C++ Bison Interface
address@hidden - %skeleton "lalr1.cc"
address@hidden - %language "C++"
@c - Always pure
@c - initial action
-The C++ parser @acronym{LALR}(1) skeleton is named @file{lalr1.cc}. To
-select it, you may either pass the option @option{--skeleton=lalr1.cc}
-to Bison, or include the directive @samp{%skeleton "lalr1.cc"} in the
-grammar preamble. When run, @command{bison} will create several
+The C++ parser @acronym{LALR}(1) skeleton is selected using a
+language directive, @samp{%language "C++"}, or the synonymous
+command-line option @address@hidden both
+ the grammar directive and the command-line option, the
+ language name is case-insensitive}. These were introduced
+in Bison 2.3b; for compatibility with earlier versions, you
+may also pass the option @option{--skeleton=lalr1.cc} to Bison
+or include the directive @samp{%skeleton "lalr1.cc"} in the
+grammar preamble. Specifying the language is however preferred,
+because it is clearer and because it will automatically choose the
+correct skeleton for GLR parsers (the C++ GLR skeleton is still
+under development).
+
+When run, @command{bison} will create several
entities in the @samp{yy} namespace. Use the @samp{%name-prefix}
directive to change the namespace name, see @ref{Decl Summary}. The
various classes are generated in the following files:
@@ -7828,8 +7855,8 @@
@comment file: calc++-parser.yy
@example
-%skeleton "lalr1.cc" /* -*- C++ -*- */
-%require "2.1a"
+%language "C++" /* -*- C++ -*- */
+%require "2.3b"
%defines
%define "parser_class_name" "calcxx_parser"
@end example
Index: examples/extexi
===================================================================
RCS file: /sources/bison/bison/examples/extexi,v
retrieving revision 1.6
diff -u -r1.6 extexi
--- examples/extexi 11 May 2006 11:35:13 -0000 1.6
+++ examples/extexi 11 Dec 2006 09:17:10 -0000
@@ -111,6 +111,7 @@
else
line = "";
+ gsub (/^%require "[^"]*"$/, "%require \"" VERSION "\"", line);
gsub (/address@hidden/, "", line);
gsub (/address@hidden/, "", line);
gsub ("@[{]", "{", line);
Index: examples/calc++/Makefile.am
===================================================================
RCS file: /sources/bison/bison/examples/calc++/Makefile.am,v
retrieving revision 1.4
diff -u -r1.4 Makefile.am
--- examples/calc++/Makefile.am 8 Feb 2006 18:56:01 -0000 1.4
+++ examples/calc++/Makefile.am 11 Dec 2006 09:17:10 -0000
@@ -35,8 +35,8 @@
# Extract in src.
$(calc_extracted): $(doc) $(extexi)
cd $(srcdir) && \
- $(AWK) -f ../extexi ../../doc/bison.texinfo -- \
- calc++-parser.yy \
+ $(AWK) -f ../extexi -v VERSION="@VERSION@" \
+ ../../doc/bison.texinfo -- calc++-parser.yy \
calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc
Index: src/files.c
===================================================================
RCS file: /sources/bison/bison/src/files.c,v
retrieving revision 1.99
diff -u -r1.99 files.c
--- src/files.c 9 Nov 2006 18:17:05 -0000 1.99
+++ src/files.c 14 Nov 2006 14:04:48 -0000
@@ -149,12 +149,20 @@
static void
compute_exts_from_gf (const char *ext)
{
- src_extension = xstrdup (ext);
- header_extension = xstrdup (ext);
- tr (src_extension, 'y', 'c');
- tr (src_extension, 'Y', 'C');
- tr (header_extension, 'y', 'h');
- tr (header_extension, 'Y', 'H');
+ if (!strcmp (ext, ".y"))
+ {
+ src_extension = xstrdup (language->src_extension);
+ header_extension = xstrdup (language->header_extension);
+ }
+ else
+ {
+ src_extension = xstrdup (ext);
+ header_extension = xstrdup (ext);
+ tr (src_extension, 'y', 'c');
+ tr (src_extension, 'Y', 'C');
+ tr (header_extension, 'y', 'h');
+ tr (header_extension, 'Y', 'H');
+ }
}
/* Compute extensions from the given c source file extension. */
@@ -277,7 +285,10 @@
xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
}
- all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
+ if (language->add_tab)
+ all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
+ else
+ all_but_ext = xstrdup (all_but_tab_ext);
/* Compute the extensions from the grammar file name. */
if (ext && !yacc_flag)
Index: src/getargs.c
===================================================================
RCS file: /sources/bison/bison/src/getargs.c,v
retrieving revision 1.86
diff -u -r1.86 getargs.c
--- src/getargs.c 10 Nov 2006 06:11:21 -0000 1.86
+++ src/getargs.c 11 Dec 2006 08:54:55 -0000
@@ -66,11 +66,18 @@
int trace_flag = trace_none;
int warnings_flag = warnings_none;
+static const struct bison_language valid_languages[] = {
+ { "c", "c-skel.m4", ".c", ".h", true },
+ { "c++", "c++-skel.m4", ".cc", ".hh", true },
+ { NULL, NULL, NULL, NULL, false }
+};
+
+static int skeleton_prio = 2;
const char *skeleton = NULL;
+static int language_prio = 2;
+const struct bison_language *language = &valid_languages[0];
const char *include = NULL;
-extern char *program_name;
-
/** Decode an option's set of keys.
*
@@ -323,12 +330,87 @@
}
+/*-------------------------------------.
+| --skeleton and --language handling. |
+`--------------------------------------*/
+
+void
+skeleton_arg (const char *arg, int prio, location *loc)
+{
+ if (skeleton_prio < prio)
+ return;
+ if (skeleton_prio == prio)
+ {
+ const char *msg =
+ _("multiple skeleton declarations are invalid");
+ if (loc)
+ {
+ complain_at (*loc, msg);
+ return;
+ }
+ else
+ {
+ error (0, 0, msg);
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ skeleton_prio = prio;
+ skeleton = arg;
+}
+
+void
+language_argmatch (const char *arg, int prio, location *loc)
+{
+ int i;
+ if (language_prio < prio)
+ return;
+ if (language_prio == prio)
+ {
+ const char *msg =
+ _("multiple language declarations are invalid");
+ if (loc)
+ {
+ complain_at (*loc, msg);
+ return;
+ }
+ else
+ {
+ error (0, 0, msg);
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ for (i = 0; valid_languages[i].language; i++)
+ if (!strcasecmp (arg, valid_languages[i].language))
+ {
+ language_prio = prio;
+ language = &valid_languages[i];
+ break;
+ }
+
+ if (!valid_languages[i].language)
+ {
+ const char *msg = _("invalid language `%s'");
+ if (loc)
+ {
+ complain_at (*loc, msg, arg);
+ return;
+ }
+ else
+ {
+ error (0, 0, msg, arg);
+ usage (EXIT_FAILURE);
+ }
+ }
+}
+
/*----------------------.
| Process the options. |
`----------------------*/
/* Shorts options. */
-static char const short_options[] = "yvegdhr:ltknVo:b:p:S:T::W";
+static char const short_options[] = "yvegdhr:L:ltknVo:b:p:S:T::W";
/* Values for long options that do not have single-letter equivalents. */
enum
@@ -374,6 +456,7 @@
{ "no-parser", no_argument, 0, 'n' },
{ "raw", no_argument, 0, 0 },
{ "skeleton", required_argument, 0, 'S' },
+ { "language", required_argument, 0, 'L' },
{ "token-table", no_argument, 0, 'k' },
{0, 0, 0, 0}
@@ -414,8 +497,12 @@
case 'h':
usage (EXIT_SUCCESS);
+ case 'L':
+ language_argmatch (optarg, 0, NULL);
+ break;
+
case 'S':
- skeleton = AS_FILE_NAME (optarg);
+ skeleton_arg (AS_FILE_NAME (optarg), 0, NULL);
break;
case 'I':
Index: src/getargs.h
===================================================================
RCS file: /sources/bison/bison/src/getargs.h,v
retrieving revision 1.36
diff -u -r1.36 getargs.h
--- src/getargs.h 1 Nov 2006 06:09:40 -0000 1.36
+++ src/getargs.h 14 Nov 2006 14:04:48 -0000
@@ -22,6 +22,10 @@
#ifndef GETARGS_H_
# define GETARGS_H_
+#include "location.h"
+
+extern char *program_name;
+
/* flags set by % directives */
/* for -S */
@@ -65,6 +69,18 @@
extern bool nondeterministic_parser;
+/* --language. */
+struct bison_language
+{
+ const char *language;
+ const char *skeleton;
+ const char *src_extension;
+ const char *header_extension;
+ bool add_tab;
+};
+
+extern const struct bison_language *language;
+
/*-----------.
| --report. |
`-----------*/
@@ -126,4 +142,8 @@
*/
void getargs (int argc, char *argv[]);
+/* Used by parse-gram.y. */
+void language_argmatch (const char *arg, int prio, location *loc);
+void skeleton_arg (const char *arg, int prio, location *loc);
+
#endif /* !GETARGS_H_ */
Index: src/output.c
===================================================================
RCS file: /sources/bison/bison/src/output.c,v
retrieving revision 1.259
diff -u -r1.259 output.c
--- src/output.c 12 Nov 2006 07:39:37 -0000 1.259
+++ src/output.c 14 Nov 2006 14:04:48 -0000
@@ -620,20 +620,16 @@
muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack));
muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack));
- /* Find the right skeleton file. */
- if (!skeleton)
- {
- if (glr_parser || nondeterministic_parser)
- skeleton = "glr.c";
- else
- skeleton = "yacc.c";
- }
+ /* Find the right skeleton file, and add muscles about the skeletons */
+ if (skeleton)
+ MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
+ else
+ skeleton = language->skeleton;
- /* About the skeletons. */
+ /* About the skeletons. */
{
char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
MUSCLE_INSERT_STRING ("pkgdatadir", pkgdatadir ? pkgdatadir : PKGDATADIR);
- MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
}
}
Index: src/parse-gram.y
===================================================================
RCS file: /sources/bison/bison/src/parse-gram.y,v
retrieving revision 1.100
diff -u -r1.100 parse-gram.y
--- src/parse-gram.y 2 Dec 2006 01:52:16 -0000 1.100
+++ src/parse-gram.y 11 Dec 2006 08:56:29 -0000
@@ -143,6 +143,7 @@
PERCENT_FILE_PREFIX "%file-prefix"
PERCENT_GLR_PARSER "%glr-parser"
PERCENT_INITIAL_ACTION "%initial-action"
+ PERCENT_LANGUAGE "%language"
PERCENT_LEX_PARAM "%lex-param"
PERCENT_LOCATIONS "%locations"
PERCENT_NAME_PREFIX "%name-prefix"
@@ -245,6 +246,7 @@
{
muscle_code_grow ("initial_action", translate_symbol_action ($2, @2),
@2);
}
+| "%language" STRING { language_argmatch ($2, 1, &@1); }
| "%lex-param" "{...}" { add_param ("lex_param", $2, @2); }
| "%locations" { locations_flag = true; }
| "%name-prefix" STRING { spec_name_prefix = $2; }
@@ -257,7 +259,7 @@
| "%pure-parser" { pure_parser = true; }
| "%push-parser" { push_parser = true; }
| "%require" STRING { version_check (&@2, $2); }
-| "%skeleton" STRING { skeleton = $2; }
+| "%skeleton" STRING { skeleton_arg ($2, 1, &@1); }
| "%token-table" { token_table_flag = true; }
| "%verbose" { report_flag = report_states; }
| "%yacc" { yacc_flag = true; }
Index: src/scan-gram.l
===================================================================
RCS file: /sources/bison/bison/src/scan-gram.l,v
retrieving revision 1.110
diff -u -r1.110 scan-gram.l
--- src/scan-gram.l 12 Nov 2006 07:39:37 -0000 1.110
+++ src/scan-gram.l 14 Nov 2006 14:04:48 -0000
@@ -172,6 +172,7 @@
"%fixed"[-_]"output"[-_]"files" return PERCENT_YACC;
"%initial-action" return PERCENT_INITIAL_ACTION;
"%glr-parser" return PERCENT_GLR_PARSER;
+ "%language" return PERCENT_LANGUAGE;
"%left" return PERCENT_LEFT;
"%lex-param" return PERCENT_LEX_PARAM;
"%locations" return PERCENT_LOCATIONS;
Index: tests/calc.at
===================================================================
RCS file: /sources/bison/bison/tests/calc.at,v
retrieving revision 1.96
diff -u -r1.96 calc.at
--- tests/calc.at 8 Dec 2006 22:36:33 -0000 1.96
+++ tests/calc.at 11 Dec 2006 08:56:44 -0000
@@ -628,12 +628,15 @@
AT_BANNER([[Simple LALR(1) C++ Calculator.]])
+# First let's try using %skeleton
+AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations])
+
# AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
# ---------------------------------------
# Start a testing chunk which compiles `calc' grammar with
# the C++ skeleton, and performs several tests over the parser.
m4_define([AT_CHECK_CALC_LALR1_CC],
-[AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" %defines %locations] $@)])
AT_CHECK_CALC_LALR1_CC([])
AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
@@ -652,12 +655,15 @@
AT_BANNER([[Simple GLR C++ Calculator.]])
+# Again, we try also using %skeleton.
+AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations])
+
# AT_CHECK_CALC_GLR_CC([BISON-OPTIONS])
# -------------------------------------
# Start a testing chunk which compiles `calc' grammar with
# the GLR C++ skeleton, and performs several tests over the parser.
m4_define([AT_CHECK_CALC_GLR_CC],
-[AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)])
AT_CHECK_CALC_GLR_CC([])
AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
Index: tests/local.at
===================================================================
RCS file: /sources/bison/bison/tests/local.at,v
retrieving revision 1.17
diff -u -r1.17 local.at
--- tests/local.at 13 Oct 2006 05:00:26 -0000 1.17
+++ tests/local.at 14 Nov 2006 14:04:49 -0000
@@ -41,17 +41,17 @@
m4_define([_AT_BISON_OPTION_PUSHDEFS],
[m4_if([$1$2], $[1]$[2], [],
[m4_fatal([$0: Invalid arguments: address@hidden)])dnl
-m4_pushdef([AT_LALR1_CC_IF],
-[m4_bmatch([$3], ["lalr1.cc"], [$1], [$2])])
-m4_pushdef([AT_GLR_CC_IF],
-[m4_bmatch([$3], ["glr.cc"], [$1], [$2])])
m4_pushdef([AT_SKEL_CC_IF],
-[m4_bmatch([$3], ["\(glr\|lalr1\).cc"], [$1], [$2])])
+[m4_bmatch([$3], [%language "[Cc]\+\+"\|%skeleton "[a-z0-9]+\.cc"], [$1],
[$2])])
m4_pushdef([AT_GLR_IF],
-[m4_bmatch([$3], [%glr-parser], [$1], [$2])])
+[m4_bmatch([$3], [%glr-parser\|%skeleton "glr\.], [$1], [$2])])
+m4_pushdef([AT_LALR1_CC_IF],
+[AT_SKEL_CC_IF([AT_GLR_IF([$2], [$1])], [$2])])
+m4_pushdef([AT_GLR_CC_IF],
+[AT_SKEL_CC_IF([AT_GLR_IF([$1], [$2])], [$2])])
# Using yacc.c?
m4_pushdef([AT_YACC_IF],
-[m4_bmatch([$3], [%glr-parser\|%skeleton], [$2], [$1])])
+[m4_bmatch([$3], [%language\|%glr-parser\|%skeleton], [$2], [$1])])
m4_pushdef([AT_PARAM_IF],
[m4_bmatch([$3], [%parse-param], [$1], [$2])])
m4_pushdef([AT_LOCATION_IF],
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/07
- Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/07
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/07
- Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/07
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/07
- Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/07
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/07
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/07
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/08
- Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/08
- Re: [updated PATCH] %language declaration,
Paolo Bonzini <=
- Re: [SPAM] Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/12
- Re: [SPAM] Re: [updated PATCH] %language declaration, Paul Eggert, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Paul Eggert, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/13
- Re: [SPAM] Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/13
- Re: [SPAM] Re: [SPAM] Re: [updated PATCH] %language declaration, Joel E. Denny, 2006/12/13
- Re: [updated PATCH] %language declaration, Paolo Bonzini, 2006/12/14