lexer.h (1506B)
1 #ifndef KIT_TOY_LEXER_H 2 #define KIT_TOY_LEXER_H 3 4 #include <kit/core.h> 5 #include <stddef.h> 6 #include <stdint.h> 7 8 typedef enum ToyTokenKind { 9 TOK_EOF = 0, 10 TOK_FN, 11 TOK_LET, 12 TOK_VAR, 13 TOK_IF, 14 TOK_ELSE, 15 TOK_WHILE, 16 TOK_SWITCH, 17 TOK_DEFAULT, 18 TOK_LABEL, 19 TOK_GOTO, 20 TOK_WITHIN, 21 TOK_BREAK, 22 TOK_CONTINUE, 23 TOK_RETURN, 24 TOK_TAIL, 25 TOK_MUSTTAIL, 26 TOK_TYPE, 27 TOK_PUB, 28 TOK_EXTERN, 29 TOK_ALIAS, 30 TOK_RECORD, 31 TOK_TUPLE, 32 TOK_ENUM, 33 TOK_AS, 34 TOK_AND, 35 TOK_OR, 36 TOK_INT, 37 TOK_IDENT, 38 TOK_NUMBER, 39 TOK_STRING, 40 TOK_LPAREN, 41 TOK_RPAREN, 42 TOK_LBRACE, 43 TOK_RBRACE, 44 TOK_LBRACKET, 45 TOK_RBRACKET, 46 TOK_COMMA, 47 TOK_SEMI, 48 TOK_COLON, 49 TOK_EQ, 50 TOK_PLUS, 51 TOK_MINUS, 52 TOK_STAR, 53 TOK_SLASH, 54 TOK_PERCENT, 55 TOK_LT, 56 TOK_GT, 57 TOK_LE, 58 TOK_GE, 59 TOK_EQEQ, 60 TOK_NE, 61 TOK_ANDAND, 62 TOK_PIPEPIPE, 63 TOK_AMPERSAND, 64 TOK_PIPE, 65 TOK_CARET, 66 TOK_TILDE, 67 TOK_SHL, 68 TOK_SHR, 69 TOK_BANG, 70 TOK_DOT, 71 TOK_DOTSTAR, 72 TOK_DOTDOTDOT, 73 TOK_AT, 74 } ToyTokenKind; 75 76 typedef struct ToyToken { 77 ToyTokenKind kind; 78 KitSrcLoc loc; 79 const uint8_t* text; 80 size_t text_len; 81 int64_t int_value; 82 double float_value; 83 int is_float; 84 } ToyToken; 85 86 typedef struct ToyLexer { 87 const uint8_t* cur; 88 const uint8_t* end; 89 const uint8_t* bol; 90 uint32_t file_id; 91 uint32_t line; 92 } ToyLexer; 93 94 void toy_lexer_init(ToyLexer* lex, const uint8_t* data, size_t len, 95 uint32_t file_id); 96 ToyToken toy_lexer_next(ToyLexer* lex); 97 ToyToken toy_lexer_peek(const ToyLexer* lex); 98 99 #endif