]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
* data/c.m4 (b4_c_modern): New macro, with a new provision for _MSC_VER.
[bison.git] / src / scan-skel.l
index fc88b4a1da19ca4880848d15752dd1f1fabdfe47..b14fb40c1f5e467de957a116e2cbe89e6267c35c 100644 (file)
@@ -1,6 +1,6 @@
-                                                             /* -*- C -*- */
-/* Scan Bison Skeletons.
-   Copyright (C) 2001  Free Software Foundation, Inc.
+/* Scan Bison Skeletons.                                       -*- C -*-
+
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    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
 
    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 "system.h"
-#include "skeleton.h"
-#include "parse-skel.h"
-%}
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 
-%option nounput
-%option noyywrap
-/* If we enable
+%option nodefault noyywrap nounput never-interactive debug
+%option prefix="skel_" outfile="lex.yy.c"
 
 
-   %option yylineno
+%{
+/* Work around a bug in flex 2.5.31.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+#undef skel_wrap
+#define skel_wrap() 1
 
 
-   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???  */
+#include "system.h"
 
 
-%%
+#include <error.h>
+#include <quotearg.h>
 
 
-"%%{line}"          { return LINE; }
-"%%{skeleton-line}" { return SLINE; }
+#include "complain.h"
+#include "getargs.h"
+#include "files.h"
+#include "scan-skel.h"
 
 
-"%%{yacc}"    { return YACC; }
-"%%{section}" { return SECTION; }
+#define QPUTS(String) \
+   fputs (quotearg_style (c_quoting_style, (String)), yyout)
 
 
-"%%{guards}"   { return GUARDS; }
-"%%{actions}"  { return ACTIONS; }
-"%%{tokendef}" { return TOKENS; }
+#define BASE_QPUTS(File) \
+   assert (File), QPUTS (base_name (File))
 
 
-  /* Muscle.  */
-"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
-  yylval.muscle = xstrndup (yytext + 3, yyleng - 4);
-  return MUSCLE;
-}
+%}
+%%
 
 
-  /* String.  */
-"%%\"".*"\"" {
-  yylval.string = xstrndup (yytext + 3, yyleng - 4);
-  return STRING;
-}
+%{
+  int lineno IF_LINT (= 0);
+  char *outname = NULL;
+%}
 
 
-  /* End of line.  */
-"\n" {
-  return '\n';
+"@output ".*\n {
+  char const *file_name = yytext + sizeof "@output " - 1;
+  yytext[yyleng - 1] = '\0';
+
+  /* Decode special file names.  They include the directory part,
+     contrary to their "free" occurrences, used for issuing #includes,
+     which must not include the directory part.  */
+
+  if (*file_name == '@')
+    {
+      if (strcmp (file_name, "@output_header_name@") == 0)
+       {
+         assert (spec_defines_file);
+         file_name = spec_defines_file;
+       }
+      else if (strcmp (file_name, "@output_parser_name@") == 0)
+       {
+         assert (parser_file_name);
+         file_name = parser_file_name;
+       }
+      else
+       fatal ("invalid token in skeleton: %s", yytext);
+    }
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
+  outname = xstrdup (file_name);
+  yyout = xfopen (outname, "w");
+  lineno = 1;
 }
 
 }
 
-  /* White spaces.  */
-[\t ]+ {
-  yylval.literal = yytext;
-  return BLANKS;
+"@@"      fputc ('@', yyout);
+"@{"      fputc ('[', yyout);
+"@}"      fputc (']', yyout);
+
+"@oline@"  fprintf (yyout, "%d", lineno + 1);
+"@ofile@"  QPUTS (outname);
+"@dir_prefix@" QPUTS (dir_prefix);
+"@output_parser_name@" BASE_QPUTS (parser_file_name);
+"@output_header_name@" BASE_QPUTS (spec_defines_file);
+
+  /* This pattern must not match more than the previous @ patterns. */
+@[^{}@\n]* fatal ("invalid @ in skeleton: %s", yytext);
+\n        lineno++; ECHO;
+[^@\n]+           ECHO;
+
+<<EOF>> {
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
+  return EOF;
 }
 }
+%%
 
 
-  /* Plain Character.  */
-. {
-  yylval.character = *yytext;
-  return CHARACTER;
+/*------------------------.
+| Scan a Bison skeleton.  |
+`------------------------*/
+
+void
+scan_skel (FILE *in)
+{
+  skel_in = in;
+  skel__flex_debug = trace_flag & trace_skeleton;
+  skel_lex ();
+  /* Reclaim Flex's buffers.  */
+  yy_delete_buffer (YY_CURRENT_BUFFER);
 }
 }
-
-%%