From 6e61e60e3daeac766f88fcc2febef186d16559aa Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Thu, 8 Oct 2020 17:06:15 +0200 Subject: Fixing input not fully eaten syntax error, Added basename in prompt --- src/parser/parser.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/parser/parser.c') diff --git a/src/parser/parser.c b/src/parser/parser.c index 25e9531..8b4732f 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -6,7 +6,7 @@ /* By: nahaddac +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */ -/* Updated: 2020/10/08 12:29:52 by cacharle ### ########.fr */ +/* Updated: 2020/10/08 16:58:19 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,7 +61,7 @@ t_parsed *parse_cmd(t_tok_lst *input) t_ast *ast; t_parsed *tmp; - if (input->tag & TAG_IS_SEP || input->tag == TAG_PIPE) + if (input->tag & TAG_IS_SEP || input->tag == TAG_PIPE || input->tag == TAG_PARENT_CLOSE) { t_parsed *ret = parsed_error("syntax error near unexpected token `%s'\n", input->content); tok_lst_destroy(&input, free); @@ -142,6 +142,8 @@ t_parsed *parse_op(t_tok_lst *input) t_parsed *right; enum e_tok sep_tag; + if (input == NULL) + return (NULL); left = parse_pipeline(input); if (left == NULL || left->syntax_error) return (left); @@ -154,7 +156,10 @@ t_parsed *parse_op(t_tok_lst *input) g_sep_str_lookup[sep_tag])); ft_lstpop_front((t_ftlst**)&input, free); if (input == NULL && sep_tag == TAG_END) + { + left->rest = NULL; return (left); + } if (input == NULL) { ast_destroy(left->ast); @@ -193,7 +198,10 @@ t_parsed *parse_expr(t_tok_lst *input) if (input->tag & TAG_PARENT_OPEN) { ft_lstpop_front(&input, free); - if (!(parsed = parse_op(input)) || parsed->syntax_error) + if (input == NULL) + return (parsed_error("syntax error: unexpected end of file\n")); + parsed = parse_op(input); + if (parsed == NULL || parsed->syntax_error) return (parsed); input = parsed->rest; if (input == NULL || !(input->tag & TAG_PARENT_CLOSE)) @@ -221,5 +229,10 @@ t_parsed *parse(t_tok_lst *input) { if (input == NULL) return (NULL); - return (parse_op(input)); + t_parsed *parsed = parse_op(input); + if (parsed == NULL || parsed->syntax_error) + return parsed; + if (parsed->rest != NULL) + return (parsed_error("syntax error near unexpected token `%s'\n", parsed->rest->content)); + return (parsed); } -- cgit