kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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