kit

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

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