]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
(symbol_number): Renamed from symbol_number_t.
[bison.git] / src / scan-skel.l
index 114407fc06764fc30b7d663fc8106c55e9355d41..80849d37aa609dbb59931f37c53e48dd6657e658 100644 (file)
@@ -1,5 +1,6 @@
 /* Scan Bison Skeletons.                                       -*- C -*-
 /* Scan Bison Skeletons.                                       -*- C -*-
-   Copyright (C) 2001, 2002  Free Software Foundation, Inc.
+
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    02111-1307, USA.  */
 
    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    02111-1307, USA.  */
 
-%option nodefault noyywrap nounput never-interactive
+%option nodefault noyywrap nounput never-interactive debug
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
 #include "system.h"
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
 #include "system.h"
-#include "error.h"
+
+#include <error.h>
+#include <quotearg.h>
+
 #include "getargs.h"
 #include "files.h"
 #include "getargs.h"
 #include "files.h"
-int skel_lex PARAMS ((void));
-static int yylineno = 1;
-static char *yyoutname = NULL;
+
+int skel_lex (void);
+
+#define QPUTS(String) \
+   fputs (quotearg_style (c_quoting_style, (String)), yyout);
+
 %}
 %}
-%%
-  /* This is an approximation, but we don't need more. */
-^"#output \""[^\"]+\"\n        {
-     yytext[yyleng - 2] = '\0';
-     XFREE (yyoutname);
-     yyoutname = xstrdup (yytext + strlen ("#output \""));
-     yyout = xfopen (yyoutname, "w");
-     yylineno = 1;
-   }
-
-"@<:@"           fputc ('[', yyout);
-"@:>@"           fputc (']', yyout);
-
-"__oline__"      fprintf (yyout, "%d", yylineno+1);
-"__ofile__"      fprintf (yyout, "%s", yyoutname);
-[^@_\n]+         ECHO;
-\n+              yylineno += yyleng; ECHO;
-.                ECHO;
-
-<<EOF>>          xfclose (yyout); free (yyoutname); return EOF;
 %%
 
 %%
 
-/* From lib/readpipe.c.  */
-FILE *readpipe PARAMS ((const char *, ...));
+%{
+  int lineno IF_LINT (= 0);
+  char *outname = NULL;
+%}
 
 
-/*----------------------.
-| Run our backend, M4.  |
-`----------------------*/
+"@output ".*\n {
+  char const *filename = yytext + sizeof "@output " - 1;
+  yytext[yyleng - 1] = '\0';
 
 
-void m4_invoke PARAMS ((const char *definitions));
+  if (*filename == '@')
+    {
+      if (strcmp (filename, "@output_header_name@") == 0)
+       filename = spec_defines_file;
+      else if (strcmp (filename, "@output_parser_name@") == 0)
+       filename = parser_file_name;
+      else
+       abort ();
+    }
+
+  XFREE (outname);
+  outname = xstrdup (filename);
+  yyout = xfopen (outname, "w");
+  lineno = 1;
+}
+
+"@@"      fputc ('@', yyout);
+"@{"      fputc ('[', yyout);
+"@}"      fputc (']', yyout);
+
+"@oline@"  fprintf (yyout, "%d", lineno);
+"@ofile@"  QPUTS (outname);
+"@output_parser_name@" QPUTS (parser_file_name);
+"@output_header_name@"  QPUTS (spec_defines_file);
+
+"@"       abort ();
+\n        lineno++; ECHO;
+[^@\n]+           ECHO;
+
+<<EOF>>           xfclose (yyout); free (outname); return EOF;
+%%
+
+/*------------------------.
+| Scan a Bison skeleton.  |
+`------------------------*/
+
+void scan_skel (FILE *);
 
 void
 
 void
-m4_invoke (const char *definitions)
+scan_skel (FILE *in)
 {
 {
-  /* Invoke m4 on the definition of the muscles, and the skeleton. */
-  const char *bison_pkgdatadir = getenv ("BISON_PKGDATADIR");
-  const char *m4 = getenv ("M4");
-  int pkg_data_len;
-  char *full_skeleton;
-
-  if (!m4)
-    m4 = M4;
-  if (!bison_pkgdatadir)
-    bison_pkgdatadir = PKGDATADIR;
-  pkg_data_len = strlen (bison_pkgdatadir);
-  full_skeleton = XMALLOC (char, pkg_data_len + strlen (skeleton) + 2);
-  if (bison_pkgdatadir[pkg_data_len-1] == '/')
-    sprintf (full_skeleton, "%s%s", bison_pkgdatadir, skeleton);
-  else
-    sprintf (full_skeleton, "%s/%s", bison_pkgdatadir, skeleton);
-  if (trace_flag & trace_tools)
-    fprintf (stderr,
-            "running: %s -I %s m4sugar/m4sugar.m4 %s %s\n",
-            m4, bison_pkgdatadir, definitions, full_skeleton);
-  skel_in = readpipe (m4,
-                     "-I", bison_pkgdatadir,
-                     "m4sugar/m4sugar.m4",
-                     definitions,
-                     full_skeleton,
-                     NULL);
-  XFREE (full_skeleton);
-  if (!skel_in)
-    error (EXIT_FAILURE, errno, "cannot run m4");
+  skel_in = in;
+  skel__flex_debug = trace_flag & trace_skeleton;
   skel_lex ();
   skel_lex ();
-
   /* Reclaim Flex's buffers.  */
   yy_delete_buffer (YY_CURRENT_BUFFER);
 }
   /* Reclaim Flex's buffers.  */
   yy_delete_buffer (YY_CURRENT_BUFFER);
 }