-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoken.h
More file actions
98 lines (78 loc) · 2.33 KB
/
token.h
File metadata and controls
98 lines (78 loc) · 2.33 KB
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
92
93
94
95
96
97
98
#ifndef BRD_TOKEN_H
#define BRD_TOKEN_H
typedef char brd_token_t;
enum brd_token {
/* literals */
BRD_TOK_NUM, /* has arg: long double */
BRD_TOK_STR, /* has arg: string */
BRD_TOK_VAR, /* has arg: string */
BRD_TOK_TRUE,
BRD_TOK_FALSE,
BRD_TOK_UNIT,
/* grammatical stuff */
BRD_TOK_LPAREN,
BRD_TOK_RPAREN,
BRD_TOK_LBRACKET, /* [ ] */
BRD_TOK_RBRACKET,
BRD_TOK_LBRACE, /* { } */
BRD_TOK_RBRACE,
BRD_TOK_COLON,
BRD_TOK_NEWLINE,
BRD_TOK_EOF,
/* arithmetic */
// NOTE: do not put anything between plus and concat
// must match with ast.h here
BRD_TOK_PLUS,
BRD_TOK_MINUS,
BRD_TOK_MUL,
BRD_TOK_DIV,
BRD_TOK_IDIV,
BRD_TOK_MOD,
BRD_TOK_POW,
BRD_TOK_CONCAT,
/* comp */
BRD_TOK_LT,
BRD_TOK_LEQ,
BRD_TOK_GT,
BRD_TOK_GEQ,
BRD_TOK_EQ,
BRD_TOK_NEQ,
/* let's use = for settings and equality, what could go wrong */
/* boolean */
BRD_TOK_AND,
BRD_TOK_OR,
BRD_TOK_NOT,
BRD_TOK_BUILTIN,
BRD_TOK_COMMA,
BRD_TOK_BEGIN,
BRD_TOK_END,
BRD_TOK_IF,
BRD_TOK_ELIF,
BRD_TOK_ELSE,
BRD_TOK_THEN,
BRD_TOK_FUNC,
BRD_TOK_FOR,
BRD_TOK_WHILE,
BRD_TOK_DO,
BRD_TOK_FIELD,
BRD_TOK_ACC_OBJ,
BRD_TOK_SUBCLASS,
BRD_TOK_CONSTRUCTOR,
/* keywords */
BRD_TOK_SET,
};
struct brd_token_list {
brd_token_t *start, *data, *end;
size_t capacity;
};
void brd_token_list_init(struct brd_token_list *list);
void brd_token_list_destroy(struct brd_token_list *list);
enum brd_token brd_token_list_peek(struct brd_token_list *list);
enum brd_token brd_token_list_pop_token(struct brd_token_list *list);
long double brd_token_list_pop_num(struct brd_token_list *list);
char *brd_token_list_pop_string(struct brd_token_list *list);
void brd_token_list_add_token(struct brd_token_list *list, enum brd_token tok);
void brd_token_list_add_num(struct brd_token_list *list, long double num);
void brd_token_list_add_string(struct brd_token_list *list, const char *string);
int brd_token_list_tokenize(struct brd_token_list *list, char *string);
#endif