* 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
This commit is contained in:
Akim Demaille
2001-12-30 21:05:12 +00:00
parent 9b3add5beb
commit 1239777d4f
15 changed files with 168 additions and 167 deletions

View File

@@ -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> 2001-12-30 Robert Anisko <robert.anisko@epita.fr>
* src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING) * src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.25\n" "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" "PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
"Last-Translator: Ulrich Drepper <drepper@gnu.ai.mit.edu>\n" "Last-Translator: Ulrich Drepper <drepper@gnu.ai.mit.edu>\n"
"Language-Team: German <de@li.org>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d Schiebe/Reduziere Konflikte" msgstr[0] " %d Schiebe/Reduziere Konflikte"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "" msgstr ""
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "" msgstr ""

View File

@@ -30,7 +30,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GNU bison 1.25\n" "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" "PO-Revision-Date: 1998-09-21 10:19+0200\n"
"Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n" "Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
"Language-Team: Spanish <es@li.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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d conflictos desplazamiento/reducción" msgstr[0] " %d conflictos desplazamiento/reducción"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "" msgstr ""
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "" msgstr ""

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.28d\n" "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" "PO-Revision-Date: 2001-08-29 17:06+02:00\n"
"Last-Translator: Toomas Soome <tsoome@ut.ee>\n" "Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
"Language-Team: Estonian <et@li.org>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d nihutamine/redutseerimine konflikti" msgstr[0] " %d nihutamine/redutseerimine konflikti"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "faili `%s' ei saa avada" msgstr "faili `%s' ei saa avada"
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "faili ei õnnestu sulgeda" msgstr "faili ei õnnestu sulgeda"

View File

@@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GNU bison 1.28d\n" "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" "PO-Revision-Date: 2001-08-29 20:00-0500\n"
"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n" "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
"Language-Team: French <traduc@traduc.org>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d conflits décalage/réduction" msgstr[0] " %d conflits décalage/réduction"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "ne peut ouvrir le fichier `%s'" msgstr "ne peut ouvrir le fichier `%s'"
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "ne peut fermer le fichier" msgstr "ne peut fermer le fichier"

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GNU bison 1.28\n" "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" "PO-Revision-Date: 1999-09-28 21:10+0900\n"
"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n" "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
"Language-Team: Japanese <ja@li.org>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d シフト/還元衝突" msgstr[0] " %d シフト/還元衝突"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "" msgstr ""
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "" msgstr ""

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.25\n" "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" "PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
"Last-Translator: Erick Branderhorst <branderh@debian.org>\n" "Last-Translator: Erick Branderhorst <branderh@debian.org>\n"
"Language-Team: Dutch <nl@li.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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d verschuif/reduceer conflicten" msgstr[0] " %d verschuif/reduceer conflicten"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "" msgstr ""
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "" msgstr ""

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.29\n" "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" "PO-Revision-Date: 2001-09-09 13:49+04:00\n"
"Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n" "Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
"Language-Team: Russian <ru@li.org>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ" msgstr[0] " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'" msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'"
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ" msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"

View File

@@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.30c\n" "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" "PO-Revision-Date: 2001-11-18 15:17+0100\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.pp.se>\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.pp.se>\n"
"Language-Team: Swedish <sv@li.org>\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[0] "förväntade %d skifta/reducerakonflikt"
msgstr[1] "förväntade %d skifta/reducerakonflikter" msgstr[1] "förväntade %d skifta/reducerakonflikter"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "kan inte öppna filen \"%s\"" msgstr "kan inte öppna filen \"%s\""
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "kan inte stänga fil" msgstr "kan inte stänga fil"

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: bison 1.28c\n" "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" "PO-Revision-Date: 2001-09-10 10:54GMT\n"
"Last-Translator: Altug Bayram <altugbayram_2000@yahoo.com>\n" "Last-Translator: Altug Bayram <altugbayram_2000@yahoo.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\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" msgid_plural "expected %d shift/reduce conflicts\n"
msgstr[0] " %d öteleme/indirgeme çeliþkisi" msgstr[0] " %d öteleme/indirgeme çeliþkisi"
#: src/files.c:149 #: src/files.c:152
#, c-format #, c-format
msgid "cannot open file `%s'" msgid "cannot open file `%s'"
msgstr "`%s' dosyasý açýlamadý" msgstr "`%s' dosyasý açýlamadý"
#: src/files.c:168 #: src/files.c:171
msgid "cannot close file" msgid "cannot close file"
msgstr "dosya kapatýlamýyor" msgstr "dosya kapatýlamýyor"

View File

@@ -101,7 +101,7 @@
#include "symtab.h" #include "symtab.h"
#include "conflicts.h" #include "conflicts.h"
#include "muscle_tab.h" #include "muscle_tab.h"
#include "skeleton.h"
static int nvectors; static int nvectors;
static int nentries; static int nentries;
@@ -961,111 +961,12 @@ output_actions (void)
} }
/*------------------------------------------------------------. /*---------------------------.
| Copy the parser code from SKEL_FILENAME into OOUT obstack. | | Call the skeleton parser. |
| and do the muscle substitution. | `---------------------------*/
`------------------------------------------------------------*/
static void static void
output_parser (const char *skel_filename, FILE *out) output_skeleton (void)
{
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 ()
{ {
/* Find the right skeleton file. */ /* Find the right skeleton file. */
if (!skeleton) if (!skeleton)
@@ -1078,7 +979,7 @@ output_skeleton ()
/* Parse the skeleton file and output the needed parsers. */ /* Parse the skeleton file and output the needed parsers. */
muscle_insert ("skeleton", skeleton); muscle_insert ("skeleton", skeleton);
process_skeleton (infile, skeleton); process_skeleton (skeleton);
} }
static void static void
@@ -1190,10 +1091,6 @@ output (void)
/* Process the selected skeleton file. */ /* Process the selected skeleton file. */
output_skeleton (); output_skeleton ();
/* Output the parser. */
#if 0
output_master_parser ();
#endif
/* Output the header if needed. */ /* Output the header if needed. */
if (defines_flag) if (defines_flag)
header_output (); header_output ();

View File

@@ -1,5 +1,5 @@
/* Output the generated parsing program for bison, /* 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. 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. */ /* Output the parsing tables and the parser code to FTABLE. */
void output PARAMS ((void)); 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; extern struct obstack muscle_obstack;
#endif /* !OUTPUT_H_ */ #endif /* !OUTPUT_H_ */

View 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 "system.h"
#include "obstack.h" #include "obstack.h"
#include "files.h" #include "files.h"
#include "output.h"
#include "skeleton.h"
#include "muscle_tab.h" #include "muscle_tab.h"
#define YYDEBUG 1
#define YYERROR_VERBOSE 1
extern FILE* yyin; extern FILE* yyin;
extern int yylineno; extern int yylineno;
@@ -18,7 +40,8 @@ FILE* parser = NULL;
size_t output_line; size_t output_line;
size_t skeleton_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; int yacc;
} }
%token< muscle > MUSCLE %token <muscle> MUSCLE
%token< string > STRING %token <string> STRING
%token< character > CHARACTER %token <character> CHARACTER
%token LINE %token LINE
%token SLINE %token SLINE
@@ -44,7 +67,7 @@ extern struct obstack muscle_obstack;
%token TOKENS %token TOKENS
%token ACTIONS %token ACTIONS
%type< yacc > section.yacc %type <yacc> section.yacc
%start skeleton %start skeleton
@@ -59,9 +82,9 @@ section : section.header section.body { }
section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n' section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
{ {
char* name = 0; char *name = 0;
char* limit = 0; char *limit = 0;
char* suffix = $5; char *suffix = $5;
/* Close the previous parser. */ /* Close the previous parser. */
if (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 /* 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 suffix is of the form 'something.h' or 'something.c', then add '.tab' in
the middle of the suffix. */ the middle of the suffix. */
if (tab_extension && $7 && (strsuffix (suffix, ".h") || if (tab_extension && $7 && (strsuffix (suffix, ".h") ||
strsuffix (suffix, ".c"))) strsuffix (suffix, ".c")))
{ {
size_t prefix_len = strlen (prefix); size_t prefix_len = strlen (prefix);
@@ -93,7 +116,7 @@ section.header : SECTION gb MUSCLE gb STRING gb section.yacc gb '\n'
} }
else else
name = stringappend (prefix, suffix); name = stringappend (prefix, suffix);
/* Prepare the next parser to be output. */ /* Prepare the next parser to be output. */
parser = xfopen (name, "w"); parser = xfopen (name, "w");
MUSCLE_INSERT_STRING ("parser-file-name", name); MUSCLE_INSERT_STRING ("parser-file-name", name);
@@ -107,7 +130,7 @@ section.yacc : /* Empty. */ { $$ = 0; }
| YACC { $$ = 1; } | YACC { $$ = 1; }
; ;
section.body section.body
: /* Empty. */ { } : /* Empty. */ { }
| section.body '\n' { fputc ('\n', parser); ++output_line; ++skeleton_line; } | section.body '\n' { fputc ('\n', parser); ++output_line; ++skeleton_line; }
| section.body LINE { fprintf (parser, "%d", output_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 TOKENS { token_definitions_output (parser, &output_line); }
| section.body ACTIONS { actions_output (parser, &output_line); } | section.body ACTIONS { actions_output (parser, &output_line); }
| section.body CHARACTER { fputc ($2, parser); } | section.body CHARACTER { fputc ($2, parser); }
| section.body MUSCLE { | section.body MUSCLE {
const char* value = muscle_find ($2); const char* value = muscle_find ($2);
if (value) if (value)
{ {
@@ -137,26 +160,23 @@ gb : /* Empty. */ { }
%% %%
int static int
merror (const char* error) merror (const char* error)
{ {
printf ("line %d: %%{%s} undeclared.\n", skeleton_line, error); printf ("line %d: %%{%s} undeclared.\n", skeleton_line, error);
return 0; return 0;
} }
int static int
yyerror (const char* error) yyerror (const char* error)
{ {
printf ("line %d: %s.\n", yylineno, error); fprintf (stderr, "%s\n", error);
return 0; return 0;
} }
int void
process_skeleton (const char* grammar, process_skeleton (const char* skel)
const char* skeleton)
{ {
const char* limit = 0;
/* Compute prefix. Actually, it seems that the processing I need here is /* 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. */ done in compute_base_names, and the result stored in short_base_name. */
prefix = short_base_name; prefix = short_base_name;
@@ -166,7 +186,7 @@ process_skeleton (const char* grammar,
skeleton_line = 1; skeleton_line = 1;
/* Output. */ /* Output. */
yyin = fopen (skeleton, "r"); yyin = fopen (skel, "r");
yydebug = 0; yydebug = 0;
yyparse (); yyparse ();

View 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.
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 <stdlib.h> #include "system.h"
#include <string.h> #include "skeleton.h"
#include "parse-skel.h" #include "parse-skel.h"
%} %}
%option nounput %option nounput
%option noyywrap %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??? */
%% %%

32
src/skeleton.h Normal file
View File

@@ -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_