static Token *read_token_int(void) { int c = getc_nonspace(); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return read_number(c); case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': return read_ident(c); case '*': case '/': case '(': case ')': case ',': case ';': case '[': case ']': case '{': case '}': case '<': case '>': case '!': case '?': case ':': case '.': return make_punct(c); case '-': c = getc(stdin); if (c == '-') return make_punct(PUNCT_DEC); if (c == '>') return make_punct(PUNCT_ARROW); ungetc(c, stdin); return make_punct('-'); case '=': return read_rep('=', '=', PUNCT_EQ); case '+': return read_rep('+', '+', PUNCT_INC); case '&': return read_rep('&', '&', PUNCT_LOGAND); case '|': return read_rep('|', '|', PUNCT_LOGOR); case '"': return read_string(); case '\'': return read_char(); case EOF: return NULL; default: error("Unexpected character: '%c'", c); } }
static Token *read_token_int(void) { int c = getc_nonspace(); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return read_number(c); case '"': return read_string(); case '\'': return read_char(); case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': return read_ident(c); case '/': case '=': case '*': case '+': case '-': case '(': case ')': case ',': case ';': return make_punct(c); case EOF: return NULL; default: error("Unexpected character: '%c'", c); } }
static Token *read_rep(int expect, int t1, int t2) { int c = getc(stdin); if (c == expect) return make_punct(t2); ungetc(c, stdin); return make_punct(t1); }