+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)
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"
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 ""
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"
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 ""
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"
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"
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"
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"
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"
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 ""
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"
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 ""
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"
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 "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
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"
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"
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"
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"
#include "symtab.h"
#include "conflicts.h"
#include "muscle_tab.h"
-
+#include "skeleton.h"
static int nvectors;
static int nentries;
}
\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)
/* Parse the skeleton file and output the needed parsers. */
muscle_insert ("skeleton", skeleton);
- process_skeleton (infile, skeleton);
+ process_skeleton (skeleton);
}
static 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 ();
/* 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.
/* 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_ */
-%{
+ /* -*- 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;
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));
%}
int yacc;
}
-%token< muscle > MUSCLE
-%token< string > STRING
-%token< character > CHARACTER
+%token <muscle> MUSCLE
+%token <string> STRING
+%token <character> CHARACTER
%token LINE
%token SLINE
%token TOKENS
%token ACTIONS
-%type< yacc > section.yacc
+%type <yacc> section.yacc
%start skeleton
section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
{
- char* name = 0;
- char* limit = 0;
- char* suffix = $5;
+ char *name = 0;
+ char *limit = 0;
+ char *suffix = $5;
/* Close the previous parser. */
if (parser)
/* 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);
}
else
name = stringappend (prefix, suffix);
-
+
/* Prepare the next parser to be output. */
parser = xfopen (name, "w");
MUSCLE_INSERT_STRING ("parser-file-name", name);
| 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); }
| 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)
{
%%
-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;
skeleton_line = 1;
/* Output. */
- yyin = fopen (skeleton, "r");
+ yyin = fopen (skel, "r");
yydebug = 0;
yyparse ();
-%{
+ /* -*- 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??? */
%%
--- /dev/null
+/* 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_