X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/348f56088399476429207812ded8d164c714f2f3..eba83258a36bc55ac915d99d2b40d5bee106e73a:/src/scan-code.l diff --git a/src/scan-code.l b/src/scan-code.l index a84b4c1f..f1c97908 100644 --- a/src/scan-code.l +++ b/src/scan-code.l @@ -1,6 +1,6 @@ /* Bison Action Scanner -*- C -*- - Copyright (C) 2006, 2007, 2008-2009 Free Software Foundation, Inc. + Copyright (C) 2006-2012 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -84,8 +84,8 @@ splice (\\[ \f\t\v]*\n)* /* C style identifier. Must start with letter. Will be used for named symbol references. Shall be kept synchronized with scan-gram.l "letter" and "id". */ -letter [-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_] -id {letter}({letter}|[0-9])* +letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_] +id {letter}({letter}|[-0-9])* ref -?[0-9]+|{id}|"["{id}"]"|"$" %% @@ -245,7 +245,20 @@ ref -?[0-9]+|{id}|"["{id}"]"|"$" {splice} STRING_GROW; [\n\r] STRING_GROW; if (in_cpp) in_cpp = need_semicolon = false; [ \t\f] STRING_GROW; - . STRING_GROW; need_semicolon = true; + + /* YYFAIL is undocumented and was formally deprecated in Bison + 2.4.2. */ + YYFAIL { + STRING_GROW; need_semicolon = true; + warn_at (*loc, _("use of YYFAIL, which is deprecated and will be" + " removed")); + } + + /* The sole purpose of this is to make sure identifiers that merely + contain YYFAIL don't produce the above warning. */ + [A-Za-z_][0-9A-Za-z_]* STRING_GROW; need_semicolon = true; + + . STRING_GROW; need_semicolon = true; } @@ -607,7 +620,17 @@ parse_ref (char *cp, symbol_list *rule, int rule_length, complain_at_indent (text_loc, &indent, _("invalid reference: %s"), quote (text)); indent += SUB_INDENT; - if (midrule_rhs_index) + if (len == 0) + { + location sym_loc = text_loc; + sym_loc.start.column += 1; + sym_loc.end = sym_loc.start; + const char *format = + _("syntax error after `%c', expecting integer, letter," + " `_', `[', or `$'"); + complain_at_indent (sym_loc, &indent, format, dollar_or_at); + } + else if (midrule_rhs_index) { const char *format = _("symbol not found in production before $%d: %.*s");