X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d236ad946b61526197a5e20322416ad99b045d97..63951be29fcb8e21146a9377176d53d509c575ca:/src/scan-gram.l diff --git a/src/scan-gram.l b/src/scan-gram.l index e1bda045..ad061cc6 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -1,6 +1,6 @@ /* Bison Grammar Scanner -*- C -*- - Copyright (C) 2002-2011 Free Software Foundation, Inc. + Copyright (C) 2002-2012 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -36,7 +36,7 @@ #include "reader.h" #include "uniqstr.h" -#include +#include #include #include @@ -88,11 +88,11 @@ static void unexpected_newline (boundary, char const *); /* Strings and characters in directives/rules. */ %x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER /* A identifier was just read in directives/rules. Special state - to capture the sequence `identifier :'. */ + to capture the sequence 'identifier :'. */ %x SC_AFTER_IDENTIFIER /* Three types of user code: - - prologue (code between `%{' `%}' in the first section, before %%); + - prologue (code between '%{' '%}' in the first section, before %%); - actions, printers, union, etc, (between braced in the middle section); - epilogue (everything after the second %%). */ %x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE @@ -104,7 +104,7 @@ static void unexpected_newline (boundary, char const *); %x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_] -id -*(-|{letter}({letter}|[-0-9])*) +id {letter}({letter}|[-0-9])* directive %{id} int [0-9]+ @@ -120,13 +120,13 @@ splice (\\[ \f\t\v]*\n)* %% %{ /* Nesting level of the current code in braces. */ - int braces_level IF_LINT (= 0); + int braces_level PACIFY_CC (= 0); /* Parent context state, when applicable. */ - int context_state IF_LINT (= 0); + int context_state PACIFY_CC (= 0); /* Location of most recent identifier, when applicable. */ - location id_loc IF_LINT (= empty_location); + location id_loc PACIFY_CC (= empty_location); /* Where containing code started, when applicable. Its initial value is relevant only when yylex is invoked in the SC_EPILOGUE @@ -135,7 +135,7 @@ splice (\\[ \f\t\v]*\n)* /* Where containing comment or string or character literal started, when applicable. */ - boundary token_start IF_LINT (= scanner_cursor); + boundary token_start PACIFY_CC (= scanner_cursor); %} @@ -146,7 +146,7 @@ splice (\\[ \f\t\v]*\n)* { /* Comments and white space. */ - "," warn_at (*loc, _("stray `,' treated as white space")); + "," warn_at (*loc, _("stray ',' treated as white space")); [ \f\n\t\v] | "//".* ; "/*" { @@ -291,7 +291,7 @@ splice (\\[ \f\t\v]*\n)* } . { - complain_at (*loc, _("invalid character: %s"), quote (yytext)); + complain_at (*loc, _("invalid character: %s"), quote_mem (yytext, yyleng)); } <> { @@ -375,7 +375,7 @@ splice (\\[ \f\t\v]*\n)* } . { complain_at (*loc, _("invalid character in bracketed name: %s"), - quote (yytext)); + quote_mem (yytext, yyleng)); } <> { BEGIN bracketed_id_context_state; @@ -397,7 +397,7 @@ splice (\\[ \f\t\v]*\n)* /*---------------------------------------------------------------. - | Scanning a Yacc comment. The initial `/ *' is already eaten. | + | Scanning a Yacc comment. The initial '/ *' is already eaten. | `---------------------------------------------------------------*/ @@ -409,7 +409,7 @@ splice (\\[ \f\t\v]*\n)* /*------------------------------------------------------------. - | Scanning a C comment. The initial `/ *' is already eaten. | + | Scanning a C comment. The initial '/ *' is already eaten. | `------------------------------------------------------------*/ @@ -420,7 +420,7 @@ splice (\\[ \f\t\v]*\n)* /*--------------------------------------------------------------. - | Scanning a line comment. The initial `//' is already eaten. | + | Scanning a line comment. The initial '//' is already eaten. | `--------------------------------------------------------------*/ @@ -560,7 +560,7 @@ splice (\\[ \f\t\v]*\n)* \\(.|\n) { char const *p = yytext + 1; /* Quote only if escaping won't make the character visible. */ - if (isspace ((unsigned char) *p) && isprint ((unsigned char) *p)) + if (c_isspace ((unsigned char) *p) && c_isprint ((unsigned char) *p)) p = quote (p); else p = quotearg_style_mem (escape_quoting_style, p, 1); @@ -648,8 +648,8 @@ splice (\\[ \f\t\v]*\n)* } } - /* Tokenize `<<%' correctly (as `<<' `%') rather than incorrrectly - (as `<' `<%'). */ + /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly + (as '<' '<%'). */ "<"{splice}"<" STRING_GROW; <> { @@ -840,7 +840,7 @@ convert_ucn_to_byte (char const *ucn) /*----------------------------------------------------------------. -| Handle `#line INT "FILE"'. ARGS has already skipped `#line '. | +| Handle '#line INT "FILE"'. ARGS has already skipped '#line '. | `----------------------------------------------------------------*/ static void @@ -848,8 +848,8 @@ handle_syncline (char *args, location loc) { char *after_num; unsigned long int lineno = strtoul (args, &after_num, 10); - char *file = strchr (after_num, '"') + 1; - *strchr (file, '"') = '\0'; + char *file = mbschr (after_num, '"') + 1; + *mbschr (file, '"') = '\0'; if (INT_MAX <= lineno) { warn_at (loc, _("line number overflow")); @@ -872,6 +872,10 @@ unexpected_end (boundary start, char const *msgid, char const *token_end) location loc; loc.start = start; loc.end = scanner_cursor; + token_end = quote (token_end); + // Instead of '\'', display "'". + if (!strcmp (token_end, "'\\''")) + token_end = "\"'\""; complain_at (loc, _(msgid), token_end); } @@ -884,7 +888,7 @@ unexpected_end (boundary start, char const *msgid, char const *token_end) static void unexpected_eof (boundary start, char const *token_end) { - unexpected_end (start, N_("missing `%s' at end of file"), token_end); + unexpected_end (start, N_("missing %s at end of file"), token_end); } @@ -895,7 +899,7 @@ unexpected_eof (boundary start, char const *token_end) static void unexpected_newline (boundary start, char const *token_end) { - unexpected_end (start, N_("missing `%s' at end of line"), token_end); + unexpected_end (start, N_("missing %s at end of line"), token_end); }