slash

slash is a simple type-oriented programming language
Log | Files | Refs | README | LICENSE

lex.h (1544B)


      1 /*
      2  * lex.h -- lexer interface
      3  */
      4 
      5 #ifndef LEX_H
      6 #define LEX_H
      7 
      8 #include <stddef.h>
      9 #include <stdint.h>
     10 
     11 #define MAX_LEXEME_SIZE 256
     12 #define MAX_PATH_SIZE 1024
     13 
     14 enum toktype {
     15     TOK_EOF,
     16 
     17     TOK_CLASS,
     18     TOK_FC,
     19     TOK_IMPORT,
     20     TOK_AS,
     21 
     22     TOK_F32,
     23     TOK_F64,
     24     TOK_I8,
     25     TOK_I16,
     26     TOK_I32,
     27     TOK_I64,
     28     TOK_U8,
     29     TOK_U16,
     30     TOK_U32,
     31     TOK_U64,
     32 
     33     TOK_IDENT,
     34 
     35     TOK_LBRACE,
     36     TOK_RBRACE,
     37     TOK_LPAREN,
     38     TOK_RPAREN,
     39     TOK_COMMA,
     40     TOK_PERIOD,
     41 
     42     TOK_UNKNOWN
     43 };
     44 
     45 struct tok {
     46     enum toktype type;
     47     char lexeme[64];
     48 };
     49 
     50 struct keyword {
     51     const char *name;
     52     enum toktype type;
     53 };
     54 
     55 typedef enum toktype toktype_t;
     56 typedef struct tok tok_t;
     57 typedef struct keyword keyword_t;
     58 
     59 static const keyword_t kws[] = {
     60     {"import",    TOK_IMPORT},
     61     {"class",     TOK_CLASS},
     62     {"fc",        TOK_FC},
     63     {"as",        TOK_AS},
     64 
     65     {"f32",       TOK_F32},
     66     {"f64",       TOK_F64},
     67 
     68     {"i8",        TOK_I8},
     69     {"i16",       TOK_I16},
     70     {"i32",       TOK_I32},
     71     {"i64",       TOK_I64},
     72 
     73     {"u8",        TOK_U8},
     74     {"u16",       TOK_U16},
     75     {"u32",       TOK_U32},
     76     {"u64",       TOK_U64},
     77 };
     78 
     79 /* state defined in lex.c */
     80 extern const char *src;
     81 extern size_t i;
     82 
     83 toktype_t lu_kw(const char *str);
     84 
     85 int peek(void);
     86 int consume(void);
     87 
     88 void s_ws(void);
     89 void s_lc(void);
     90 void s_bc(void);
     91 
     92 void lex_init(void);
     93 
     94 tok_t id(void);
     95 tok_t nexttok(void);
     96 
     97 const char *tokname(toktype_t t);
     98 
     99 void push_token(tok_t t);
    100 tok_t pop_token(void);
    101 tok_t peek_stack(void);
    102 
    103 #endif /* LEX_H */
    104