diff options
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 |