summaryrefslogtreecommitdiff
path: root/lexer.h
blob: aefca82c8b8b25b7275faf6f51e35ddf1b13b399 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef LEXER_H
#define LEXER_H

enum token_type {
    TK_NOT_FOUND,
    TK_IDENT,
    TK_INT_LIT,
    TK_FLOAT_LIT,
    TK_CHAR_LIT,
    TK_STR_LIT,
    TK_HASHTAG,
    TK_LPAREN,
    TK_RPAREN,
    TK_LCURLY,
    TK_RCURLY,
    TK_LSQUARE,
    TK_RSQUARE,
    TK_COLON,
    TK_SEMI,
    TK_COMMA,
    TK_DOT,
    TK_QMARK,
    TK_NOT,
    TK_NEQ,
    TK_XOR,
    TK_XEQ,
    TK_AMP,
    TK_LOG_AND,
    TK_AND_EQ,
    TK_STAR,
    TK_MUL_EQ,
    TK_NEG,
    TK_NEG_EQ,
    TK_ARROW,
    TK_ASSIGN,
    TK_TEST_EQ,
    TK_PLUS,
    TK_PLUS_EQ,
    TK_BSLASH,
    TK_PIPE,
    TK_LOG_PIPE,
    TK_PIPE_EQ,
    TK_DIV,
    TK_DIV_EQ,
    TK_MOD,
    TK_MOD_EQ,
    TK_LT,
    TK_GT,
    TK_LEQ,
    TK_GEQ,
    TK_SHR,
    TK_SHR_EQ,
    TK_SHL,
    TK_SHL_EQ
};

typedef unsigned long long int_lit_t;
typedef double float_lit_t;

struct token {
    enum token_type type;
    union {
        char* ident;
        int_lit_t int_lit;
        float_lit_t float_lit;
        char char_lit;
        char* str_lit;
        void* unused;
    } data;

    const char* PATH;
    unsigned long LINE;
    unsigned long COL;
};

void lexer_load(const char* path);
void lexer_close();
bool lexer_peek(struct token* p_token);
bool lexer_pop(struct token* p_token);

#endif