typedef enum { TOK_EOF, TOK_ERROR, TOK_IDENT, TOK_KEYWORD, TOK_INT, TOK_FLOAT, TOK_CHAR, TOK_STRING, TOK_LPAREN, TOK_RPAREN, TOK_LBRACKET, TOK_RBRACKET, TOK_LBRACE, TOK_RBRACE, TOK_COMMA, TOK_DOT, TOK_ARROW, TOK_ELLIPSIS, TOK_COLON, TOK_SEMICOLON, TOK_QUESTION, TOK_HASH, TOK_HASHHASH, TOK_PLUS, TOK_MINUS, TOK_STAR, TOK_SLASH, TOK_PERCENT, TOK_INC, TOK_DEC, TOK_ASSIGN, TOK_PLUS_ASSIGN, TOK_MINUS_ASSIGN, TOK_MUL_ASSIGN, TOK_DIV_ASSIGN, TOK_MOD_ASSIGN, TOK_LSHIFT_ASSIGN, TOK_RSHIFT_ASSIGN, TOK_AND_ASSIGN, TOK_XOR_ASSIGN, TOK_OR_ASSIGN, TOK_EQ, TOK_NEQ, TOK_LT, TOK_LEQ, TOK_GT, TOK_GEQ, TOK_NOT, TOK_BITNOT, TOK_BITAND, TOK_BITOR, TOK_BITXOR, TOK_AND, TOK_OR, TOK_LSHIFT, TOK_RSHIFT, } Token_Kind; char *token_to_op[] = { [TOK_LPAREN] = "(", [TOK_RPAREN] = ")", [TOK_LBRACKET] = "[", [TOK_RBRACKET] = "]", [TOK_LBRACE] = "{", [TOK_RBRACE] = "}", [TOK_COMMA] = ",", [TOK_DOT] = ".", [TOK_ARROW] = "->", [TOK_ELLIPSIS] = "...", [TOK_COLON] = ":", [TOK_SEMICOLON] = ";", [TOK_QUESTION] = "?", [TOK_HASH] = "#", [TOK_HASHHASH] = "##", [TOK_PLUS] = "+", [TOK_MINUS] = "-", [TOK_STAR] = "*", [TOK_SLASH] = "/", [TOK_PERCENT] = "%", [TOK_INC] = "++", [TOK_DEC] = "--", [TOK_ASSIGN] = "=", [TOK_PLUS_ASSIGN] = "+=", [TOK_MINUS_ASSIGN] = "-=", [TOK_MUL_ASSIGN] = "*=", [TOK_DIV_ASSIGN] = "/=", [TOK_MOD_ASSIGN] = "%=", [TOK_LSHIFT_ASSIGN] = "<<=", [TOK_RSHIFT_ASSIGN] = ">>=", [TOK_AND_ASSIGN] = "&=", [TOK_XOR_ASSIGN] = "^=", [TOK_OR_ASSIGN] = "|=", [TOK_EQ] = "==", [TOK_NEQ] = "!=", [TOK_LT] = "<", [TOK_LEQ] = "<=", [TOK_GT] = ">", [TOK_GEQ] = ">=", [TOK_NOT] = "!", [TOK_BITNOT] = "~", [TOK_BITAND] = "&", [TOK_BITOR] = "|", [TOK_BITXOR] = "^", [TOK_AND] = "&&", [TOK_OR] = "||", [TOK_LSHIFT] = "<<", [TOK_RSHIFT] = ">>", };