X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/c1b2677ad0a0a507010fa7dde5ff07dbe4596a10..026816664ff8283a55f91915843a8ff0ac5cf86c:/src/scan-gram.l diff --git a/src/scan-gram.l b/src/scan-gram.l index 0ea06c3f..555e6952 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -1,6 +1,6 @@ /* Bison Grammar Scanner -*- C -*- - Copyright (C) 2002-2012 Free Software Foundation, Inc. + Copyright (C) 2002-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -112,7 +112,12 @@ static void unexpected_newline (boundary, char const *); /* A identifier was just read in directives/rules. Special state to capture the sequence 'identifier :'. */ %x SC_AFTER_IDENTIFIER - /* A complex tag, with nested angles brackets. */ + + /* POSIX says that a tag must be both an id and a C union member, but + historically almost any character is allowed in a tag. We + disallow NUL, as this simplifies our implementation. We match + angle brackets in nested pairs: several languages use them for + generics/template types. */ %x SC_TAG /* Four types of user code: @@ -133,13 +138,6 @@ notletter [^.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]{-}[%\{] id {letter}({letter}|[-0-9])* int [0-9]+ -/* POSIX says that a tag must be both an id and a C union member, but - historically almost any character is allowed in a tag. We disallow - NUL, as this simplifies our implementation. We disallow angle - bracket to match them in nested pairs: several languages use them - for generics/template types. */ -tag [^\0<>]+ - /* Zero or more instances of backslash-newline. Following GCC, allow white space between the backslash and the newline. */ splice (\\[ \f\t\v]*\n)* @@ -217,6 +215,7 @@ eqopt ([[:space:]]*=)? "%defines" return PERCENT_DEFINES; "%destructor" return PERCENT_DESTRUCTOR; "%dprec" return PERCENT_DPREC; + "%empty" return PERCENT_EMPTY; "%error-verbose" return PERCENT_ERROR_VERBOSE; "%expect" return PERCENT_EXPECT; "%expect-rr" return PERCENT_EXPECT_RR; @@ -267,7 +266,7 @@ eqopt ([[:space:]]*=)? "%pure"[-_]"parser" DEPRECATED("%pure-parser"); "%token"[-_]"table" DEPRECATED("%token-table"); - "%"{id}|"%"{notletter}([[:graph:]])+ { + "%"{id} { complain (loc, complaint, _("invalid directive: %s"), quote (yytext)); } @@ -324,13 +323,6 @@ eqopt ([[:space:]]*=)? /* A type. */ "<*>" return TAG_ANY; "<>" return TAG_NONE; - "<"{tag}">" { - obstack_grow (&obstack_for_string, yytext + 1, yyleng - 2); - STRING_FINISH; - val->uniqstr = uniqstr_new (last_string); - STRING_FREE; - return TAG; - } "<" { nesting = 0; token_start = loc->start; @@ -520,7 +512,7 @@ eqopt ([[:space:]]*=)? "\"" { STRING_FINISH; loc->start = token_start; - val->chars = last_string; + val->code = last_string; BEGIN INITIAL; return STRING; } @@ -558,10 +550,11 @@ eqopt ([[:space:]]*=)? <> unexpected_eof (token_start, "'"); } - /*-----------------------------------------------------------. - | Scanning a Bison nested tag. The initial angle bracket is | - | already eaten. | - `-----------------------------------------------------------*/ + + + /*--------------------------------------------------------------. + | Scanning a tag. The initial angle bracket is already eaten. | + `--------------------------------------------------------------*/ { @@ -579,7 +572,7 @@ eqopt ([[:space:]]*=)? STRING_GROW; } - [^<>]+ STRING_GROW; + ([^<>]|->)+ STRING_GROW; "<"+ STRING_GROW; nesting += yyleng; <> unexpected_eof (token_start, ">"); @@ -758,7 +751,7 @@ eqopt ([[:space:]]*=)? "%}" { STRING_FINISH; loc->start = code_start; - val->chars = last_string; + val->code = last_string; BEGIN INITIAL; return PROLOGUE; } @@ -777,7 +770,7 @@ eqopt ([[:space:]]*=)? <> { STRING_FINISH; loc->start = code_start; - val->chars = last_string; + val->code = last_string; BEGIN INITIAL; return EPILOGUE; }