diff options
author | Akim Demaille <akim@lrde.epita.fr> | 2013-02-21 14:32:16 +0100 |
---|---|---|
committer | Akim Demaille <akim@lrde.epita.fr> | 2013-04-09 14:07:51 +0200 |
commit | e52ddf820b9c9c123e4f3c3799fc1fb9b0a54c09 (patch) | |
tree | 311c4156eeddcc7298a712cd17da55d54fa3d63e | |
parent | 6574576cfb6e5039e8a21714e8d9bf482ae7c32f (diff) | |
download | bison-e52ddf820b9c9c123e4f3c3799fc1fb9b0a54c09.tar.gz |
style: simplify the scanning of type tags
* src/scan-gram.l: Remove the rule for simple tags: the "complex" case
subsumes it. It was more efficient, but duplicated the code for a
negligible benefit.
-rw-r--r-- | src/scan-gram.l | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/scan-gram.l b/src/scan-gram.l index 7ce3b4b1..58f6590b 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -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)* @@ -325,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; @@ -559,10 +550,11 @@ eqopt ([[:space:]]*=)? <<EOF>> 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. | + `--------------------------------------------------------------*/ <SC_TAG> { |