]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
* NEWS: Bison-generated C parsers no longer quote literal strings
[bison.git] / src / scan-skel.l
index e7f5b708bf541042536956029741c63e67159ad1..7ac27c6ebd335fe1c0ad057b444d2ca548777826 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, 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.
 
 
 %{
 #include "system.h"
 
 %{
 #include "system.h"
-#include "quotearg.h"
-#include "error.h"
+
+#include <error.h>
+#include <quotearg.h>
+
+#include "complain.h"
 #include "getargs.h"
 #include "files.h"
 
 int skel_lex (void);
 
 #define QPUTS(String) \
 #include "getargs.h"
 #include "files.h"
 
 int skel_lex (void);
 
 #define QPUTS(String) \
-   fputs (quotearg_style (c_quoting_style, (String)), yyout);
+   fputs (quotearg_style (c_quoting_style, (String)), yyout)
 
 %}
 %%
 
 %}
 %%
@@ -52,10 +56,14 @@ int skel_lex (void);
       else if (strcmp (filename, "@output_parser_name@") == 0)
        filename = parser_file_name;
       else
       else if (strcmp (filename, "@output_parser_name@") == 0)
        filename = parser_file_name;
       else
-       abort ();
+       fatal ("invalid token in skeleton: %s", yytext);
     }
 
     }
 
-  XFREE (outname);
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
   outname = xstrdup (filename);
   yyout = xfopen (outname, "w");
   lineno = 1;
   outname = xstrdup (filename);
   yyout = xfopen (outname, "w");
   lineno = 1;
@@ -65,16 +73,24 @@ int skel_lex (void);
 "@{"      fputc ('[', yyout);
 "@}"      fputc (']', yyout);
 
 "@{"      fputc ('[', yyout);
 "@}"      fputc (']', yyout);
 
-"@oline@"  fprintf (yyout, "%d", lineno);
+"@oline@"  fprintf (yyout, "%d", lineno + 1);
 "@ofile@"  QPUTS (outname);
 "@output_parser_name@" QPUTS (parser_file_name);
 "@ofile@"  QPUTS (outname);
 "@output_parser_name@" QPUTS (parser_file_name);
-"@output_header_name@"  QPUTS (spec_defines_file);
+"@output_header_name@" QPUTS (spec_defines_file);
 
 
-"@"       abort ();
+  /* This pattern must not match more than the previous @ patterns. */
+@[^{}@\n]* fatal ("invalid @ in skeleton: %s", yytext);
 \n        lineno++; ECHO;
 [^@\n]+           ECHO;
 
 \n        lineno++; ECHO;
 [^@\n]+           ECHO;
 
-<<EOF>>           xfclose (yyout); free (outname); return EOF;
+<<EOF>> {
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
+  return EOF;
+}
 %%
 
 /*------------------------.
 %%
 
 /*------------------------.