bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02-fyi-parse-section.patch


From: Akim Demaille
Subject: 02-fyi-parse-section.patch
Date: Wed, 09 Jan 2002 14:03:49 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        
        * 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.
        
Index: src/bison.hairy
--- src/bison.hairy Sun, 30 Dec 2001 18:57:29 +0100 akim
+++ src/bison.hairy Wed, 09 Jan 2002 12:27:13 +0100 akim
@@ -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: src/bison.simple
--- src/bison.simple Sat, 05 Jan 2002 14:26:46 +0100 akim
+++ src/bison.simple Wed, 09 Jan 2002 12:30:12 +0100 akim
@@ -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: src/files.c
--- src/files.c Tue, 08 Jan 2002 23:21:49 +0100 akim
+++ src/files.c Wed, 09 Jan 2002 09:15:16 +0100 akim
@@ -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 *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;
 
 
 /*--------------------------.
@@ -347,14 +351,16 @@
       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 @@
        }
 
       /* 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: src/files.h
--- src/files.h Sun, 30 Dec 2001 18:57:29 +0100 akim
+++ src/files.h Wed, 09 Jan 2002 09:14:21 +0100 akim
@@ -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 @@
    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: src/output.c
--- src/output.c Sun, 30 Dec 2001 21:07:37 +0100 akim
+++ src/output.c Wed, 09 Jan 2002 09:41:42 +0100 akim
@@ -995,6 +995,11 @@
   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: src/parse-skel.y
--- src/parse-skel.y Sat, 05 Jan 2002 14:26:46 +0100 akim
+++ src/parse-skel.y Wed, 09 Jan 2002 12:24:10 +0100 akim
@@ -43,7 +43,6 @@
    typed access to it.  */
 #define yycontrol ((skel_control_t *) skel_control)
 
-char* prefix = NULL;
 FILE* parser = NULL;
 
 size_t output_line;
@@ -86,14 +85,13 @@
 %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
 
@@ -109,43 +107,14 @@ input:
 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);
@@ -155,9 +124,20 @@ input:
 }
 ;
 
-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.  */ { }
@@ -209,10 +189,6 @@ input:
     case CHARACTER:
       fprintf (file, " = '%c'", value->character);
       break;
-
-    case YACC:
-      fprintf (file, " = %s", value->boolean ? "true" : "false");
-      break;
     }
 }
 
@@ -237,10 +213,6 @@ input:
 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: src/scan-skel.l
--- src/scan-skel.l Mon, 31 Dec 2001 11:36:31 +0100 akim
+++ src/scan-skel.l Wed, 09 Jan 2002 09:25:32 +0100 akim
@@ -50,7 +50,6 @@
 "%%{line}"          { return LINE; }
 "%%{skeleton-line}" { return SLINE; }
 
-"%%{yacc}"    { return YACC; }
 "%%{section}" { return SECTION; }
 
 "%%{guards}"   { return GUARDS; }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]