]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
DJGPP specific file.
[bison.git] / src / scan-skel.l
index 6c7ff626b6c6b7982dfd0292c9302035f8ec627a..b14fb40c1f5e467de957a116e2cbe89e6267c35c 100644 (file)
@@ -1,6 +1,6 @@
 /* Scan Bison Skeletons.                                       -*- C -*-
 
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001, 2002, 2003 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.
 
 
    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.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 %option nodefault noyywrap nounput never-interactive debug
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
 
 %option nodefault noyywrap nounput never-interactive debug
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
+/* 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
+
 #include "system.h"
 
 #include <error.h>
 #include <quotearg.h>
 
 #include "system.h"
 
 #include <error.h>
 #include <quotearg.h>
 
+#include "complain.h"
 #include "getargs.h"
 #include "files.h"
 #include "getargs.h"
 #include "files.h"
-
-int skel_lex (void);
+#include "scan-skel.h"
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, (String)), yyout)
 
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, (String)), yyout)
 
+#define BASE_QPUTS(File) \
+   assert (File), QPUTS (base_name (File))
+
 %}
 %%
 
 %}
 %%
 
@@ -45,22 +53,34 @@ int skel_lex (void);
 %}
 
 "@output ".*\n {
 %}
 
 "@output ".*\n {
-  char const *filename = yytext + sizeof "@output " - 1;
+  char const *file_name = yytext + sizeof "@output " - 1;
   yytext[yyleng - 1] = '\0';
 
   yytext[yyleng - 1] = '\0';
 
-  if (*filename == '@')
+  /* 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 (filename, "@output_header_name@") == 0)
-       filename = spec_defines_file;
-      else if (strcmp (filename, "@output_parser_name@") == 0)
-       filename = parser_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
       else
-       abort ();
+       fatal ("invalid token in skeleton: %s", yytext);
     }
     }
-
-  XFREE (outname);
-  outname = xstrdup (filename);
-  xfclose (yyout);
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
+  outname = xstrdup (file_name);
   yyout = xfopen (outname, "w");
   lineno = 1;
 }
   yyout = xfopen (outname, "w");
   lineno = 1;
 }
@@ -71,22 +91,29 @@ int skel_lex (void);
 
 "@oline@"  fprintf (yyout, "%d", lineno + 1);
 "@ofile@"  QPUTS (outname);
 
 "@oline@"  fprintf (yyout, "%d", lineno + 1);
 "@ofile@"  QPUTS (outname);
-"@output_parser_name@" QPUTS (parser_file_name);
-"@output_header_name@"  QPUTS (spec_defines_file);
+"@dir_prefix@" QPUTS (dir_prefix);
+"@output_parser_name@" BASE_QPUTS (parser_file_name);
+"@output_header_name@" BASE_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        lineno++; ECHO;
-[^@\n]    ECHO;
+[^@\n]+           ECHO;
 
 
-<<EOF>>           xfclose (yyout); free (outname); return EOF;
+<<EOF>> {
+  if (outname)
+    {
+      free (outname);
+      xfclose (yyout);
+    }
+  return EOF;
+}
 %%
 
 /*------------------------.
 | Scan a Bison skeleton.  |
 `------------------------*/
 
 %%
 
 /*------------------------.
 | Scan a Bison skeleton.  |
 `------------------------*/
 
-void scan_skel (FILE *);
-
 void
 scan_skel (FILE *in)
 {
 void
 scan_skel (FILE *in)
 {