forked from keyvank/30cc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexer.h
91 lines (83 loc) · 1.79 KB
/
lexer.h
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
83
84
85
86
87
88
89
90
91
#ifndef LEXER_H
#define LEXER_H
typedef struct typed_token_
{
int type_id;
void *data;
void (*debug)(struct typed_token_ *);
struct typed_token_ *next;
} typed_token;
typed_token *new_tkn(int tkn_id, void *data, void (*debug)(typed_token *));
void str_tkn_debug(typed_token *tkn);
typed_token *tokenize_file(char *path);
typed_token *tokenize(char *inp);
typed_token *eof_token();
#define TKN_EOF 0
#define TKN_VOID 1
#define TKN_INT 2
#define TKN_CHAR 3
#define TKN_RETURN 4
#define TKN_FOR 5
#define TKN_IF 6
#define TKN_DO 7
#define TKN_WHILE 8
#define TKN_STRUCT 9
#define TKN_ELSE 10
#define TKN_SIZEOF 11
#define TKN_TYPEDEF 12
#define TKN_GOTO 13
#define TKN_EXTERN 14
#define TKN_ASM 15
// Single letter symbols
#define TKN_L_PAREN 16
#define TKN_R_PAREN 17
#define TKN_L_BRACE 18
#define TKN_R_BRACE 19
#define TKN_L_BRACK 20
#define TKN_R_BRACK 21
#define TKN_SEMICOLON 22
#define TKN_COMMA 23
#define TKN_SHARP 24
#define TKN_ID 32
#define TKN_LIT_STR 33
#define TKN_LIT_INT 34
#define TKN_LIT_CHAR 35
#define TKN_ASSIGN 64
#define TKN_EQ 65
#define TKN_LT 66
#define TKN_GT 67
#define TKN_LTE 68
#define TKN_GTE 69
#define TKN_NOT 70
#define TKN_NEQ 71
#define TKN_PLUS 72
#define TKN_PLUSPLUS 73
#define TKN_PLUSEQ 74
#define TKN_MIN 75
#define TKN_MINMIN 76
#define TKN_MINEQ 77
#define TKN_STAR 78
#define TKN_STAREQ 79
#define TKN_DOTS 80
#define TKN_AND 81
#define TKN_ANDAND 82
#define TKN_OR 83
#define TKN_OROR 84
#define TKN_QUEST 85
#define TKN_COLON 86
#define TKN_DOT 87
#define TKN_ARROW 88
#define TKN_DIV 89
#define TKN_DIVEQ 90
#define TKN_MOD 91
#define TKN_MODEQ 92
#define TKN_OREQ 93
#define TKN_ANDEQ 94
#define TKN_BREAK 96
#define TKN_CONTINUE 97
#define TKN_SWITCH 98
#define TKN_CASE 99
#define TKN_DEFAULT 100
#define TKN_COMMENT 128
#define TKN_DIRECTIVE 129
#endif