commit 941a776c59a79b6d64d07d09b38f3e9b00feeee3
parent f83f8e2064258e2d96e94b4702943ddf1b30239e
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sun, 29 Jul 2012 11:11:18 +0200
New function operator in lexical analysis
This new function allow a simpler and cleaner next function
Diffstat:
M | lex.c | | | 34 | +++++++++++++++++++++------------- |
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/lex.c b/lex.c
@@ -124,6 +124,25 @@ static unsigned char minus(void)
}
}
+static unsigned char operator(void)
+{
+ register unsigned char c;
+
+ switch (c = getc(yyin)) {
+ case '=': return follow('=', EQ, 0);
+ case '^': return follow('^', XOR_EQ, 0);
+ case '*': return follow('*', MUL_EQ, 0);
+ case '!': return follow('!', NE, 0);
+ case '+': return follow('+', ADD_EQ, INC);
+ case '&': return follow('&', AND_EQ, AND);
+ case '|': return follow('|', OR_EQ, OR);
+ case '<': return rel_shift('<');
+ case '>': return rel_shift('>');
+ case '-': return minus();
+ default: return c;
+ }
+}
+
void next(void)
{
register unsigned char c;
@@ -140,19 +159,8 @@ void next(void)
ungetc(c, yyin);
yytoken = number();
} else {
- switch (c) {
- case '=': yytoken = follow('=', EQ, 0); break;
- case '^': yytoken = follow('^', XOR_EQ, 0); break;
- case '*': yytoken = follow('*', MUL_EQ, 0); break;
- case '!': yytoken = follow('!', NE, 0); break;
- case '+': yytoken = follow('+', ADD_EQ, INC); break;
- case '&': yytoken = follow('&', AND_EQ, AND); break;
- case '|': yytoken = follow('|', OR_EQ, OR); break;
- case '<': yytoken = rel_shift('<'); break;
- case '>': yytoken = rel_shift('>'); break;
- case '-': yytoken = minus(); break;
- default: yytoken = c;
- }
+ ungetc(c, yyin);
+ yytoken = operator();
}
}