diff options
author | Alex Elder <elder@linaro.org> | 2021-10-01 18:23:33 -0500 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2021-10-04 14:16:34 -0500 |
commit | 734ecff5a5fd95bba1858f2da10578ba825a8fe2 (patch) | |
tree | 6c8857a848cc6a1def3244a483ca506a1f71dd29 | |
parent | b6b7384256530f8d393383c41b144687baed2875 (diff) |
parser: refactor loops in yylex()
The first character in a symbol or numeric value in a number will not
go beyond the end of the token buffer. Knowing this, the loops in
yylex() can be rearranged to use while () instead of do...while ().
Signed-off-by: Alex Elder <elder@linaro.org>
Message-Id: <20211001232338.769309-30-elder@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
-rw-r--r-- | parser.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -218,14 +218,14 @@ static struct token yylex() ; if (isalpha(ch)) { - do { + *p++ = ch; + while ((ch = input()) && (isalnum(ch) || ch == '_')) { if (p - buf == sizeof(buf)) { buf[TOKEN_BUF_MIN] = '\0'; yyerror("token too long: \"%s...\"", buf); } *p++ = ch; - ch = input(); - } while (isalnum(ch) || ch == '_'); + } unput(ch); *p = '\0'; @@ -275,14 +275,14 @@ static struct token yylex() base = 10; } - do { + *p++ = ch; + while ((ch = input()) && isvalid(ch)) { if (p - buf == sizeof(buf)) { buf[TOKEN_BUF_MIN] = '\0'; yyerror("number too long: \"%s...\"", buf); } *p++ = ch; - ch = input(); - } while (isvalid(ch)); + } unput(ch); *p = '\0'; |