]> git.saurik.com Git - bison.git/blobdiff - src/scan-skel.l
* tests/output.at: New test.
[bison.git] / src / scan-skel.l
index fc88b4a1da19ca4880848d15752dd1f1fabdfe47..924f4ab922a324f3aa1ac0b6fe821a982cec6188 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; }
 
-"%%{yacc}"    { return YACC; }
 "%%{section}" { return SECTION; }
 
 "%%{guards}"   { return GUARDS; }
 
   /* Muscle.  */
 "%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
-  yylval.muscle = xstrndup (yytext + 3, yyleng - 4);
+  yylval->string = xstrndup (yytext + 3, yyleng - 4);
   return MUSCLE;
 }
 
   /* String.  */
 "%%\"".*"\"" {
-  yylval.string = xstrndup (yytext + 3, yyleng - 4);
+  yylval->string = xstrndup (yytext + 3, yyleng - 4);
   return STRING;
 }
 
   /* End of line.  */
 "\n" {
+  LOCATION_LINES (*yylloc, yyleng);
   return '\n';
 }
 
   /* White spaces.  */
 [\t ]+ {
-  yylval.literal = yytext;
+  yylval->string = yytext;
   return BLANKS;
 }
 
+  /* Plain Characters.  */
+[^%\n]+ {
+  yylval->string = yytext;
+  return RAW;
+}
+
   /* Plain Character.  */
 . {
-  yylval.character = *yytext;
+  yylval->character = *yytext;
   return CHARACTER;
 }