8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
0
|
// Copyright (C) 2023, Jakob Wakeling |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
1
|
// All rights reserved. |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
2
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
3
|
#ifndef ESH_LEX_H_Q5L6L9EM |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
4
|
#define ESH_LEX_H_Q5L6L9EM |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
5
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
6
|
#include "util/util.h" |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
7
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
8
|
/* Remember to update tok_ks in lex.c */ |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
9
|
typedef enum { |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
10
|
TK_VOID, TK_EOF, TK_WORD, TK_END, |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
11
|
TK_PIPE, TK_RIN, TK_ROUT, TK_RAPP, |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
12
|
} tok_k; |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
13
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
14
|
/* k : Kind, s : String */ |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
15
|
typedef struct { tok_k k; char *s; } tok; |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
16
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
17
|
/* s : Start of File, p : Current Character, q : End of File */ |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
18
|
typedef struct { char *s, *p, *q; tok t; } lex; |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
19
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
20
|
extern char *tok_ks[]; |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
21
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
22
|
extern lex lex_init(char *src, u64 len); |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
23
|
extern tok lex_peek(lex *l); |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
24
|
extern tok lex_next(lex *l); |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
25
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
26
|
extern void lex_debug(lex *l); |
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
27
|
|
8344335 |
Jakob Wakeling |
2023-12-27 15:41:39 |
28
|
#endif // ESH_LEX_H_Q5L6L9EM |
|
|
|
29
|
|