]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
Regen.
[bison.git] / src / scan-skel.l
index b78e02f59583c322a94f5b54dccf90acac4f737d..b04968c4aded481406780d91cd3970aa94a1d51b 100644 (file)
@@ -1,17 +1,51 @@
-%{
+                                                             /* -*- C -*- */
+/* Scan Bison Skeletons.
+   Copyright (C) 2001  Free Software Foundation, Inc.
 
-#include <stdlib.h>
-#include <string.h>
+   This file is part of Bison, the GNU Compiler Compiler.
 
-#include "parse-skel.h"
+   Bison is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
-%}
+   Bison is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   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.  */
+
+%option debug nodefault noyywrap nounput
+%option prefix="skel_" outfile="lex.yy.c"
 
-%option nounput
-%option noyywrap
-%option yylineno
+/* If we enable
 
+   %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???  */
+
+%{
+#include "system.h"
+#include "skeleton.h"
+#include "parse-skel.h"
+%}
+
+%{
+/* Each time we match a string, move the end cursor to its end. */
+#define YY_USER_ACTION  yylloc->last_column += yyleng;
+%}
 %%
+%{
+  /* At each yylex invocation, mark the current position as the
+     start of the next token.  */
+  LOCATION_STEP (*yylloc);
+%}
 
 "%%{line}"          { return LINE; }
 "%%{skeleton-line}" { return SLINE; }
 "%%{actions}"  { return ACTIONS; }
 "%%{tokendef}" { return TOKENS; }
 
-"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" { /* Muscle.  */
-  size_t len = strlen (yytext);
-  yylval.string = (char*) malloc (len - 3);
-  strncpy (yylval.string, yytext + 3, len - 4);
-  yylval.string[len - 4] = 0;
+  /* Muscle.  */
+"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
+  yylval->string = xstrndup (yytext + 3, yyleng - 4);
   return MUSCLE;
 }
 
-"%%\"".*"\"" { /* String.  */
-  size_t len = strlen (yytext);
-  yylval.string = (char*) malloc (len - 3);
-  strncpy (yylval.string, yytext + 3, len - 4);
-  yylval.string[len - 4] = 0;
+  /* String.  */
+"%%\"".*"\"" {
+  yylval->string = xstrndup (yytext + 3, yyleng - 4);
   return STRING;
 }
 
-<<EOF>> { /* End of file.  */
-  return 0;
+  /* End of line.  */
+"\n" {
+  LOCATION_LINES (*yylloc, yyleng);
+  return '\n';
 }
 
-"\n" { /* End of line.  */
-  return '\n';
+  /* White spaces.  */
+[\t ]+ {
+  yylval->string = yytext;
+  return BLANKS;
+}
+
+  /* Plain Characters.  */
+[^%\n]+ {
+  yylval->string = yytext;
+  return RAW;
 }
 
-. { /* Character.  */
-  yylval.character = *yytext;
+  /* Plain Character.  */
+. {
+  yylval->character = *yytext;
   return CHARACTER;
 }