87 lines
1.6 KiB
C
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
|