X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/34f98f46ee16dd3719d19e002dc27b2665a2514f..47aee066ccabdb3aeb96735532167c551f8e7194:/src/scan-gram.l?ds=sidebyside diff --git a/src/scan-gram.l b/src/scan-gram.l index 25796dbd..9429c5f1 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -24,9 +24,6 @@ %option prefix="gram_" outfile="lex.yy.c" %{ -#include -#include "system.h" - /* Work around a bug in flex 2.5.31. See Debian bug 333231 . */ #undef gram_wrap @@ -37,7 +34,6 @@ #include "complain.h" #include "files.h" -#include "getargs.h" /* yacc_flag */ #include "gram.h" #include "quotearg.h" #include "reader.h" @@ -54,7 +50,7 @@ code_start = scanner_cursor = loc->start; \ /* Location of scanner cursor. */ -boundary scanner_cursor; +static boundary scanner_cursor; #define YY_USER_ACTION location_compute (loc, &scanner_cursor, yytext, yyleng); @@ -70,10 +66,6 @@ gram_scanner_last_string_free (void) STRING_FREE; } -/* The location of the most recently saved token, if it was a - BRACED_CODE token; otherwise, this has an unspecified value. */ -location gram_last_braced_code_loc; - static void handle_syncline (char *, location); static unsigned long int scan_integer (char const *p, int base, location loc); static int convert_ucn_to_byte (char const *hex_text); @@ -243,8 +235,6 @@ splice (\\[ \f\t\v]*\n)* /* Code in between braces. */ "{" { - if (current_rule && current_rule->action) - grammar_midrule_action (); STRING_GROW; braces_level = 0; code_start = loc->start; @@ -346,15 +336,23 @@ splice (\\[ \f\t\v]*\n)* { - "\"" { + "\""|"\n" { + if (yytext[0] == '\n') + unexpected_newline (token_start, "\""); + STRING_FINISH; + loc->start = token_start; + val->chars = last_string; + BEGIN INITIAL; + return STRING; + } + <> { + unexpected_eof (token_start, "\""); STRING_FINISH; loc->start = token_start; val->chars = last_string; BEGIN INITIAL; return STRING; } - \n unexpected_newline (token_start, "\""); BEGIN INITIAL; - <> unexpected_eof (token_start, "\""); BEGIN INITIAL; } /*----------------------------------------------------------. @@ -364,7 +362,9 @@ splice (\\[ \f\t\v]*\n)* { - "'" { + "'"|"\n" { + if (yytext[0] == '\n') + unexpected_newline (token_start, "'"); STRING_GROW; STRING_FINISH; loc->start = token_start; @@ -373,8 +373,18 @@ splice (\\[ \f\t\v]*\n)* BEGIN INITIAL; return CHAR; } - \n unexpected_newline (token_start, "'"); BEGIN INITIAL; - <> unexpected_eof (token_start, "'"); BEGIN INITIAL; + <> { + unexpected_eof (token_start, "'"); + STRING_FINISH; + loc->start = token_start; + if (strlen(last_string) > 1) + val->character = last_string[1]; + else + val->character = last_string[0]; + STRING_FREE; + BEGIN INITIAL; + return CHAR; + } } @@ -511,7 +521,6 @@ splice (\\[ \f\t\v]*\n)* STRING_FINISH; loc->start = code_start; val->chars = last_string; - gram_last_braced_code_loc = *loc; BEGIN INITIAL; return BRACED_CODE; } @@ -521,7 +530,14 @@ splice (\\[ \f\t\v]*\n)* (as `<' `<%'). */ "<"{splice}"<" STRING_GROW; - <> unexpected_eof (code_start, "}"); BEGIN INITIAL; + <> { + unexpected_eof (code_start, "}"); + STRING_FINISH; + loc->start = code_start; + val->chars = last_string; + BEGIN INITIAL; + return BRACED_CODE; + } } @@ -539,7 +555,14 @@ splice (\\[ \f\t\v]*\n)* return PROLOGUE; } - <> unexpected_eof (code_start, "%}"); BEGIN INITIAL; + <> { + unexpected_eof (code_start, "%}"); + STRING_FINISH; + loc->start = code_start; + val->chars = last_string; + BEGIN INITIAL; + return PROLOGUE; + } }