4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
0
|
// Copyright (C) 2023, Jakob Wakeling |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
1
|
// All rights reserved. |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
2
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
3
|
#ifndef ESH_PARSE_H_EQMN0ZSE |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
4
|
#define ESH_PARSE_H_EQMN0ZSE |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
5
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
6
|
#include "lex.h" |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
7
|
#include "util/stack.h" |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
8
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
9
|
/* Remember to update ast_ks in parse.c */ |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
10
|
typedef enum { |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
11
|
AK_VOID, AK_COMM, AK_PIPE, |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
12
|
} ast_k; |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
13
|
|
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
14
|
/* k : Kind, s : String, lc : Left Child, rc : Right Child, c : Children */ |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
15
|
typedef struct ast_s { |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
16
|
ast_k k; char *s; struct ast_s *lc, *rc; stack c; |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
17
|
struct { char *s; } rin; /* stdin redirect */ |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
18
|
struct { char *s; bool app; } rout; /* stdout redirect */ |
1e336bf |
Jakob Wakeling |
2023-12-28 13:35:12 |
19
|
struct { char *s; bool app; } rerr; /* stderr redirect */ |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
20
|
} ast; |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
21
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
22
|
extern char *ast_ks[]; |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
23
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
24
|
extern ast *ast_init(ast_k kind); |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
25
|
extern void ast_free(ast *a); |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
26
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
27
|
extern ast *parse(lex *l); |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
28
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
29
|
extern void ast_debug(ast *a, u64 indent); |
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
30
|
|
4681f43 |
Jakob Wakeling |
2023-12-27 16:22:43 |
31
|
#endif // ESH_PARSE_H_EQMN0ZSE |
|
|
|
32
|
|