X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/a4b36db458949986bd80257e2e253728ba4d31a8..e9f87b5b7df2e328d2e4196d276c0d96594c906b:/src/scan-skel.l diff --git a/src/scan-skel.l b/src/scan-skel.l index 0bb71d19..b04968c4 100644 --- a/src/scan-skel.l +++ b/src/scan-skel.l @@ -19,14 +19,9 @@ 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 @@ -35,7 +30,22 @@ 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; } @@ -49,24 +59,37 @@ /* 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->string = yytext; + return BLANKS; +} + + /* Plain Characters. */ +[^%\n]+ { + yylval->string = yytext; + return RAW; +} + /* Plain Character. */ . { - yylval.character = *yytext; + yylval->character = *yytext; return CHARACTER; }