From 1239777d4f4f96a23e5cd177121f16f0d9e71c68 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 30 Dec 2001 21:05:12 +0000 Subject: [PATCH] * 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 --- ChangeLog | 20 +++++++++ po/de.po | 6 +-- po/es.po | 6 +-- po/et.po | 6 +-- po/fr.po | 6 +-- po/ja.po | 6 +-- po/nl.po | 6 +-- po/ru.po | 6 +-- po/sv.po | 6 +-- po/tr.po | 6 +-- src/output.c | 115 +++-------------------------------------------- src/output.h | 8 +++- src/parse-skel.y | 72 ++++++++++++++++++----------- src/scan-skel.l | 34 ++++++++++++-- src/skeleton.h | 32 +++++++++++++ 15 files changed, 168 insertions(+), 167 deletions(-) create mode 100644 src/skeleton.h diff --git a/ChangeLog b/ChangeLog index 1c5ca441..57c91724 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2001-12-30 Akim Demaille + + * 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 * src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING) diff --git a/po/de.po b/po/de.po index cdb36a2e..6978c89b 100644 --- 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 \n" "Language-Team: German \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 "" diff --git a/po/es.po b/po/es.po index 82e8308d..1cb2460c 100644 --- 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 \n" "Language-Team: Spanish \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 "" diff --git a/po/et.po b/po/et.po index 5936016c..7caee144 100644 --- 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 \n" "Language-Team: Estonian \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" diff --git a/po/fr.po b/po/fr.po index c604c58d..c671ef52 100644 --- 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 \n" "Language-Team: French \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" diff --git a/po/ja.po b/po/ja.po index 15625234..6fa52b65 100644 --- 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 \n" "Language-Team: Japanese \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 "" diff --git a/po/nl.po b/po/nl.po index c5c1e8af..0f75e587 100644 --- 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 \n" "Language-Team: Dutch \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 "" diff --git a/po/ru.po b/po/ru.po index d82e2109..4802b142 100644 --- 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 \n" "Language-Team: Russian \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 "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ" diff --git a/po/sv.po b/po/sv.po index 52cb97c0..2172e06b 100644 --- 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 \n" "Language-Team: Swedish \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" diff --git a/po/tr.po b/po/tr.po index 37dd278b..55b0e3d2 100644 --- 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 \n" "Language-Team: Turkish \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" diff --git a/src/output.c b/src/output.c index 80fc643b..7b0e8f0c 100644 --- a/src/output.c +++ b/src/output.c @@ -101,7 +101,7 @@ #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) } -/*------------------------------------------------------------. -| 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 (); diff --git a/src/output.h b/src/output.h index 78cc9b84..4e3799c6 100644 --- a/src/output.h +++ b/src/output.h @@ -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_ */ diff --git a/src/parse-skel.y b/src/parse-skel.y index 9223485e..372320de 100644 --- a/src/parse-skel.y +++ b/src/parse-skel.y @@ -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 +%token STRING +%token CHARACTER %token LINE %token SLINE @@ -44,7 +67,7 @@ extern struct obstack muscle_obstack; %token TOKENS %token ACTIONS -%type< yacc > section.yacc +%type 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' { - char* name = 0; - char* limit = 0; - char* suffix = $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 (); diff --git a/src/scan-skel.l b/src/scan-skel.l index b78e02f5..71577d7e 100644 --- a/src/scan-skel.l +++ b/src/scan-skel.l @@ -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 -#include + 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 index 00000000..b76ae333 --- /dev/null +++ b/src/skeleton.h @@ -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_ -- 2.45.2