#ifndef CMONKEY_TOKEN_H #define CMONKEY_TOKEN_H #include "slice.h" enum token_type { TOKEN_ILLEGAL, TOKEN_EOF, /* Identifiers/Literals */ TOKEN_IDENT, TOKEN_INT, /* Operators */ TOKEN_ASSIGN, TOKEN_PLUS, TOKEN_MINUS, TOKEN_BANG, TOKEN_ASTERISK, TOKEN_SLASH, TOKEN_LT, TOKEN_GT, TOKEN_EQ, TOKEN_NOTEQ, /* Delimiters */ TOKEN_COMMA, TOKEN_SEMICOLON, TOKEN_LPAREN, TOKEN_RPAREN, TOKEN_LBRACE, TOKEN_RBRACE, /* Keywords */ TOKEN_FUNC, TOKEN_LET, TOKEN_TRUE, TOKEN_FALSE, TOKEN_IF, TOKEN_ELSE, TOKEN_RETURN, }; struct token { enum token_type type; struct slice literal; }; void token_init_keywords(void); enum token_type token_lookup_ident(const struct slice *ident); inline const char *token_type_print(enum token_type); char *token_sprint(struct token *, char *str); void token_free_keywords(void); #endif