#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 { struct sv 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; struct sv 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