aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-06-15 13:12:34 +0200
committerCharles <sircharlesaze@gmail.com>2020-06-15 13:12:34 +0200
commitb8623ff168880845c745da62f7e9a840f0541809 (patch)
tree23ca8f41c6bdeb5f4fb3a229ee03a7f76c931eb0
parent11a719bab26b3ccccbd219decab2d0cf77021004 (diff)
parenta7dae7d30b7087bcd9972792a2ee1248e081cfce (diff)
downloadminishell-b8623ff168880845c745da62f7e9a840f0541809.tar.gz
minishell-b8623ff168880845c745da62f7e9a840f0541809.tar.bz2
minishell-b8623ff168880845c745da62f7e9a840f0541809.zip
Merge branch 'parser'
-rw-r--r--include/ast.h1
-rw-r--r--include/lexer.h2
-rw-r--r--include/parser.h11
-rw-r--r--src/ast.c5
-rw-r--r--src/lexer/lexer.c12
-rw-r--r--src/main.c244
-rwxr-xr-xsrc/parse/cmd_parse.c31
-rwxr-xr-x[-rw-r--r--]src/parse/parse.c55
-rwxr-xr-xsrc/parse/redir_parse.c27
9 files changed, 264 insertions, 124 deletions
diff --git a/include/ast.h b/include/ast.h
index c508bd9..bcb5e11 100644
--- a/include/ast.h
+++ b/include/ast.h
@@ -32,6 +32,7 @@ struct s_ast;
** \param sep Type of separator
*/
+
typedef struct s_line
{
struct s_ast *left;
diff --git a/include/lexer.h b/include/lexer.h
index 3acffb0..5886035 100644
--- a/include/lexer.h
+++ b/include/lexer.h
@@ -23,7 +23,7 @@ enum e_token_tag
TAG_STICK = 1 << 12,
TAG_IS_STR = TAG_STR | TAG_STR_SINGLE | TAG_STR_DOUBLE,
- TAG_IS_REDIR = TAG_REDIR_IN | TAG_REDIR_OUT | TAG_REDIR_APPEND,
+ TAG_IS_REDIR = TAG_REDIR_IN | TAG_REDIR_OUT | TAG_REDIR_APPEND,
};
typedef struct
diff --git a/include/parser.h b/include/parser.h
index 80d039b..2e6bae1 100644
--- a/include/parser.h
+++ b/include/parser.h
@@ -34,15 +34,14 @@
*/
/*
-** lexer.c
-*/
-
-// char **lexer(char *input);
-
-/*
** parse.c
*/
t_ret *parse(t_ftlst *input);
+t_ast *parse_cmd(t_ast *ast, t_ftlst *ret);
+t_ast *parse_redir(t_ast *ast, t_ftlst *rest);
+
+int parse_cmd_str_true_false(enum e_token_tag tag);
+int parse_redir_true_false(enum e_token_tag tag);
#endif
diff --git a/src/ast.c b/src/ast.c
index 1f96b8e..1a5f7eb 100644
--- a/src/ast.c
+++ b/src/ast.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:05:42 by charles #+# #+# */
-/* Updated: 2020/06/14 20:22:26 by charles ### ########.fr */
+/* Updated: 2020/06/15 13:01:20 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -48,7 +48,10 @@ void ast_destroy(t_ast *ast)
return ;
ft_lstdestroy(&ast->cmd_argv, (void (*)(void*))token_destroy);
if (ast->tag == AST_CMD)
+ {
+ ft_lstdestroy(&ast->cmd_argv, (void (*)(void*))token_destroy);
ft_lstdestroy(&ast->redirs, (void (*)(void*))token_destroy);
+ }
else if (ast->tag == AST_LINE)
{
ast_destroy(ast->line.left);
diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c
index 29cea9c..079d77d 100644
--- a/src/lexer/lexer.c
+++ b/src/lexer/lexer.c
@@ -109,7 +109,7 @@ enum e_token_tag token_str_or_cote(t_token *lst_token)
{
if(lst_token->content[i] == '\'')
{
- lst_token->tag = TAG_STR_SINGLE;
+ return (lst_token->tag = TAG_STR_SINGLE);
return(token_verif_stick(lst_token));
}
if(lst_token->content[i] == '"')
@@ -132,11 +132,12 @@ t_token *push_token_enum_and_trim(t_token *lst_token)
enum e_token_tag tk;
tk = ret_token(lst_token->content, 0);
+
if (tk == 0)
- {
lst_token->tag = token_str_or_cote(lst_token);
- }
- /* printf("%s-, %d\n",lst_token->content, (int)lst_token->tag); */
+ else
+ lst_token->tag = tk;
+ //printf("%s-, %d\n",lst_token->content, lst_token->tag);
return (lst_token);
}
@@ -173,6 +174,5 @@ t_ftlst *lexer(char *input)
return(0);
*lst = create_token_list(input, lst);
/* i = ft_lstsize(*lst); */
- free(lst);
- return (0);
+ return (*lst);
}
diff --git a/src/main.c b/src/main.c
index 192a4b8..8fa91b3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */
-/* Updated: 2020/06/15 11:19:23 by charles ### ########.fr */
+/* Updated: 2020/06/15 13:12:21 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -17,136 +17,164 @@
#include "minishell.h"
#include "ast.h"
-/* #include "lexer.h" */
-/* #include "parser.h" */
+#include "lexer.h"
+#include "parser.h"
#include "eval.h"
int main(int argc, char **argv, char **envp)
{
- (void)argc;
- (void)argv;
- /* (void)envp; */
t_path path;
t_env env;
- /* char *line; */
- /* int ret; */
+
env = env_from_array(envp);
path = path_update(NULL, env_search(env, "PATH"));
- /* */
- /* t_ast *ast; */
- /* t_line line; */
- /* t_cmd cmd; */
- /* t_eval_state state; */
- /* */
- /* cmd.argv = ft_split("ls -l", ' '); */
- /* cmd.in = NULL; */
- /* cmd.out = NULL; */
- /* cmd.is_append = false; */
- /* */
- /* line.left = ast_new(TAG_CMD, &cmd); */
- /* line.right = NULL; */
- /* line.sep = SEP_END; */
- /* ast = ast_new(TAG_LINE, &line); */
- /* printf("%p\n", ast); */
- /* printf("%d\n", ast->tag); */
- /* printf("%p\n", ast->data.line.left); */
- /* printf("%p\n", ast->data.line.right); */
- /* printf("%d\n", ast->data.line.left->tag); */
- /* printf("%p\n", ast->data.line.left->data.cmd.argv); */
- /* printf("%s\n", ast->data.line.left->data.cmd.argv[0]); */
- /* printf("%s\n", ast->data.line.left->data.cmd.argv[1]); */
- /* state.pipe_in[0] = -1; */
- /* state.pipe_in[1] = -1; */
- /* state.pipe_out[0] = -1; */
- /* state.pipe_out[1] = -1; */
- /* state.path = path; */
- /* state.env = env; */
- /* t_io_frame frame; */
- /* io_frame_init(&frame); */
- /* printf("ret: %d %s\n", eval(&frame,&state, ast), strerror(errno)); */
- /* char buf[2048]; */
- /* printf("%s\n", getcwd(buf, 2048)); */
- /* builtin_env(NULL, state.env); */
- /* ast_destroy(ast); */
- /* while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) */
- /* { */
- /* if (eval(parse(line)) == -1) */
- /* continue ; // and display error */
- /* free(line); */
- /* } */
- /* free(line); */
- /* ms_glob("src#<{(|"); */
- /* char *j = ms_glob("|)}>#*.c"); */
- /* printf("%s\n", j); */
- /* free(j); */
-
- t_ftlst *args = NULL;
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "echo"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "bonjour"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "je"))); */
-
- ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "cat")));
- ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-e")));
-
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "|)}>#*.c"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src#<{(|.c include#<{(|.h"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
- /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); */
-
- t_ftlst *redirs = NULL;
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_IN, NULL)));
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour")));
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL)));
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo")));
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL)));
- ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1")));
- t_ast *ast = ast_new(AST_CMD);
- ast->cmd_argv = args;
- ast->redirs = redirs;
+ if (argc == 3 && ft_strcmp(argv[1], "-c") == 0)
+ {
+ t_ftlst *lex_out = lexer(argv[2]);
- printf("eval %d\n", eval_cmd(env, path, ast));
- ast_destroy(ast);
+ t_ret *parser_out = parse(lex_out);
+ int eval_out = eval_cmd(env, path, parser_out->ast);
+ (void)eval_out;
+ }
- /* char **as = preprocess(l, env); */
- /* printf("%p\n", as); */
- /* printf("%p\n", *as); */
- /* char **tmp = as; */
- /* while (*as != NULL) */
- /* puts(*as++); */
- /* ft_split_destroy(tmp); */
ft_htdestroy(path, free);
ft_vecdestroy(env, free);
return (0);
}
+/* int main(int argc, char **argv, char **envp) */
+/* { */
+/* (void)argc; */
+/* (void)argv; */
+/* #<{(| (void)envp; |)}># */
+/* t_path path; */
+/* t_env env; */
+/* #<{(| char *line; |)}># */
+/* #<{(| int ret; |)}># */
+/* env = env_from_array(envp); */
+/* path = path_update(NULL, env_search(env, "PATH")); */
+/* #<{(| |)}># */
+/* #<{(| t_ast *ast; |)}># */
+/* #<{(| t_line line; |)}># */
+/* #<{(| t_cmd cmd; |)}># */
+/* #<{(| t_eval_state state; |)}># */
+/* #<{(| |)}># */
+/* #<{(| cmd.argv = ft_split("ls -l", ' '); |)}># */
+/* #<{(| cmd.in = NULL; |)}># */
+/* #<{(| cmd.out = NULL; |)}># */
+/* #<{(| cmd.is_append = false; |)}># */
+/* #<{(| |)}># */
+/* #<{(| line.left = ast_new(TAG_CMD, &cmd); |)}># */
+/* #<{(| line.right = NULL; |)}># */
+/* #<{(| line.sep = SEP_END; |)}># */
+/* #<{(| ast = ast_new(TAG_LINE, &line); |)}># */
+/* #<{(| printf("%p\n", ast); |)}># */
+/* #<{(| printf("%d\n", ast->tag); |)}># */
+/* #<{(| printf("%p\n", ast->data.line.left); |)}># */
+/* #<{(| printf("%p\n", ast->data.line.right); |)}># */
+/* #<{(| printf("%d\n", ast->data.line.left->tag); |)}># */
+/* #<{(| printf("%p\n", ast->data.line.left->data.cmd.argv); |)}># */
+/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[0]); |)}># */
+/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[1]); |)}># */
+/* #<{(| state.pipe_in[0] = -1; |)}># */
+/* #<{(| state.pipe_in[1] = -1; |)}># */
+/* #<{(| state.pipe_out[0] = -1; |)}># */
+/* #<{(| state.pipe_out[1] = -1; |)}># */
+/* #<{(| state.path = path; |)}># */
+/* #<{(| state.env = env; |)}># */
+/* #<{(| t_io_frame frame; |)}># */
+/* #<{(| io_frame_init(&frame); |)}># */
+/* #<{(| printf("ret: %d %s\n", eval(&frame,&state, ast), strerror(errno)); |)}># */
+/* #<{(| char buf[2048]; |)}># */
+/* #<{(| printf("%s\n", getcwd(buf, 2048)); |)}># */
+/* #<{(| builtin_env(NULL, state.env); |)}># */
+/* #<{(| ast_destroy(ast); |)}># */
+/* #<{(| while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) |)}># */
+/* #<{(| { |)}># */
+/* #<{(| if (eval(parse(line)) == -1) |)}># */
+/* #<{(| continue ; // and display error |)}># */
+/* #<{(| free(line); |)}># */
+/* #<{(| } |)}># */
+/* #<{(| free(line); |)}># */
+/* #<{(| ms_glob("src#<{(|"); |)}># */
+/* #<{(| char *j = ms_glob("|)}>#*.c"); |)}># */
+/* #<{(| printf("%s\n", j); |)}># */
+/* #<{(| free(j); |)}># */
+/* */
+/* t_ftlst *args = NULL; */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "echo"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "bonjour"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "je"))); |)}># */
+/* */
+/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "cat"))); */
+/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-e"))); */
+/* */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "|)}>#*.c"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src#<{(|.c include#<{(|.h"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
+/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); |)}># */
+/* */
+/* t_ftlst *redirs = NULL; */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_IN, NULL))); */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour"))); */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL))); */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo"))); */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL))); */
+/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1"))); */
+/* */
+/* t_ast *ast = ast_new(AST_CMD); */
+/* ast->cmd_argv = args; */
+/* ast->redirs = redirs; */
+/* */
+/* printf("eval %d\n", eval_cmd(env, path, ast)); */
+/* ast_destroy(ast); */
+/* */
+/* */
+/* #<{(| char **as = preprocess(l, env); |)}># */
+/* #<{(| printf("%p\n", as); |)}># */
+/* #<{(| printf("%p\n", *as); |)}># */
+/* #<{(| char **tmp = as; |)}># */
+/* #<{(| while (*as != NULL) |)}># */
+/* #<{(| puts(*as++); |)}># */
+/* #<{(| ft_split_destroy(tmp); |)}># */
+/* ft_htdestroy(path, free); */
+/* ft_vecdestroy(env, free); */
+/* return (0); */
+/* } */
+
/////////////////////////////////////////////////////////////////////////////////////////
// lexer main
/////////////////////////////////////////////////////////////////////////////////////////
-/* int main(void) */
+/* int main(int argc, char **argv) */
/* { */
-/* char *input; */
+/* char *input; */
+/* t_ftlst *lst; */
/* */
-/* if (!(input = malloc(sizeof(char) * ft_strlen(argv[1]) + 1))) */
-/* return(0); */
-/* ft_strlcpy(input, argv[1], ft_strlen(argv[1]) + 1); */
+/* if (argv[1] == NULL) */
+/* return (0); */
+/* if (!(input = malloc(sizeof(char) * ft_strlen(argv[1]) + 1))) */
+/* return(0); */
+/* ft_strlcpy(input, argv[1], ft_strlen(argv[1]) + 1); */
/* */
-/* lexer(input); */
+/* lst = lexer(input); */
+/* parse(lst); */
+/* free(input); */
/* exit(0); */
-/* return (0); */
+/* return (0); */
/* } */
diff --git a/src/parse/cmd_parse.c b/src/parse/cmd_parse.c
new file mode 100755
index 0000000..562cea3
--- /dev/null
+++ b/src/parse/cmd_parse.c
@@ -0,0 +1,31 @@
+
+
+#include "parser.h"
+
+
+int parse_cmd_str_true_false(enum e_token_tag tag)
+{
+ if (tag & TAG_STR || tag & TAG_STR_DOUBLE || tag & TAG_STR_SINGLE)
+ return (1);
+ return(0);
+}
+
+
+t_ast *parse_cmd(t_ast *ast, t_ftlst *rest)
+{
+ t_ftlst *new;
+
+ new = rest->data;
+ if (ast == NULL)
+ {
+
+ ast = ast_new(AST_CMD);
+ ast->cmd_argv = ft_lstnew((t_token *)rest->data);
+ }
+ else
+ {
+ new = ft_lstnew((t_token *)rest->data);
+ ft_lstpush_back(&ast->cmd_argv, (void *)new);
+ }
+ return (ast);
+}
diff --git a/src/parse/parse.c b/src/parse/parse.c
index 92797c8..a0d981f 100644..100755
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -4,16 +4,67 @@
*/
#include "parser.h"
+#include "lexer.h"
// stdio.h est deja include dans minishell.h temporairement
// (comme ca on doit le retirer a un seul endroit a la fin)
-t_ret *parse(t_ftlst *input)
+
+t_ret *parse(t_ftlst *input)
{
- t_ret *ret;
+ t_ret *ret;
+ /* t_ret *first; */
+ enum e_token_tag tag;
+ int i = 0;
if(!(ret = malloc(sizeof(t_ret) * 1)))
return(NULL);
ret->rest = input;
+ ret->ast = NULL;
+ ret->unexpected = NULL;
+ /* first = ret; */
+
+ while (ret->rest != NULL)
+ {
+ tag = ((t_token *)ret->rest->data)->tag;
+ if (parse_cmd_str_true_false(tag))
+ {
+ ret->ast = parse_cmd(ret->ast, ret->rest);
+ }
+ else if (parse_redir_true_false(tag))
+ {
+ ret->ast = parse_redir(ret->ast, ret->rest);
+ ret->rest = ret->rest->next;
+ if (ret->rest != NULL)
+ ret->ast = parse_redir(ret->ast, ret->rest);
+ /* printf("%s\n","ici" ); */
+ ret->rest = ret->rest->next;
+ if (ret->rest != NULL)
+ {
+ tag = ((t_token *)ret->rest->data)->tag;
+ if(tag & TAG_IS_STR & TAG_STICK)
+ ret->ast = parse_redir(ret->ast, ret->rest);
+ }
+ }
+ if (ret->rest != NULL)
+ ret->rest = ret->rest->next;
+ }
+ while(ret->ast->cmd_argv != NULL)
+ {
+ /* printf("%s\n", ((t_token *)ret->ast->cmd_argv->data)->content); */
+ ret->ast->cmd_argv = ret->ast->cmd_argv->next;
+ }
+ while(ret->ast->redirs != NULL)
+ {
+ if (i == 0)
+ {
+ /* printf("redir"); */
+ i++;
+ }
+ /* printf("%s\n", ((t_token *)ret->ast->redirs->data)->content); */
+ ret->ast->redirs = ret->ast->redirs->next;
+ }
+ /* ast_destroy(ret->ast); */
+ /* ft_lstdestroy(&ret->rest, (void (*)(void*))token_destroy); */
return NULL;
}
diff --git a/src/parse/redir_parse.c b/src/parse/redir_parse.c
new file mode 100755
index 0000000..bdcb3ab
--- /dev/null
+++ b/src/parse/redir_parse.c
@@ -0,0 +1,27 @@
+
+#include "parser.h"
+
+int parse_redir_true_false(enum e_token_tag tag)
+{
+ if (tag & TAG_IS_REDIR)
+ return (1);
+ return (0);
+}
+
+t_ast *parse_redir(t_ast *ast, t_ftlst *rest)
+{
+ t_ftlst *new;
+
+ new = rest->data;
+ if (ast == NULL)
+ {
+ ast = ast_new(AST_CMD);
+ ast->redirs = ft_lstnew((t_token *)rest->data);
+ }
+ else
+ {
+ new = ft_lstnew((t_token *)rest->data);
+ ft_lstpush_back(&ast->redirs, (void *)new);
+ }
+ return (ast);
+}