ESH

Executive Shell
git clone http://git.omkov.net/ESH
Log | Tree | Refs | README | Download

ESH/src/parse.h (33 lines, 775 B) -rw-r--r-- file download

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