common.h (788B)
1 #pragma once 2 3 #include <stdbool.h> 4 #include <stddef.h> 5 6 typedef enum TokenType { 7 TERMINUS = 4, 8 IDENT, 9 KEYWORD, 10 SYMBOL, 11 PLUS, 12 MIN, 13 STAR, 14 SLASH, 15 BACKSLASH, 16 PERCENT, 17 LBRACE, 18 RBRACE, 19 LPAREN, 20 RPAREN, 21 EQ_EQ, 22 BANG_EQ, 23 EQ_GT, 24 LT_EQ, 25 LT_DASH, 26 DASH_GT, 27 EQ, 28 BANG, 29 NAMESPACE 30 } TokenType; 31 32 typedef enum Keyword { IF = 130, ELSE, WHILE, OPT, LAZY, MATCH, DEF, FOR, EACH, SOME, NONE, OK, ERR, IN, IS, CAST } Keyword; 33 34 typedef struct Token { 35 TokenType type; 36 union Value { 37 char* as_string; 38 char as_char; 39 size_t as_int; 40 bool as_bool; 41 } value; 42 const char* path; 43 const char* filename; 44 size_t line; 45 size_t col; 46 } Token; 47 48 typedef struct Lexer { 49 const char* code; 50 const char* path; 51 const char* filename; 52 size_t pos; 53 Token* tokens; 54 size_t count; 55 size_t cap; 56 } Lexer;