#ifndef TOKEN_H
#define TOKEN_H

typedef enum {
    T_VOID,
    T_INT,
    T_BOOL,
    T_FLOAT,
    T_CONST_INT,
    T_CONST_FLOAT,
    T_TEXT,
    T_NULL,
    T_TRUE,
    T_FALSE,
    T_ADD,
    T_SUB,
    T_MUL,
    T_DIV,
    T_MOD,
    T_LESS,
    T_LESS_EQUAL,
    T_GREATER,
    T_GREATER_EQUAL,
    T_EQUAL,
    T_NOT_EQUAL,
    T_NOT,
    T_AND,
    T_OR,
    T_BIT_NOT,
    T_BIT_AND,
    T_BIT_OR,
    T_BIT_XOR,
    T_LEFT_SHIFT,
    T_RIGHT_SHIFT,
    T_SET,
    T_ADD_SET,
    T_SUB_SET,
    T_MUL_SET,
    T_DIV_SET,
    T_MOD_SET,
    T_BIT_AND_SET,
    T_BIT_OR_SET,
    T_BIT_XOR_SET,
    T_LEFT_SHIFT_SET,
    T_RIGHT_SHIFT_SET,
    T_INCREMENT,
    T_DECREMENT,
    T_LITERAL,
    T_PRINT,
    T_IF,
    T_ELSE,
    T_WHILE,
    T_FOR,
    T_BREAK,
    T_CONTINUE,
    T_RETURN,
    T_STRUCT,
    T_COMMA,
    T_SEMICOLON,
    T_OPEN_BRACKET,
    T_CLOSE_BRACKET,
    T_OPEN_CURVED_BRACKET,
    T_CLOSE_CURVED_BRACKET,
    T_POINT,
    T_ARROW,
    T_OPEN_SQUARE_BRACKET,
    T_CLOSE_SQUARE_BRACKET,
    T_NEW,
    T_DELETE,
    T_LENGTH,
    T_END
} Token;

const char* tGetName(Token token);
Token tFromName(const char* name);

#endif