diff options
author | Anton Kling <anton@kling.gg> | 2023-11-17 23:58:14 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-11-17 23:58:14 +0100 |
commit | 01a9392ad6051878e217bffeffd6261ccf994c42 (patch) | |
tree | 17bb2d06531c32e17396ff6978983e133b79c6df /userland/minibox/utilities/sh/ast.h | |
parent | 0c9282bb61b0d7c463045139655b3f1f1ec5422b (diff) |
Minibox: Add a somewhat improved shell
This shell actually lexes and produces a AST which makes it easier to
add features and will makes it more difficult to introduce bugs. So
basically it is just better code.
Diffstat (limited to 'userland/minibox/utilities/sh/ast.h')
-rw-r--r-- | userland/minibox/utilities/sh/ast.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/userland/minibox/utilities/sh/ast.h b/userland/minibox/utilities/sh/ast.h new file mode 100644 index 0000000..7e7aaff --- /dev/null +++ b/userland/minibox/utilities/sh/ast.h @@ -0,0 +1,36 @@ +#ifndef AST_H +#define AST_H +#include "lexer.h" + +typedef enum { + AST_VALUE_STRING, +} ast_value_type_t; + +struct AST_VALUE { + ast_value_type_t type; + union { + char *string; + }; +}; + +typedef enum { + AST_COMMAND, + AST_EXPRESSION, + AST_CONDITIONAL_AND, + AST_CONDITIONAL_NOT, +} ast_type_t; + +struct AST { + ast_type_t type; + struct AST_VALUE val; + struct AST *children; + struct AST *pipe_rhs; // in "func1 | func2" func2 is the piped rhs + int file_out_fd_to_use; + int file_out_append; + const char *file_out; // in "func1 > file.txt" file.txt is the file_out + struct AST *next; +}; + +void free_ast(struct AST *ast); +struct AST *generate_ast(struct TOKEN *token); +#endif // AST_H |