clox/src/tokens.h
2024-12-11 14:16:44 +01:00

87 lines
1.6 KiB
C

#ifndef TOKENS_H
#define TOKENS_H
typedef enum {
LEFT_PAREN,
RIGHT_PAREN,
LEFT_BRACE,
RIGHT_BRACE,
COMMA,
DOT,
MINUS,
PLUS,
SEMICOLON,
SLASH,
STAR,
BANG,
BANG_EQUAL,
EQUAL,
EQUAL_EQUAL,
GREATER,
GREATER_EQUAL,
LESS,
LESS_EQUAL,
IDENTIFIER,
STRING,
NUMBER,
AND,
CLASS,
ELSE,
FALSE,
FUN,
FOR,
IF,
NIL,
OR,
PRINT,
RETURN,
SUPER,
THIS,
TRUE,
VAR,
WHILE,
END_OF_FILE,
ERROR
} TokenType;
static inline const char *token_name(TokenType type) {
static const char *tokens[] = {
"LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACE", "RIGHT_BRACE", "COMMA",
"DOT", "MINUS", "PLUS", "SEMICOLON", "SLASH",
"STAR", "BANG", "BANG_EQUAL", "EQUAL", "EQUAL_EQUAL",
"GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "IDENTIFIER",
"STRING", "NUMBER", "AND", "CLASS", "ELSE",
"FALSE", "FUN", "FOR", "IF", "NIL",
"OR", "PRINT", "RETURN", "SUPER", "THIS",
"TRUE", "VAR", "WHILE", "END_OF_FILE", "ERROR"};
return tokens[type];
}
typedef struct {
TokenType type;
char *lexeme;
void *literal;
int line;
} Token;
typedef struct TokenList {
Token **tokens;
int size;
int capacity;
} TokenList;
Token *newToken();
void tokenlist_init(TokenList *list);
void tokenlist_add(TokenList *list, Token *value);
Token *tokenlist_get(TokenList *list, int index);
void tokenlist_print(TokenList *tokenlist);
void tokenlist_free(TokenList *list);
Token *tokenlist_last(TokenList *list);
#endif