diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-16 14:53:10 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-16 14:53:10 +0200 |
| commit | a1704494c323177d4c4d8cf822aa80297181c4fe (patch) | |
| tree | 0b7be225ed2f6deb39ae729b6b98bc00be830cf8 | |
| parent | b805f77cc96b1ff5482aa2ee2004bf74ebe402f0 (diff) | |
| parent | 0eb7a660c0f6eef4ae163b91791908b670dc1d5a (diff) | |
| download | minishell-a1704494c323177d4c4d8cf822aa80297181c4fe.tar.gz minishell-a1704494c323177d4c4d8cf822aa80297181c4fe.tar.bz2 minishell-a1704494c323177d4c4d8cf822aa80297181c4fe.zip | |
Merge branch 'parse_cmd' into eval
| -rw-r--r-- | .travis.yml | 2 | ||||
| m--------- | minishell_test | 0 | ||||
| -rw-r--r-- | salut | 1 | ||||
| -rw-r--r-- | src/lexer/lexer_utils.c | 6 | ||||
| -rw-r--r-- | src/lexer/trim.c | 9 | ||||
| -rw-r--r-- | src/main.c | 7 | ||||
| -rwxr-xr-x | src/parse/parse.c | 11 |
7 files changed, 22 insertions, 14 deletions
diff --git a/.travis.yml b/.travis.yml index c7b5053..2697f90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ git: submodules: true python: - - "3.5" + - "3.7" env: - LANG=en_US.UTF-8 diff --git a/minishell_test b/minishell_test -Subproject 2fadf31a822ab204503da0c37600e3e1d233c93 +Subproject b636afa67abd97c61259071922d2f4f6f34a60b @@ -1 +0,0 @@ - diff --git a/src/lexer/lexer_utils.c b/src/lexer/lexer_utils.c index c6bf54a..616c0d3 100644 --- a/src/lexer/lexer_utils.c +++ b/src/lexer/lexer_utils.c @@ -62,6 +62,8 @@ static int lex_verif_simple_cote(char *input, int i) while(input[i] != '\0') { ++i; + if(input[i] == '\\') + i+=1; if(input[i] == '\'') break; } @@ -77,7 +79,11 @@ int lexer_verif_entre_cote(char *input, int i) return(lex_verif_simple_cote(input, i)); i++; while(input[i] != '"' && (input[i] != '\0')) + { + if (input[i] == '\\') + i += 1; ++i; + } if (input[i + 1] == ' ') while(input[i + 1] == ' ') i++; diff --git a/src/lexer/trim.c b/src/lexer/trim.c index a0c7dec..6c435d5 100644 --- a/src/lexer/trim.c +++ b/src/lexer/trim.c @@ -27,10 +27,14 @@ char *del_quote(char *str) int i; char *s; - i = 1; - while(str[++i] != '\0') + i = 0; + while(str[i++] != '\0') + { + if(str[i] == '\\') + i+=2; if (str[i] == '\'' || str[i] == '"') break; + } s = ft_strsubf(str, 1, i - 1); return (s); } @@ -46,7 +50,6 @@ t_ftlst *lexe_trim_out(t_ftlst *lst) tk = lst->data; if (tk->tag & (TAG_STR_DOUBLE | TAG_STR_SINGLE)) { - //printf("%s\n",tk->content ); tk->content = del_quote(tk->content); if(lst->next == NULL) if (tk->tag & TAG_STICK) @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/06/16 13:47:30 by charles ### ########.fr */ +/* Updated: 2020/06/16 14:49:59 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,11 +40,12 @@ int main(int argc, char **argv, char **envp) if (argc == 3 && ft_strcmp(argv[1], "-c") == 0) { + //printf("%s\n", argv[2]); t_ftlst *lex_out = lexer(ft_strdup(argv[2])); - /* ft_lstiter(lex_out, token_debug); */ + //ft_lstiter(lex_out, token_debug); - t_ret *parser_out = parse(lex_out); + t_ret *parser_out = parse(lex_out); /* printf("===cmd_argv===\n"); */ /* ft_lstiter(parser_out->ast->cmd_argv, token_debug); */ diff --git a/src/parse/parse.c b/src/parse/parse.c index fe4f9a2..37192b0 100755 --- a/src/parse/parse.c +++ b/src/parse/parse.c @@ -29,26 +29,25 @@ t_ret *parse(t_ftlst *input) if (parse_cmd_str_true_false(tag)) { ret->ast = push_cmd(ret->ast, ret->rest); - if (ret->rest != NULL) - ret->rest = ret->rest->next; } else if (parse_redir_true_false(tag)) { - ret->ast = push_redir(ret->ast, ret->rest); - ret->rest = ret->rest->next; while(ret->rest != NULL) { ret->ast = push_redir(ret->ast, ret->rest); - tag = ((t_token *)ret->rest->data)->tag; if (tag & TAG_IS_STR && tag & TAG_STICK) ret->rest = ret->rest->next; + else if (tag & TAG_IS_REDIR) + ret->rest = ret->rest->next; else { - ret->rest = ret->rest->next; + //ret->rest = ret->rest->next; break; } + tag = ((t_token *)ret->rest->data)->tag; } } + ret->rest = ret->rest->next; } /* while(ret->ast->cmd_argv != NULL) */ /* { */ |
