* src/skeleton.h: New.
authorAkim Demaille <akim@epita.fr>
Sun, 30 Dec 2001 21:05:12 +0000 (21:05 +0000)
committerAkim Demaille <akim@epita.fr>
Sun, 30 Dec 2001 21:05:12 +0000 (21:05 +0000)
* src/output.c (output_parser, output_master_parser): Remove, dead
code.
* src/output.h (get_lines_number, actions_output, guards_output)
(token_definitions_output): Prototype them.
* src/parse-skel.y: Add the license notice.
Include output.h and skeleton.h.
(process_skeleton): Returns void, and takes a single parameter.
* src/scan-skel.l: Add the license notice.
Include skeleton.h.
Don't use %option yylineno: it seems that then Flex imagines
REJECT has been used, and therefore it won't reallocate its
buffers (which makes no other sense to me than a bug).  It results
in warnings for `unused: yy_flex_realloc'.
to guess if the generated parsers should have '.tab' in their
* src/Makefile.am (bison_SOURCES): Add scan-skel.l and

15 files changed:
ChangeLog
po/de.po
po/es.po
po/et.po
po/fr.po
po/ja.po
po/nl.po
po/ru.po
po/sv.po
po/tr.po
src/output.c
src/output.h
src/parse-skel.y
src/scan-skel.l
src/skeleton.h [new file with mode: 0644]

index 1c5ca44..57c9172 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2001-12-30  Akim Demaille  <akim@epita.fr>
+
+       * src/skeleton.h: New.
+       * src/output.c (output_parser, output_master_parser): Remove, dead
+       code.
+       * src/output.h (get_lines_number, actions_output, guards_output)
+       (token_definitions_output): Prototype them.
+       * src/parse-skel.y: Add the license notice.
+       Include output.h and skeleton.h.
+       (process_skeleton): Returns void, and takes a single parameter.
+       * src/scan-skel.l: Add the license notice.
+       Include skeleton.h.
+       Don't use %option yylineno: it seems that then Flex imagines
+       REJECT has been used, and therefore it won't reallocate its
+       buffers (which makes no other sense to me than a bug).  It results
+       in warnings for `unused: yy_flex_realloc'.
+
+       to guess if the generated parsers should have '.tab' in their
+       * src/Makefile.am (bison_SOURCES): Add scan-skel.l and
+
 2001-12-30  Robert Anisko  <robert.anisko@epita.fr>
 
        * src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)
index cdb36a2..6978c89 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.25\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
 "Last-Translator: Ulrich Drepper <drepper@gnu.ai.mit.edu>\n"
 "Language-Team: German <de@li.org>\n"
@@ -97,12 +97,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d Schiebe/Reduziere Konflikte"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr ""
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr ""
 
index 82e8308..1cb2460 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -30,7 +30,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.25\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 1998-09-21 10:19+0200\n"
 "Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -155,12 +155,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d conflictos desplazamiento/reducción"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr ""
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr ""
 
index 5936016..7caee14 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.28d\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 2001-08-29 17:06+02:00\n"
 "Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -96,12 +96,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d nihutamine/redutseerimine konflikti"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr "faili `%s' ei saa avada"
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr "faili ei õnnestu sulgeda"
 
index c604c58..c671ef5 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.28d\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 2001-08-29 20:00-0500\n"
 "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -98,12 +98,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d conflits décalage/réduction"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr "ne peut ouvrir le fichier `%s'"
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr "ne peut fermer le fichier"
 
index 1562523..6fa52b6 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.28\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 1999-09-28 21:10+0900\n"
 "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
@@ -97,12 +97,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d ¥·¥Õ¥È/´Ô¸µ¾×ÆÍ"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr ""
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr ""
 
index c5c1e8a..0f75e58 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.25\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
 "Last-Translator: Erick Branderhorst <branderh@debian.org>\n"
 "Language-Team: Dutch <nl@li.org>\n"
@@ -97,12 +97,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d verschuif/reduceer conflicten"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr ""
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr ""
 
index d82e210..4802b14 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.29\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 2001-09-09 13:49+04:00\n"
 "Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
 "Language-Team: Russian <ru@li.org>\n"
@@ -97,12 +97,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'"
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
 
index 52cb97c..2172e06 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.30c\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 2001-11-18 15:17+0100\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.pp.se>\n"
 "Language-Team: Swedish <sv@li.org>\n"
@@ -101,12 +101,12 @@ msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] "förväntade %d skifta/reducerakonflikt"
 msgstr[1] "förväntade %d skifta/reducerakonflikter"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr "kan inte öppna filen \"%s\""
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr "kan inte stänga fil"
 
index 37dd278..55b0e3d 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.28c\n"
-"POT-Creation-Date: 2001-12-29 15:41+0100\n"
+"POT-Creation-Date: 2001-12-30 16:18+0100\n"
 "PO-Revision-Date: 2001-09-10 10:54GMT\n"
 "Last-Translator: Altug Bayram <altugbayram_2000@yahoo.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -99,12 +99,12 @@ msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
 msgstr[0] " %d öteleme/indirgeme çeliþkisi"
 
-#: src/files.c:149
+#: src/files.c:152
 #, c-format
 msgid "cannot open file `%s'"
 msgstr "`%s' dosyasý açýlamadý"
 
-#: src/files.c:168
+#: src/files.c:171
 msgid "cannot close file"
 msgstr "dosya kapatýlamýyor"
 
index 80fc643..7b0e8f0 100644 (file)
 #include "symtab.h"
 #include "conflicts.h"
 #include "muscle_tab.h"
-
+#include "skeleton.h"
 
 static int nvectors;
 static int nentries;
@@ -961,111 +961,12 @@ output_actions (void)
 }
 
 \f
-/*------------------------------------------------------------.
-| Copy the parser code from SKEL_FILENAME into OOUT obstack.  |
-| and do the muscle substitution.                             |
-`------------------------------------------------------------*/
+/*---------------------------.
+| Call the skeleton parser.  |
+`---------------------------*/
 
 static void
-output_parser (const char *skel_filename, FILE *out)
-{
-  int c;
-  FILE *fskel;
-  size_t output_line;
-  size_t skeleton_line;
-
-  fskel = xfopen (skel_filename, "r");
-
-  /* New output code.  */
-  output_line = 1;
-  skeleton_line = 1;
-  c = getc (fskel);
-  while (c != EOF)
-    {
-      if (c != '%')
-       {
-         if (c == '\n')
-           {
-             ++output_line;
-             ++skeleton_line;
-           }
-         putc (c, out);
-         c = getc (fskel);
-       }
-      else if ((c = getc (fskel)) == '%')
-       {
-         /* Read the muscle.  */
-         const char *muscle_key = 0;
-         const char *muscle_value = 0;
-
-         while (isalnum (c = getc (fskel)) || c == '-')
-           obstack_1grow (&muscle_obstack, c);
-         obstack_1grow (&muscle_obstack, 0);
-
-         /* Output the right value, or see if it's something special.  */
-         muscle_key = obstack_finish (&muscle_obstack);
-         muscle_value = muscle_find (muscle_key);
-         if (!strcmp (muscle_key, "actions"))
-           actions_output (out, &output_line);
-         else if (!strcmp (muscle_key, "guards"))
-           guards_output (out, &output_line);
-         else if (!strcmp (muscle_key, "line"))
-           fprintf (out, "%d", output_line);
-         else if (!strcmp (muscle_key, "tokendef"))
-           token_definitions_output (out, &output_line);
-         else if (!strcmp (muscle_key, "skeleton-line"))
-           fprintf (out, "%d", skeleton_line);
-         else if (muscle_value)
-           {
-             fputs (muscle_value, out);
-             output_line += get_lines_number (muscle_value);
-           }
-         else
-           {
-             fputs ("%%", out);
-             fputs (muscle_key, out);
-           }
-       }
-      else
-       putc ('%', out);
-    }
-
-  /* End.  */
-  xfclose (fskel);
-}
-
-/*----------------------------------------.
-| Prepare the master parser to be output  |
-`----------------------------------------*/
-
-static void
-output_master_parser (void)
-{
-  FILE *parser = xfopen (parser_file_name, "w");
-
-  /* FIXME: Remove the two following lines.  */
-  printf ("Test: %s\n", infile);
-  printf ("Test: %s\n", parser_file_name);
-
-  if (!skeleton)
-    {
-      if (semantic_parser)
-       skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY);
-      else
-       skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
-    }
-  muscle_insert ("skeleton", skeleton);
-  muscle_insert ("parser-file-name", parser_file_name);
-
-  output_parser (skeleton, parser);
-  xfclose (parser);
-}
-
-/* Call the skeleton parser.  */
-
-static 
-void
-output_skeleton ()
+output_skeleton (void)
 {
   /* Find the right skeleton file.  */
   if (!skeleton)
@@ -1078,7 +979,7 @@ output_skeleton ()
 
   /* Parse the skeleton file and output the needed parsers.  */
   muscle_insert ("skeleton", skeleton);
-  process_skeleton (infile, skeleton);
+  process_skeleton (skeleton);
 }
 
 static void
@@ -1190,10 +1091,6 @@ output (void)
   /* Process the selected skeleton file.  */
   output_skeleton ();
 
-  /* Output the parser. */
-#if 0
-  output_master_parser ();
-#endif
   /* Output the header if needed. */
   if (defines_flag)
     header_output ();
index 78cc9b8..4e3799c 100644 (file)
@@ -1,5 +1,5 @@
 /* Output the generated parsing program for bison,
-   Copyright 2000 Free Software Foundation, Inc.
+   Copyright 2000, 2001  Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -26,6 +26,12 @@ extern int error_verbose;
 /* Output the parsing tables and the parser code to FTABLE.  */
 void output PARAMS ((void));
 
+size_t get_lines_number PARAMS ((const char *s));
+
+void actions_output PARAMS ((FILE *out, size_t *line));
+void guards_output PARAMS ((FILE *out, size_t *line));
+void token_definitions_output PARAMS ((FILE *out, size_t *line));
+
 extern struct obstack muscle_obstack;
 
 #endif /* !OUTPUT_H_ */
index 9223485..372320d 100644 (file)
@@ -1,14 +1,36 @@
-%{
+                                                             /* -*- C -*- */
+/* Parse Bison Skeletons.
+   Copyright (C) 2001  Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   Bison 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, or (at your option)
+   any later version.
+
+   Bison 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 Bison; see the file COPYING.  If not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
+%debug
+%defines
+%error-verbose
 
+%{
 #include "system.h"
 #include "obstack.h"
 #include "files.h"
-
+#include "output.h"
+#include "skeleton.h"
 #include "muscle_tab.h"
 
-#define YYDEBUG 1
-#define YYERROR_VERBOSE 1
-
 extern FILE* yyin;
 extern int   yylineno;
 
@@ -18,7 +40,8 @@ FILE* parser = NULL;
 size_t output_line;
 size_t skeleton_line;
 
-extern struct obstack muscle_obstack;
+static int merror PARAMS ((const char* error));
+static int yyerror PARAMS ((const char* error));
 
 %}
 
@@ -30,9 +53,9 @@ extern struct obstack muscle_obstack;
   int yacc;
 }
 
-%token< muscle > MUSCLE
-%token< string > STRING
-%token< character > CHARACTER
+%token <muscle> MUSCLE
+%token <string> STRING
+%token <character> CHARACTER
 
 %token LINE
 %token SLINE
@@ -44,7 +67,7 @@ extern struct obstack muscle_obstack;
 %token TOKENS
 %token ACTIONS
 
-%type< yacc > section.yacc
+%type <yacc> section.yacc
 
 %start skeleton
 
@@ -59,9 +82,9 @@ section : section.header section.body { }
 
 section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
 {
-  charname = 0;
-  charlimit = 0;
-  charsuffix = $5;
+  char *name = 0;
+  char *limit = 0;
+  char *suffix = $5;
 
   /* Close the previous parser.  */
   if (parser)
@@ -70,7 +93,7 @@ section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
   /* If the following section should be named with the yacc-style, and it's
      suffix is of the form 'something.h' or 'something.c', then add '.tab' in
      the middle of the suffix.  */
-  if (tab_extension && $7 && (strsuffix (suffix, ".h") || 
+  if (tab_extension && $7 && (strsuffix (suffix, ".h") ||
                              strsuffix (suffix, ".c")))
     {
       size_t prefix_len = strlen (prefix);
@@ -93,7 +116,7 @@ section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
     }
   else
     name = stringappend (prefix, suffix);
-  
+
   /* Prepare the next parser to be output.  */
   parser = xfopen (name, "w");
   MUSCLE_INSERT_STRING ("parser-file-name", name);
@@ -107,7 +130,7 @@ section.yacc : /* Empty.  */ { $$ = 0; }
              | YACC          { $$ = 1; }
 ;
 
-section.body 
+section.body
 : /* Empty.  */ { }
 | section.body '\n' { fputc ('\n', parser); ++output_line; ++skeleton_line; }
 | section.body LINE  { fprintf (parser, "%d", output_line); }
@@ -116,7 +139,7 @@ section.body
 | section.body TOKENS { token_definitions_output (parser, &output_line); }
 | section.body ACTIONS { actions_output (parser, &output_line); }
 | section.body CHARACTER { fputc ($2, parser); }
-| section.body MUSCLE { 
+| section.body MUSCLE {
   const char* value = muscle_find ($2);
   if (value)
     {
@@ -137,26 +160,23 @@ gb : /* Empty.  */ { }
 
 %%
 
-int
+static int
 merror (const char* error)
 {
   printf ("line %d: %%{%s} undeclared.\n", skeleton_line, error);
   return 0;
 }
 
-int
+static int
 yyerror (const char* error)
 {
-  printf ("line %d: %s.\n", yylineno, error);
+  fprintf (stderr, "%s\n", error);
   return 0;
 }
 
-int
-process_skeleton (const char* grammar,
-                 const char* skeleton)
+void
+process_skeleton (const char* skel)
 {
-  const char* limit = 0;
-
   /* Compute prefix.  Actually, it seems that the processing I need here is
      done in compute_base_names, and the result stored in short_base_name.  */
   prefix = short_base_name;
@@ -166,7 +186,7 @@ process_skeleton (const char* grammar,
   skeleton_line = 1;
 
   /* Output.  */
-  yyin = fopen (skeleton, "r");
+  yyin = fopen (skel, "r");
   yydebug = 0;
   yyparse ();
 
index b78e02f..71577d7 100644 (file)
@@ -1,15 +1,41 @@
-%{
+                                                             /* -*- C -*- */
+/* Scan Bison Skeletons.
+   Copyright (C) 2001  Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   Bison 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, or (at your option)
+   any later version.
+
+   Bison 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.
 
-#include <stdlib.h>
-#include <string.h>
+   You should have received a copy of the GNU General Public License
+   along with Bison; see the file COPYING.  If not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
+%{
+
+#include "system.h"
+#include "skeleton.h"
 #include "parse-skel.h"
 
 %}
 
 %option nounput
 %option noyywrap
-%option yylineno
+/* If we enable
+
+   %option yylineno
+
+   Then we have warning: `yy_flex_realloc' defined but not used.
+   Seems like a Flex bug to me: Why the heck yylineno would trigger
+   the REJECT exception???  */
 
 %%
 
diff --git a/src/skeleton.h b/src/skeleton.h
new file mode 100644 (file)
index 0000000..b76ae33
--- /dev/null
@@ -0,0 +1,32 @@
+/* Parse Bison Skeletons.
+   Copyright (C) 2001  Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   Bison 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, or (at your option)
+   any later version.
+
+   Bison 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 Bison; see the file COPYING.  If not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
+#ifndef SKELETON_H_
+# define SKELETON_H_
+
+/* From parse-skel.y.  */
+void process_skeleton PARAMS ((const char* skel));
+
+/* From scan-skel.l. */
+# define YY_DECL \
+  int yylex PARAMS ((void))
+YY_DECL;
+
+#endif SKELETON_H_