bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [updated PATCH] %language declaration


From: Paul Eggert
Subject: Re: [updated PATCH] %language declaration
Date: Mon, 18 Dec 2006 16:40:48 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

Paolo Bonzini <address@hidden> writes:

> What do you think of the attached patch?

Thanks. I think it's ready to be put into CVS, even if we need to
iron out some things before an official release.

I redid some minor things to fit into Bison usual style, and
installed the following.  I removed the mention of Java from
the manual, as I assume that change wasn't intended here.

2006-12-18  Paul Eggert  <address@hidden>

        * NEWS: Reword the %language news a bit, and put it earlier.

        * src/getargs.c (skeleton_arg): Last arg is now location const *.
        Rewrite to simplify the logic.
        (language_argmatch): Likewise.
        (program_name): We now own this var.
        * src/getargs.h (struct bison_language): Use char[] rather than
        const char *.

        * doc/bison.texinfo (Decl Summary, Bison Options): Don't claim
        Java is supported.
        * src/complain.c (program_name): Remove decl; no longer needed.
        * src/main.c (program_name): Remove; now belongs to getargs.

2006-12-18  Paolo Bonzini  <address@hidden>

        * NEWS: Document %language.

        * data/Makefile.am (dist_pkgdata_DATA): Add c-skel.m4, c++-skel.m4.

        * data/c-skel.m4, data/c++-skel.m4: New files.
        * 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: src/getargs.c
===================================================================
RCS file: /cvsroot/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       19 Dec 2006 00:33:53 -0000
@@ -66,10 +66,19 @@
 int trace_flag = trace_none;
 int warnings_flag = warnings_none;

+static struct bison_language const valid_languages[] = {
+  { "c", "c-skel.m4", ".c", ".h", true },
+  { "c++", "c++-skel.m4", ".cc", ".hh", true },
+  { "", "", "", "", false }
+};
+
+static int skeleton_prio = 2;
 const char *skeleton = NULL;
+static int language_prio = 2;
+struct bison_language const *language = &valid_languages[0];
 const char *include = NULL;

-extern char *program_name;
+char *program_name;


 /** Decode an option's set of keys.
@@ -323,12 +332,63 @@
 }


+/*-------------------------------------.
+| --skeleton and --language handling.  |
+`--------------------------------------*/
+
+void
+skeleton_arg (char const *arg, int prio, location const *loc)
+{
+  if (prio < skeleton_prio)
+    {
+      skeleton_prio = prio;
+      skeleton = arg;
+    }
+  else if (prio == skeleton_prio)
+    {
+      char const *msg =
+       _("multiple skeleton declarations are invalid");
+      if (loc)
+       complain_at (*loc, msg);
+      else
+       complain (msg);
+    }
+}
+
+void
+language_argmatch (char const *arg, int prio, location const *loc)
+{
+  char const *msg;
+
+  if (prio < language_prio)
+    {
+      int i;
+      for (i = 0; valid_languages[i].language[0]; i++)
+       if (strcasecmp (arg, valid_languages[i].language) == 0)
+         {
+           language_prio = prio;
+           language = &valid_languages[i];
+           return;
+         }
+      msg = _("invalid language `%s'");
+    }
+  else if (language_prio == prio)
+    msg = _("multiple language declarations are invalid");
+  else
+    return;
+
+  if (loc)
+    complain_at (*loc, msg, arg);
+  else
+    complain (msg, arg);
+}
+
 /*----------------------.
 | 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 +434,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 +475,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/complain.c
===================================================================
RCS file: /cvsroot/bison/bison/src/complain.c,v
retrieving revision 1.25
diff -u -r1.25 complain.c
--- src/complain.c      1 Nov 2006 01:47:44 -0000       1.25
+++ src/complain.c      19 Dec 2006 00:33:53 -0000
@@ -30,10 +30,6 @@
 #include "files.h"
 #include "getargs.h"

-/* The calling program should define program_name and set it to the
-   name of the executing program.  */
-extern char *program_name;
-
 bool complaint_issued;

 
Index: src/main.c
===================================================================
RCS file: /cvsroot/bison/bison/src/main.c,v
retrieving revision 1.91
diff -u -r1.91 main.c
--- src/main.c  8 Nov 2006 20:28:57 -0000       1.91
+++ src/main.c  19 Dec 2006 00:33:53 -0000
@@ -50,9 +50,6 @@
 #include "tables.h"
 #include "uniqstr.h"

-/* The name this program was run with, for messages.  */
-char *program_name;
-


 int
Index: src/files.c
===================================================================
RCS file: /cvsroot/bison/bison/src/files.c,v
retrieving revision 1.101
diff -u -r1.101 files.c
--- src/files.c 12 Dec 2006 06:47:39 -0000      1.101
+++ src/files.c 19 Dec 2006 00:33:53 -0000
@@ -153,12 +153,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") == 0)
+    {
+      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.  */
@@ -281,7 +289,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.h
===================================================================
RCS file: /cvsroot/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       19 Dec 2006 00:33:53 -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
+{
+  char language[sizeof "c++"];
+  char skeleton[sizeof "c++-skel.m4"];
+  char src_extension[sizeof ".cc"];
+  char header_extension[sizeof ".hh"];
+  bool add_tab;
+};
+
+extern struct bison_language const *language;
+
 /*-----------.
 | --report.  |
 `-----------*/
@@ -126,4 +142,8 @@
  */
 void getargs (int argc, char *argv[]);

+/* Used by parse-gram.y.  */
+void language_argmatch (char const *arg, int prio, location const *loc);
+void skeleton_arg (const char *arg, int prio, location const *loc);
+
 #endif /* !GETARGS_H_ */
Index: src/output.c
===================================================================
RCS file: /cvsroot/bison/bison/src/output.c,v
retrieving revision 1.260
diff -u -r1.260 output.c
--- src/output.c        12 Dec 2006 06:47:39 -0000      1.260
+++ src/output.c        19 Dec 2006 00:33:53 -0000
@@ -622,16 +622,13 @@
   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");
     /* b4_pkgdatadir is used inside m4_include in the skeletons, so digraphs
@@ -639,7 +636,6 @@
        his Bison installation path.  */
     MUSCLE_INSERT_STRING_RAW ("pkgdatadir",
                               pkgdatadir ? pkgdatadir : PKGDATADIR);
-    MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
   }
 }

Index: src/parse-gram.y
===================================================================
RCS file: /cvsroot/bison/bison/src/parse-gram.y,v
retrieving revision 1.101
diff -u -r1.101 parse-gram.y
--- src/parse-gram.y    17 Dec 2006 01:33:31 -0000      1.101
+++ src/parse-gram.y    19 Dec 2006 00:33:54 -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; pure_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: /cvsroot/bison/bison/src/scan-gram.l,v
retrieving revision 1.111
diff -u -r1.111 scan-gram.l
--- src/scan-gram.l     21 Nov 2006 00:43:26 -0000      1.111
+++ src/scan-gram.l     19 Dec 2006 00:33:54 -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: doc/bison.texinfo
===================================================================
RCS file: /cvsroot/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   19 Dec 2006 00:33:54 -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 and C++.
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 and C++.
+
 @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 @acronym{GLR} parsers (the C++ @acronym{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: NEWS
===================================================================
RCS file: /cvsroot/bison/bison/NEWS,v
retrieving revision 1.168
diff -u -r1.168 NEWS
--- NEWS        5 Dec 2006 23:13:41 -0000       1.168
+++ NEWS        19 Dec 2006 00:33:54 -0000
@@ -6,6 +6,11 @@
 * The -g and --graph options now output graphs in Graphviz DOT format,
   not VCG format.

+* An experimental directive %language specifies the language of the
+  generated parser, which can be C (the default) or C++.  This
+  directive affects the skeleton used, and the names of the generated
+  files if the grammar file's name ends in ".y".
+
 * The grammar file may now specify the name of the parser header file using
   %defines.  For example:

@@ -96,7 +101,7 @@
          - `%start-header {CODE}', which only Bison 2.3a supported.

     3. %provides {CODE}
-    
+
        This is the right place to write additional definitions you would like
        Bison to expose externally.  That is, this directive inserts your CODE
        both into the parser header file and into the parser code file after
Index: data/Makefile.am
===================================================================
RCS file: /cvsroot/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    19 Dec 2006 00:33:54 -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      19 Dec 2006 00:33:54 -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    19 Dec 2006 00:33:54 -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: /cvsroot/bison/bison/data/glr.c,v
retrieving revision 1.193
diff -u -r1.193 glr.c
--- data/glr.c  12 Dec 2006 06:47:39 -0000      1.193
+++ data/glr.c  19 Dec 2006 00:33:54 -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: examples/extexi
===================================================================
RCS file: /cvsroot/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     19 Dec 2006 00:33:54 -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: /cvsroot/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 19 Dec 2006 00:33:54 -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: tests/calc.at
===================================================================
RCS file: /cvsroot/bison/bison/tests/calc.at,v
retrieving revision 1.98
diff -u -r1.98 calc.at
--- tests/calc.at       15 Dec 2006 05:31:26 -0000      1.98
+++ tests/calc.at       19 Dec 2006 00:33:54 -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: /cvsroot/bison/bison/tests/local.at,v
retrieving revision 1.19
diff -u -r1.19 local.at
--- tests/local.at      7 Dec 2006 02:21:13 -0000       1.19
+++ tests/local.at      19 Dec 2006 00:33:54 -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],




reply via email to

[Prev in Thread] Current Thread [Next in Thread]