]> git.saurik.com Git - bison.git/commitdiff
* src/files.c, src/files.h (output_infix): New.
authorAkim Demaille <akim@epita.fr>
Wed, 9 Jan 2002 13:03:45 +0000 (13:03 +0000)
committerAkim Demaille <akim@epita.fr>
Wed, 9 Jan 2002 13:03:45 +0000 (13:03 +0000)
(tab_extension): Remove.
(compute_base_names): Compute the former, drop the latter.
* src/output.c (prepare): Insert the muscles `output-infix', and
`output-suffix'.
* src/parse-skel.y (string, string.1): New.
(section.header): Use it.
(section.yacc): Remove.
(prefix): Remove too.
* src/scan-skel.l: Adjust.
* src/bison.simple, src/bison.hairy: Adjust.

ChangeLog
src/bison.hairy
src/bison.simple
src/files.c
src/files.h
src/output.c
src/parse-skel.y
src/scan-skel.l

index 1de0a987ab9549e76ad992f7d838a23117246702..a10fd0bd85e63f654a3bc4eee94aeec2c4c9c460 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2002-01-09  Akim Demaille  <akim@epita.fr>
+
+       * src/files.c, src/files.h (output_infix): New.
+       (tab_extension): Remove.
+       (compute_base_names): Compute the former, drop the latter.
+       * src/output.c (prepare): Insert the muscles `output-infix', and
+       `output-suffix'.
+       * src/parse-skel.y (string, string.1): New.
+       (section.header): Use it.
+       (section.yacc): Remove.
+       (prefix): Remove too.
+       * src/scan-skel.l: Adjust.
+       * src/bison.simple, src/bison.hairy: Adjust.
+
 2002-01-09  Akim Demaille  <akim@epita.fr>
 
        * configure.in (WERROR_CFLAGS): Compute it.
index 5371ea6f0bfcfa13011238e1213ccb22e51570ff..1034eae78721db678b475352a6d06eb28de4c055 100644 (file)
@@ -1,4 +1,4 @@
-%%{section} %%{body} %%".c" %%{yacc}
+%%{section} %%{output-prefix} %%{output-infix} %%".c"
                                                          /* -*- C -*- */
 
 /* YYERROR and YYCOST are set by guards. If yyerror is set to a
index 207395fcc7854ba7b1c115b52019fe787f30099b..59ff145bce68de4617e45c9c23abddb70dfff4e8 100644 (file)
@@ -1,11 +1,11 @@
-%%{section} %%{body} %%".c" %%{yacc}
+%%{section} %%{output-prefix} %%{output-infix} %%".c"
 /* -*- C -*- */
 
 /* A Bison parser, made from %%{filename}
    by GNU bison %%{version}.  */
 
 /* Skeleton output parser for bison,
-   Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
+   Copyright 1984, 1989, 1990, 2000, 2001, 2002 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
index 5240c4102f378fe5364aa3e9cb27c67f18c52fb1..11de06e7510a4b64aac10b6886ad375a5115f345 100644 (file)
@@ -1,5 +1,6 @@
 /* Open and close files for bison,
-   Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -54,15 +55,18 @@ char *infile = NULL;
 char *attrsfile = NULL;
 
 static char *full_base_name = NULL;
+
+/* Prefix used to generate output file names.  */
 char *short_base_name = NULL;
 
+/* Infix used to generate output file names (i.e., `.tab', or `_tab',
+   or `').  */
+char *output_infix = NULL;
+
 /* C source file extension (the parser source).  */
 const char *src_extension = NULL;
 /* Header file extension (if option ``-d'' is specified).  */
 const char *header_extension = NULL;
-
-/* Should we insert '.tab' in yacc-compatible parsers?  */
-int tab_extension = 0;
 \f
 
 /*--------------------------.
@@ -347,14 +351,16 @@ compute_base_names (void)
       full_base_name =
        xstrndup (spec_outfile,
                  (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
+
       /* The short base name goes up to TAB, excluding it.  */
       short_base_name =
        xstrndup (spec_outfile,
                  (strlen (spec_outfile)
                   - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
 
-      /* Do we have a tab part? */
-      tab_extension = !!tab;
+      if (tab)
+       output_infix = xstrndup (tab,
+                                (strlen (tab) - (ext ? strlen (ext) : 0)));
 
       if (ext)
        compute_exts_from_src (ext);
@@ -388,7 +394,8 @@ compute_base_names (void)
        }
 
       /* In these cases, always append `.tab'. */
-      tab_extension = 1;
+      output_infix = xstrdup (EXT_TAB);
+
       full_base_name = XMALLOC (char,
                                strlen (short_base_name)
                                + strlen (EXT_TAB) + 1);
index 604216c57830e9557547c593b2fe90d9e1b6ac31..6d8f640f703717fdf461e5e370b1cc19096727f9 100644 (file)
@@ -1,5 +1,5 @@
 /* File names and variables for bison,
-   Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
+   Copyright 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -76,10 +76,11 @@ int strsuffix (const char* string, const char* suffix);
    STRING1, and STRING2.  */
 char* stringappend (const char* string1, const char* string2);
 
-/* Should we insert '.tab' in yacc-compatible parsers?  */
-extern int tab_extension;
+/* Prefix used to generate output file names.  */
+extern char *short_base_name;
 
-/* Prefix used to generate output files names.  */
-extern char* short_base_name;
+/* Infix used to generate output file names (i.e., `.tab', or `_tab',
+   or `').  */
+extern char *output_infix;
 
 #endif /* !FILES_H_ */
index 7b0e8f0c6ec7ce0a2aa206e57017a472adbfa58a..d5eba98856d7f86899e537ac7e10f4a2c884f2cc 100644 (file)
@@ -995,6 +995,11 @@ prepare (void)
   MUSCLE_INSERT_INT ("error-verbose", error_verbose);
   MUSCLE_INSERT_STRING ("prefix", spec_name_prefix ? spec_name_prefix : "yy");
 
+  /* FIXME: This is wrong: the muscles should decide whether they hold
+     a copy or not, but the situation is too obscure currently.  */
+  MUSCLE_INSERT_STRING ("output-infix", output_infix ? output_infix : "");
+  MUSCLE_INSERT_STRING ("output-prefix", short_base_name);
+
   MUSCLE_INSERT_INT ("nnts", nvars);
   MUSCLE_INSERT_INT ("nrules", nrules);
   MUSCLE_INSERT_INT ("nstates", nstates);
index 34445f3f1472e6d552bc633ab65bcf7298351a27..ccb5e43fd123349abf4b661c4e73332b405d40bd 100644 (file)
@@ -44,7 +44,6 @@
    typed access to it.  */
 #define yycontrol ((skel_control_t *) skel_control)
 
-char* prefix = NULL;
 FILE* parser = NULL;
 
 size_t output_line;
@@ -87,14 +86,13 @@ static void yyprint (FILE *file, const yyltype *loc,
 %token LINE
 %token SLINE
 
-%token YACC
 %token SECTION
 
 %token GUARDS
 %token TOKENS
 %token ACTIONS
 
-%type <boolean> section.yacc
+%type <string> string.1 string
 
 %start input
 
@@ -110,43 +108,14 @@ skeleton : /* Empty.  */    { }
 section : section.header section.body { }
 ;
 
-section.header : SECTION BLANKS MUSCLE BLANKS STRING BLANKS section.yacc '\n'
+section.header : SECTION BLANKS string '\n'
 {
-  char *name = 0;
-  char *limit = 0;
-  char *suffix = $5;
+  char *name = $3;
 
   /* Close the previous parser.  */
   if (parser)
     parser = (xfclose (parser), NULL);
 
-  /* 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") ||
-                             strsuffix (suffix, ".c")))
-    {
-      size_t prefix_len = strlen (prefix);
-      size_t suffix_len = strlen (suffix);
-
-      /* Allocate enough space to insert '.tab'.  */
-      name = XMALLOC (char, prefix_len + suffix_len + 5);
-      limit = strrchr (suffix, '.');
-      if (!limit)
-       limit = suffix;
-
-      /* Prefix is 'X', suffix is 'Y.Z'.  Name will be 'XY.tab.Z'.  */
-      {
-       char* cp = 0;
-       cp = stpcpy (name, prefix);
-       cp = stpncpy (cp, suffix, limit - suffix);
-       cp = stpcpy (cp, ".tab");
-       cp = stpcpy (cp, limit);
-      }
-    }
-  else
-    name = stringappend (prefix, suffix);
-
   /* Prepare the next parser to be output.  */
   parser = xfopen (name, "w");
   MUSCLE_INSERT_STRING ("parser-file-name", name);
@@ -156,9 +125,20 @@ section.header : SECTION BLANKS MUSCLE BLANKS STRING BLANKS section.yacc '\n'
 }
 ;
 
-section.yacc : /* Empty.  */ { $$ = 0; }
-             | YACC          { $$ = 1; }
-;
+/* Either a literal string, or a muscle value.  */
+string.1:
+    STRING { $$ = $1; }
+  | MUSCLE { $$ = xstrdup (muscle_find ($1)); }
+  ;
+
+/* Either a literal string, or a muscle value, or the concatenation of
+   them.  */
+string:
+    string.1
+    { $$ = $1; }
+  | string BLANKS string.1
+    { $$ = stringappend ($1, $3); free ($1); free ($3); }
+  ;
 
 section.body
 : /* Empty.  */ { }
@@ -210,10 +190,6 @@ yyprint (FILE *file,
     case CHARACTER:
       fprintf (file, " = '%c'", value->character);
       break;
-
-    case YACC:
-      fprintf (file, " = %s", value->boolean ? "true" : "false");
-      break;
     }
 }
 
@@ -238,10 +214,6 @@ skel_error (skel_control_t *control,
 void
 process_skeleton (const char* skel)
 {
-  /* 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;
-
   /* Prepare a few things.  */
   output_line = 1;
   skeleton_line = 1;
index b04968c4aded481406780d91cd3970aa94a1d51b..924f4ab922a324f3aa1ac0b6fe821a982cec6188 100644 (file)
@@ -50,7 +50,6 @@
 "%%{line}"          { return LINE; }
 "%%{skeleton-line}" { return SLINE; }
 
-"%%{yacc}"    { return YACC; }
 "%%{section}" { return SECTION; }
 
 "%%{guards}"   { return GUARDS; }