X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/24fad99e2bb2bdb0d5bd62571a0be8d60b97e2f8..5e5d541531bda9507136d3c578315a2882d67412:/src/scan-skel.l diff --git a/src/scan-skel.l b/src/scan-skel.l index fc88b4a1..924f4ab9 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,12 +30,26 @@ 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; } @@ -49,30 +58,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.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; }