[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/6] style: simplify the scanning of type tags
From: |
Akim Demaille |
Subject: |
[PATCH 2/6] style: simplify the scanning of type tags |
Date: |
Sat, 23 Feb 2013 16:59:54 +0100 |
* 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.
---
src/scan-gram.l | 30 +++++++++++-------------------
1 file changed, 11 insertions(+), 19 deletions(-)
diff --git a/src/scan-gram.l b/src/scan-gram.l
index 7ce3b4b..58f6590 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>
{
--
1.8.1.3
- [PATCH 0/6] api.value.type support (was: rename variant), Akim Demaille, 2013/02/23
- [PATCH 6/6] doc: api.value.type union., Akim Demaille, 2013/02/23
- [PATCH 3/6] value type: accept "->" in type tags, Akim Demaille, 2013/02/23
- [PATCH 2/6] style: simplify the scanning of type tags,
Akim Demaille <=
- [PATCH 5/6] doc: move the section about "%union" where types are discussed, Akim Demaille, 2013/02/23
- [PATCH 4/6] doc: deprecate #define YYSTYPE in favor of %define api.value.type, Akim Demaille, 2013/02/23
- [PATCH 1/6] api.value.type: implement proper support, check, and document, Akim Demaille, 2013/02/23
- Re: [PATCH 0/6] api.value.type support, Paul Eggert, 2013/02/23