]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
Add src/system.h; this isn't really needed, but it keeps "make update"
[bison.git] / src / scan-skel.l
index 0bb71d196f33fcbbdfc56495244ebe83ed975835..0d7114a7b7f26434dea9f4b5b8c5b34a3c89d61b 100644 (file)
@@ -1,6 +1,5 @@
-                                                             /* -*- C -*- */
-/* Scan Bison Skeletons.
-   Copyright (C) 2001  Free Software Foundation, Inc.
+/* Scan Bison Skeletons.                                       -*- C -*-
+   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 prefix="skel_" outfile="lex.yy.c"
+
 %{
 #include "system.h"
 %{
 #include "system.h"
-#include "skeleton.h"
-#include "parse-skel.h"
-%}
+#include "quotearg.h"
+#include "error.h"
+#include "getargs.h"
+#include "files.h"
 
 
-%option nounput
-%option noyywrap
-/* If we enable
+int skel_lex (void);
 
 
-   %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???  */
+%{
+  int lineno IF_LINT (= 0);
+  char *outname = NULL;
+%}
 
 
-%%
+"@output ".*\n {
+  char const *filename = yytext + sizeof "@output " - 1;
+  yytext[yyleng - 1] = '\0';
+
+  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;
+}
 
 
-"%%{line}"          { return LINE; }
-"%%{skeleton-line}" { return SLINE; }
+"@@"      fputc ('@', yyout);
+"@{"      fputc ('[', yyout);
+"@}"      fputc (']', yyout);
 
 
-"%%{yacc}"    { return YACC; }
-"%%{section}" { return SECTION; }
+"@oline@"  fprintf (yyout, "%d", lineno);
+"@ofile@"  fputs (quotearg_style (c_quoting_style, outname), yyout);
 
 
-"%%{guards}"   { return GUARDS; }
-"%%{actions}"  { return ACTIONS; }
-"%%{tokendef}" { return TOKENS; }
+"@"       abort ();
+\n        lineno++; ECHO;
+.         ECHO;
 
 
-  /* Muscle.  */
-"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
-  yylval.muscle = xstrndup (yytext + 3, yyleng - 4);
-  return MUSCLE;
-}
+<<EOF>>           xfclose (yyout); free (outname); return EOF;
+%%
 
 
-  /* String.  */
-"%%\"".*"\"" {
-  yylval.string = xstrndup (yytext + 3, yyleng - 4);
-  return STRING;
-}
+/*------------------------.
+| Scan a Bison skeleton.  |
+`------------------------*/
 
 
-  /* End of line.  */
-"\n" {
-  return '\n';
-}
+void scan_skel (FILE *);
 
 
-  /* Plain Character.  */
-. {
-  yylval.character = *yytext;
-  return CHARACTER;
-}
+void
+scan_skel (FILE *in)
+{
+  skel_in = in;
+  skel_lex ();
 
 
-%%
+  /* Reclaim Flex's buffers.  */
+  yy_delete_buffer (YY_CURRENT_BUFFER);
+}