- switch((preprocessor_token_type_t) token->type) {
- case TP_IDENTIFIER:
- fprintf(f, "identifier '%s'", token->symbol->string);
- break;
- case TP_NUMBER:
- fprintf(f, "number '%s'", token->literal.begin);
- break;
- case TP_STRING_LITERAL:
- fprintf(f, "string \"%s\"", token->literal.begin);
- break;
+ char const c = token_symbols[token2]->string[0];
+
+ switch (token1) {
+ case '>': return c == '>' || c == '=';
+ case '<': return c == '<' || c == '=' || c == '%' || c == ':';
+ case '+': return c == '+' || c == '=';
+ case '-': return c == '-' || c == '>';
+ case '/': return c == '/' || c == '=' || c == '*';
+ case '%': return c == ':' || c == '=' || c == '>';
+ case '&': return c == '&' || c == '=';
+ case '|': return c == '|' || c == '=';
+ case ':': return c == ':' || c == '>';
+ case '*': return c == '*' || c == '=';
+ case '.': return c == '.' || c == '%' || token2 == T_NUMBER;
+ case '#': return c == '#' || c == '%';
+ case T_GREATERGREATER: return c == '=';
+ case T_LESSLESS: return c == '=';
+ case '^': return c == '=';
+ case '!': return c == '=';
+
+ case T_IDENTIFIER:
+ return token2 == T_CHARACTER_CONSTANT ||
+ token2 == T_IDENTIFIER ||
+ token2 == T_NUMBER ||
+ token2 == T_STRING_LITERAL; /* L */
+
+ case T_NUMBER:
+ return token2 == T_IDENTIFIER || token2 == T_NUMBER ||
+ token2 == '.' || token2 == '+' || token2 == '-';
+