aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-06-16 14:53:10 +0200
committerCharles <sircharlesaze@gmail.com>2020-06-16 14:53:10 +0200
commita1704494c323177d4c4d8cf822aa80297181c4fe (patch)
tree0b7be225ed2f6deb39ae729b6b98bc00be830cf8 /src
parentb805f77cc96b1ff5482aa2ee2004bf74ebe402f0 (diff)
parent0eb7a660c0f6eef4ae163b91791908b670dc1d5a (diff)
downloadminishell-a1704494c323177d4c4d8cf822aa80297181c4fe.tar.gz
minishell-a1704494c323177d4c4d8cf822aa80297181c4fe.tar.bz2
minishell-a1704494c323177d4c4d8cf822aa80297181c4fe.zip
Merge branch 'parse_cmd' into eval
Diffstat (limited to 'src')
-rw-r--r--src/lexer/lexer_utils.c6
-rw-r--r--src/lexer/trim.c9
-rw-r--r--src/main.c7
-rwxr-xr-xsrc/parse/parse.c11
4 files changed, 21 insertions, 12 deletions
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)
diff --git a/src/main.c b/src/main.c
index 6a6692a..1dee5b1 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/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) */
/* { */