aboutsummaryrefslogtreecommitdiff
path: root/test_mini/parse/parse.h
diff options
context:
space:
mode:
Diffstat (limited to 'test_mini/parse/parse.h')
-rw-r--r--test_mini/parse/parse.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/test_mini/parse/parse.h b/test_mini/parse/parse.h
new file mode 100644
index 0000000..b5fe817
--- /dev/null
+++ b/test_mini/parse/parse.h
@@ -0,0 +1,89 @@
+
+
+# include <stdlib.h>
+# include <stdlib.h>
+# include <stdbool.h>
+
+
+typedef enum e_sep
+{
+ SEP_END,
+ SEP_PIPE,
+ SEP_AND,
+ SEP_OR,
+} t_sep;
+
+struct s_ast;
+
+/*
+** \brief Line struct
+** \param left AST to the left of separator
+** \param right AST to the right of separator
+** \param sep Type of separator
+*/
+
+typedef struct s_line
+{
+ struct s_ast *left;
+ struct s_ast *right;
+ struct s_ast *parent;
+ t_sep sep;
+} t_line;
+
+/*
+** \brief Command struct
+** \param argv Array of string,
+** all arguments beginning with executable name
+** \param in STDIN redirection filename
+** \param out STDOUT redirection filename
+** \param is_append True if out redirection is append to file
+*/
+
+typedef struct s_cmd
+{
+ char *str;
+ char *in;
+ char *out;
+ bool is_append;
+} t_cmd;
+
+/*
+** \brief AST node tag (type)
+** \param TAG_CMD Command AST node
+** \param TAG_LINE Line AST node
+*/
+
+typedef enum e_ast_tag
+{
+ TAG_CMD,
+ TAG_LINE,
+} t_ast_tag;
+
+/*
+** \brief AST node struct
+** \param tag Node tag
+** \param cmd Command struct
+** \param line Line struct
+*/
+
+typedef struct s_ast
+{
+ t_ast_tag tag;
+ union
+ {
+ t_line line;
+ t_cmd cmd;
+ } ;
+} t_ast;
+
+typedef struct s_return
+{
+ t_ast *result;
+ char **rest;
+} t_return;
+
+t_return *parse_nw(char **input);
+t_return *parse(t_return *nw, char **input);
+
+/* utils*/
+int verif_part(char **input, char chr);