From 4cdc9c35304ee3d1d062ee10443973d2713bc6cd Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Thu, 27 Feb 2025 16:09:36 +0100 Subject: [PATCH] more refactor for parser --- inc/parser.h | 5 ++-- sources.mk | 24 ++++++++++++++++++ src/parser/parser_get_commands.c | 18 ++------------ src/parser/parser_validate_command.c | 37 ++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 sources.mk create mode 100644 src/parser/parser_validate_command.c diff --git a/inc/parser.h b/inc/parser.h index beba406..a3d0483 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -16,9 +16,10 @@ # include "minishell.h" t_command *parser_alloc_command(t_minishell *msh, char *cmd); -void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn); -char **parser_get_arguments(t_list *list, t_minishell *msh); t_list *parser_get_commands(t_minishell *msh); t_list *parser_get_input_redirects(t_list *list); +void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn); +char **parser_get_arguments(t_list *list, t_minishell *msh); +int parser_validate_command(t_command *command); #endif diff --git a/sources.mk b/sources.mk new file mode 100644 index 0000000..e85d1ea --- /dev/null +++ b/sources.mk @@ -0,0 +1,24 @@ +VPATH = src:src/prompt:src/utils:src/lexer:src/token:src/environment:src/executor:src/parser:src/debug:src/expander:src/builtin:src/signal:src/redirect: +SOURCES = history_load.c history_write.c prompt.c print_banner.c check_malloc.c \ +free_command_list.c free_freelist.c free_lexer.c free_minishell.c \ +free_safe.c free_token.c free_token_list.c ft_lstclear_safe.c \ +ft_lstnew_safe.c ft_strdup_safe.c ft_strjoin_safe.c malloc_safe.c \ +error_msg.c free_minishell_line.c ft_substr_safe.c init_minishell.c \ +lexer_read_char.c lexer_new.c lexer_parse_input.c lexer_read_word.c \ +lexer_token_next.c token_new.c token_parse.c environment_add.c \ +environment_del.c environment_free.c environment_free_list.c \ +environment_get.c environment_get_arr.c environment_parse.c \ +environment_print.c executor_close_fds.c executor_absolute_path.c \ +executor_count_fds.c executor_create_pipes.c \ +executor_create_redirects.c executor_open_fds.c \ +executor_execute_pipeline.c executor_fork.c executor_child.c \ +parser_create_command.c parser_get_arguments.c parser_alloc_command.c \ +parser_get_commands.c parser_validate_command.c print_commands.c \ +print_freelist.c expander_is_character.c expander_expand_dollar.c \ +expander_allocate_memory.c expander_get_variable.c \ +expander_parse_variables.c expander_parse_string.c is_builtin.c \ +simple_builtins.c builtin_cd.c builtin_echo.c builtin_env.c \ +builtin_exit.c builtin_export.c builtin_pwd.c builtin_router.c \ +builtin_unset.c signal.c signal_init.c.c redirect_get_inputs.c \ +redirect_get_outputs.c redirect_new.c redirect_new_error.c \ +redirect_process_heredoc.c redirect_valid_type.c main.c \ diff --git a/src/parser/parser_get_commands.c b/src/parser/parser_get_commands.c index 68bbe5a..31ec57d 100644 --- a/src/parser/parser_get_commands.c +++ b/src/parser/parser_get_commands.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/11 14:06:02 by qmennen #+# #+# */ -/* Updated: 2025/02/27 13:38:56 by qmennen ### ########.fr */ +/* Updated: 2025/02/27 16:07:54 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,20 +17,6 @@ static int is_command_token(t_token *token) return (token->type < 3 || redirect_token_type(token)); } -static int validate_redirects(t_list *lst) -{ - t_list *token; - - token = lst; - while (token) - { - if (((t_redirect *)token->content)->type == T_ERROR) - return (0); - token = token->next; - } - return (1); -} - t_list *parser_get_commands(t_minishell *msh) { t_list *command_list; @@ -47,7 +33,7 @@ t_list *parser_get_commands(t_minishell *msh) token = (t_token *) current->content; command = parser_alloc_command(msh, ft_strdup_safe(msh, token->value)); parser_create_command(msh, command, ¤t); - if (!validate_redirects(command->redirect_in) || !validate_redirects(command->redirect_out)) + if (! parser_validate_command(command)) break ; ft_lstadd_back(&command_list, ft_lstnew_safe(msh, command)); while (current && is_command_token((t_token *)current->content)) diff --git a/src/parser/parser_validate_command.c b/src/parser/parser_validate_command.c new file mode 100644 index 0000000..e15e38d --- /dev/null +++ b/src/parser/parser_validate_command.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parser_validate_command.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/27 16:06:33 by qmennen #+# #+# */ +/* Updated: 2025/02/27 16:08:49 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int validate_redirects(t_list *lst) +{ + t_list *token; + + token = lst; + while (token) + { + if (((t_redirect *)token->content)->type == T_ERROR) + return (0); + token = token->next; + } + return (1); +} + +int parser_validate_command(t_command *command) +{ + int r_in; + int r_out; + + r_in = validate_redirects(command->redirect_in); + r_out = validate_redirects(command->redirect_out); + return (r_in && r_out); +}