diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-10-08 17:06:15 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-10-08 17:06:15 +0200 |
| commit | 6e61e60e3daeac766f88fcc2febef186d16559aa (patch) | |
| tree | a4bf9107436ea303bc518f9ad738b1bebe0a5297 /src/parser | |
| parent | fb4d6bd7e93328b3eb684fc390b91800da313564 (diff) | |
| download | minishell-6e61e60e3daeac766f88fcc2febef186d16559aa.tar.gz minishell-6e61e60e3daeac766f88fcc2febef186d16559aa.tar.bz2 minishell-6e61e60e3daeac766f88fcc2febef186d16559aa.zip | |
Fixing input not fully eaten syntax error, Added basename in prompt
Diffstat (limited to 'src/parser')
| -rw-r--r-- | src/parser/parser.c | 21 |
1 files changed, 17 insertions, 4 deletions
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 <nahaddac@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } |
