diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-18 11:29:56 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-18 11:29:56 +0200 |
| commit | 3b21eea3ff3c803aa6f07c3a5bd048795c586b46 (patch) | |
| tree | 79c35af8a6572bc4c76ad75a77091767964d6043 /src/parse/parse.c | |
| parent | f4a8ff23a590dad1b43a2e92df5c5c6b8951976a (diff) | |
| download | minishell-3b21eea3ff3c803aa6f07c3a5bd048795c586b46.tar.gz minishell-3b21eea3ff3c803aa6f07c3a5bd048795c586b46.tar.bz2 minishell-3b21eea3ff3c803aa6f07c3a5bd048795c586b46.zip | |
Fixing parse_expr and parse_op to work with parenthesis
Diffstat (limited to 'src/parse/parse.c')
| -rwxr-xr-x | src/parse/parse.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/parse/parse.c b/src/parse/parse.c index 7217fdb..f49f1f3 100755 --- a/src/parse/parse.c +++ b/src/parse/parse.c @@ -6,7 +6,7 @@ /* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */ -/* Updated: 2020/06/17 23:00:29 by charles ### ########.fr */ +/* Updated: 2020/06/18 11:29:09 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -75,8 +75,11 @@ t_ret *parse_cmd(t_ftlst *input) return ret_wrap_ast(ast, input); } -// <cmd> ::= ... -// <op> ::= <cmd> <sep> <op> | <op> +// <cmd> ::= (<string> | <redir>)+ +// <op> ::= <expr> <sep> <op> | <expr> +// <expr> ::= '(' <op> ')' | <cmd> + +t_ret *parse_expr(t_ftlst *input); t_ret *parse_op(t_ftlst *input) { @@ -85,10 +88,10 @@ t_ret *parse_op(t_ftlst *input) t_ret *right_ret; enum e_token_tag sep_tag; - left_ret = parse_cmd(input); + left_ret = parse_expr(input); input = left_ret->rest; - if (input == NULL) //((t_token*)input->data)->tag & TAG_IS_SEP) + if (input == NULL || ((t_token*)input->data)->tag == TAG_PARENT_CLOSE) return ret_wrap_ast(left_ret->ast, input); sep_tag = ((t_token*)input->data)->tag; @@ -105,24 +108,21 @@ t_ret *parse_op(t_ftlst *input) t_ret *parse_expr(t_ftlst *input) { - t_ret *tmp; + t_ret *tmp; enum e_token_tag tag; - tag = input->data->tag; + tag = ((t_token*)input->data)->tag; if (tag == TAG_PARENT_OPEN) { - tmp = parse_expr(input->next); + tmp = parse_op(input->next); input = tmp->rest; - tag = input->data->tag; + tag = ((t_token*)input->data)->tag; if (tag != TAG_PARENT_CLOSE) return (NULL); input = input->next; tmp->rest = input; return tmp; } - tmp = parse_op(input); - if (tmp->unexpected != NULL) - return tmp; return parse_cmd(input); } |
