asm_lex.h (1537B)
1 #ifndef KIT_ASM_LEX_H 2 #define KIT_ASM_LEX_H 3 4 #include "core/core.h" 5 6 typedef enum AsmTokKind { 7 ASM_TOK_EOF = 0, 8 ASM_TOK_IDENT, 9 ASM_TOK_NUM, 10 ASM_TOK_FLT, 11 ASM_TOK_STR, 12 ASM_TOK_CHR, 13 ASM_TOK_PUNCT, 14 ASM_TOK_HASH, 15 ASM_TOK_HASH_HASH, 16 ASM_TOK_NEWLINE, 17 } AsmTokKind; 18 19 typedef enum AsmTokFlag { 20 ASM_TF_AT_BOL = 1u << 0, 21 ASM_TF_HAS_SPACE = 1u << 1, 22 ASM_TF_INT_U = 1u << 3, 23 ASM_TF_INT_L = 1u << 4, 24 ASM_TF_INT_LL = 1u << 5, 25 ASM_TF_FLT_F = 1u << 6, 26 ASM_TF_FLT_L = 1u << 7, 27 ASM_TF_STR_WIDE = 1u << 8, 28 ASM_TF_STR_U8 = 1u << 9, 29 ASM_TF_STR_U16 = 1u << 10, 30 ASM_TF_STR_U32 = 1u << 11, 31 ASM_TF_LITERAL_BAD = 1u << 12, 32 } AsmTokFlag; 33 34 typedef enum AsmPunct { 35 ASM_P_NONE = 0, 36 ASM_P_ARROW = 256, 37 ASM_P_INC, 38 ASM_P_DEC, 39 ASM_P_SHL, 40 ASM_P_SHR, 41 ASM_P_LE, 42 ASM_P_GE, 43 ASM_P_EQ, 44 ASM_P_NE, 45 ASM_P_AND, 46 ASM_P_OR, 47 ASM_P_ADD_ASSIGN, 48 ASM_P_SUB_ASSIGN, 49 ASM_P_MUL_ASSIGN, 50 ASM_P_DIV_ASSIGN, 51 ASM_P_MOD_ASSIGN, 52 ASM_P_AND_ASSIGN, 53 ASM_P_OR_ASSIGN, 54 ASM_P_XOR_ASSIGN, 55 ASM_P_SHL_ASSIGN, 56 ASM_P_SHR_ASSIGN, 57 ASM_P_ELLIPSIS, 58 ASM_P_HASH_HASH, 59 } AsmPunct; 60 61 typedef struct AsmTok { 62 u16 kind; 63 u16 flags; 64 SrcLoc loc; 65 Sym spelling; 66 union { 67 Sym ident; 68 Sym str; 69 u32 punct; 70 } v; 71 } AsmTok; 72 73 typedef struct AsmLexer AsmLexer; 74 75 AsmLexer* asm_lex_open_mem(Compiler*, const char* name, const char* src, 76 size_t len); 77 void asm_lex_close(AsmLexer*); 78 79 AsmTok asm_lex_next(AsmLexer*); 80 SrcLoc asm_lex_loc(const AsmLexer*); 81 u32 asm_lex_file_id(const AsmLexer*); 82 83 #endif