aboutsummaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rwxr-xr-xsrc/parse/parse.c24
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);
}