summaryrefslogtreecommitdiff
path: root/userland/minibox/utilities/sh/ast.h
diff options
context:
space:
mode:
Diffstat (limited to 'userland/minibox/utilities/sh/ast.h')
-rw-r--r--userland/minibox/utilities/sh/ast.h36
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