X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1d6412adebec68e299086248a6a92a4191bbbec9..c02634922181a18cd6f2d430901a7747ea17b12b:/src/scan-gram.l diff --git a/src/scan-gram.l b/src/scan-gram.l index 4cc1b060..cd8ca516 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -31,6 +31,13 @@ #include "reader.h" /* Each time we match a string, move the end cursor to its end. */ +#define YY_USER_INIT \ +do { \ + LOCATION_RESET (*yylloc); \ + /* This is only to avoid GCC warnings. */ \ + if (yycontrol) {;}; \ +} while (0) + #define YY_USER_ACTION LOCATION_COLUMNS (*yylloc, yyleng) #define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng; #define YY_STEP LOCATION_STEP (*yylloc) @@ -69,9 +76,6 @@ scanner_last_string_free (void) } -/* This is only to avoid GCC warnings. */ -#define YY_USER_INIT if (yycontrol) {;}; - static int braces_level = 0; static int percent_percent_count = 0; @@ -96,7 +100,7 @@ blanks [ \t\f]+ start of the next token. */ #define TR_POS 0 #if TR_POS - fprintf (stderr, "FOO1: "); + fprintf (stderr, "FOO1: %p: ", yylloc); LOCATION_PRINT (stderr, *yylloc); fprintf (stderr, "\n"); #endif @@ -150,7 +154,7 @@ blanks [ \t\f]+ {eols} YY_LINES; YY_STEP; {blanks} YY_STEP; {id} { - yylval->symbol = getsym (yytext); + yylval->symbol = getsym (yytext, *yylloc); return ID; } @@ -282,7 +286,7 @@ blanks [ \t\f]+ assert (yy_top_state () == INITIAL); { YY_OBS_FINISH; - yylval->symbol = getsym (last_string); + yylval->symbol = getsym (last_string, *yylloc); symbol_class_set (yylval->symbol, token_sym); symbol_user_token_number_set (yylval->symbol, last_string[1]); YY_OBS_FREE; @@ -437,10 +441,10 @@ blanks [ \t\f]+ "{" YY_OBS_GROW; braces_level++; - "$"("<".*">")?(-?[0-9]+|"$") { handle_dollar (yytext); } + "$"("<"[^>]+">")?(-?[0-9]+|"$") { handle_dollar (yytext); } "@"(-?[0-9]+|"$") { handle_at (yytext); } - [^\[\]$/\'\"@\{\}\n\r]+ YY_OBS_GROW; + [^$@\[\]/\'\"\{\}\n\r]+ YY_OBS_GROW; {eols} YY_OBS_GROW; YY_LINES; /* A lose $, or /, or etc. */ @@ -471,7 +475,7 @@ blanks [ \t\f]+ return PROLOGUE; } - [^\[\]%\n\r]+ YY_OBS_GROW; + [^%\[\]/\'\"\n\r]+ YY_OBS_GROW; "%"+[^%\}\n\r]+ YY_OBS_GROW; {eols} YY_OBS_GROW; YY_LINES;