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
82
|
#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);
bool lexer_eof();
#endif
|