]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
Regen.
[bison.git] / src / scan-skel.l
index 71577d7e6aa3281f0655d82989e7bb319dce771f..b04968c4aded481406780d91cd3970aa94a1d51b 100644 (file)
    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    02111-1307, USA.  */
 
-%{
-
-#include "system.h"
-#include "skeleton.h"
-#include "parse-skel.h"
+%option debug nodefault noyywrap nounput
+%option prefix="skel_" outfile="lex.yy.c"
 
-%}
-
-%option nounput
-%option noyywrap
 /* If we enable
 
    %option yylineno
    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;
 }