do {
c = next_char();
- } while (c == '_' || isalnum(c));
+ } while (isgraph(c));
unput();
lexer.len = lexer.curr_pos - lexer.s;
return tok_identifier;
- } else if (isdigit(c)) {
+ } else if (isdigit(c) || c == '-') {
unsigned number = 0;
+ unsigned sign = 0;
+
+ /* we support negative numbers as well, so one can easily set all bits with -1 */
+ if (c == '-') {
+ sign = 1;
+ c = next_char();
+ }
if (c == '0') {
c = next_char();
for (;;) {
if (! isdigit(c))
break;
- number = (number << 4) | (c - '0');
+ number = number * 10 + (c - '0');
c = next_char();
}
unput();
- lexer.number = number;
+ lexer.number = sign ? 0 - number : number;
return tok_number;
}
else if (c == '\0')
return c;
} /* get_token */
-/**
- * returns the next token.
- */
-static unsigned next_token(void) {
- if (! lexer.has_token) {
- lexer.cur_token = get_token();
- lexer.has_token = 1;
- }
- return lexer.cur_token;
-} /* next_token */
-
-#define drop_token() lexer.has_token = 0
-
/**
* High level function to use from debugger interface
*