/* ** \file parse.c ** \brief Parser */ #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 *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; }