summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2021-10-01 18:23:33 -0500
committerBjorn Andersson <bjorn.andersson@linaro.org>2021-10-04 14:16:34 -0500
commit734ecff5a5fd95bba1858f2da10578ba825a8fe2 (patch)
tree6c8857a848cc6a1def3244a483ca506a1f71dd29
parentb6b7384256530f8d393383c41b144687baed2875 (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.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/parser.c b/parser.c
index a684a29..f2ba55f 100644
--- a/parser.c
+++ b/parser.c
@@ -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';