diff --git a/Makefile b/Makefile index e29142e..29a02e8 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ LIBFT = $(LIBFT_PATH)/libft.a OBJ_PATH = obj -VPATH = src:src/enviroment:src/prompt:src/tokenizer:src/utils +VPATH = src:src/enviroment:src/prompt:src/lexer:src/token:src/utils SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) diff --git a/src/lexer/lexer_new.c b/src/lexer/lexer_new.c new file mode 100644 index 0000000..bbdc7c4 --- /dev/null +++ b/src/lexer/lexer_new.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lexer_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:03:01 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:08:41 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_lexer *ft_lexer_new(const char *input) +{ + t_lexer *lexer; + + lexer = malloc(sizeof(t_lexer)); + if (!lexer) + { + perror("failed assigning lexer memory"); + exit(EXIT_FAILURE); + } + lexer->input = ft_strdup(input); + lexer->pos = 0; + lexer->n_pos = 1; + lexer->current_char = '\0'; + if (ft_strlen(input) > 0) + lexer->current_char = *input; + return (lexer); +} diff --git a/src/lexer/lexer_parse_input.c b/src/lexer/lexer_parse_input.c new file mode 100644 index 0000000..861e4eb --- /dev/null +++ b/src/lexer/lexer_parse_input.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lexer_parse_input.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:09:20 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:09:26 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +/** + * @brief Parses the input from the lexer and returns a list of tokens. + * + * This function continuously retrieves the next token from the lexer and adds + * it to a linked list until an end-of-file (EOF) or error token is encountered. + * The list of tokens is then returned. + * + * @param lexer A pointer to the lexer structure containing + * the input to be parsed. + * @return A linked list of tokens parsed from the input. + */ +t_list *ft_parse_input(t_lexer *lexer) +{ + t_list *list; + t_token *token; + + list = NULL; + while (TRUE) + { + token = ft_token_next(lexer); + if (token->type == T_EOF) + break ; + ft_lstadd_back(&list, ft_lstnew(token)); + } + ft_token_free(token); + return (list); +} diff --git a/src/lexer/lexer_read_char.c b/src/lexer/lexer_read_char.c new file mode 100644 index 0000000..9472a23 --- /dev/null +++ b/src/lexer/lexer_read_char.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lexer_readchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:04:53 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:05:06 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_lexer_readchar(t_lexer *lexer) +{ + if ((size_t)lexer->n_pos > ft_strlen(lexer->input)) + { + lexer->current_char = '\0'; + return ; + } + lexer->current_char = lexer->input[lexer->n_pos]; + lexer->pos = lexer->n_pos; + lexer->n_pos++; +} + diff --git a/src/tokenizer/lexer.c b/src/lexer/lexer_read_word.c similarity index 69% rename from src/tokenizer/lexer.c rename to src/lexer/lexer_read_word.c index 3ba2968..4128409 100644 --- a/src/tokenizer/lexer.c +++ b/src/lexer/lexer_read_word.c @@ -1,48 +1,17 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* lexer.c :+: :+: :+: */ +/* lexer_readword.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/04 18:04:07 by qmennen #+# #+# */ -/* Updated: 2025/02/04 20:53:26 by qmennen ### ########.fr */ +/* Created: 2025/02/05 19:03:47 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:05:03 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -t_lexer *ft_lexer_new(const char *input) -{ - t_lexer *lexer; - - lexer = malloc(sizeof(t_lexer)); - if (!lexer) - { - perror("failed assigning lexer memory"); - exit(EXIT_FAILURE); - } - lexer->input = ft_strdup(input); - lexer->pos = 0; - lexer->n_pos = 1; - lexer->current_char = '\0'; - if (ft_strlen(input) > 0) - lexer->current_char = *input; - return (lexer); -} - -void ft_lexer_readchar(t_lexer *lexer) -{ - if ((size_t)lexer->n_pos > ft_strlen(lexer->input)) - { - lexer->current_char = '\0'; - return ; - } - lexer->current_char = lexer->input[lexer->n_pos]; - lexer->pos = lexer->n_pos; - lexer->n_pos++; -} - static char *ft_parse_quotes(t_lexer *lexer) { int start; diff --git a/src/tokenizer/tokenizer.c b/src/lexer/lexer_token_next.c similarity index 75% rename from src/tokenizer/tokenizer.c rename to src/lexer/lexer_token_next.c index 83e3218..cc672df 100644 --- a/src/tokenizer/tokenizer.c +++ b/src/lexer/lexer_token_next.c @@ -6,40 +6,12 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/04 16:07:58 by qmennen #+# #+# */ -/* Updated: 2025/02/04 20:57:25 by qmennen ### ########.fr */ +/* Updated: 2025/02/05 19:09:35 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -/** - * @brief Parses the input from the lexer and returns a list of tokens. - * - * This function continuously retrieves the next token from the lexer and adds - * it to a linked list until an end-of-file (EOF) or error token is encountered. - * The list of tokens is then returned. - * - * @param lexer A pointer to the lexer structure containing - * the input to be parsed. - * @return A linked list of tokens parsed from the input. - */ -t_list *ft_parse_input(t_lexer *lexer) -{ - t_list *list; - t_token *token; - - list = NULL; - while (TRUE) - { - token = ft_token_next(lexer); - if (token->type == T_EOF) - break ; - ft_lstadd_back(&list, ft_lstnew(token)); - } - ft_token_free(token); - return (list); -} - /** * @brief Retrieves the next token from the lexer. * diff --git a/src/token/token_new.c b/src/token/token_new.c new file mode 100644 index 0000000..6529b1b --- /dev/null +++ b/src/token/token_new.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* token_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:10:49 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:11:32 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_token *ft_token_new(t_token_type type, char *c, int pos) +{ + t_token *token; + + token = malloc(sizeof(t_token)); + if (!token) + { + perror("failed assigning token memory"); + exit(EXIT_FAILURE); + } + token->type = type; + token->position = pos; + if (c) + token->value = ft_strdup(c); + else + token->value = NULL; + return (token); +} diff --git a/src/tokenizer/tokens.c b/src/token/token_parse.c similarity index 71% rename from src/tokenizer/tokens.c rename to src/token/token_parse.c index f555cf1..d3fc175 100644 --- a/src/tokenizer/tokens.c +++ b/src/token/token_parse.c @@ -1,17 +1,18 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* tokens.c :+: :+: :+: */ +/* parse_token.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/04 18:02:56 by qmennen #+# #+# */ -/* Updated: 2025/02/04 20:53:10 by qmennen ### ########.fr */ +/* Created: 2025/02/05 19:10:17 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:11:21 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" + t_token *ft_parse_token(t_lexer *lexer) { t_token *token; @@ -37,22 +38,3 @@ t_token *ft_parse_token(t_lexer *lexer) ft_lexer_readchar(lexer); return (token); } - -t_token *ft_token_new(t_token_type type, char *c, int pos) -{ - t_token *token; - - token = malloc(sizeof(t_token)); - if (!token) - { - perror("failed assigning token memory"); - exit(EXIT_FAILURE); - } - token->type = type; - token->position = pos; - if (c) - token->value = ft_strdup(c); - else - token->value = NULL; - return (token); -} diff --git a/src/utils/free_lexer.c b/src/utils/free_lexer.c new file mode 100644 index 0000000..d15f1dd --- /dev/null +++ b/src/utils/free_lexer.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* free_lexer.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:07:01 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:07:18 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_lexer_free(t_lexer *lexer) +{ + if (lexer->input) + free(lexer->input); + free(lexer); +} diff --git a/src/utils/free_token.c b/src/utils/free_token.c new file mode 100644 index 0000000..c641787 --- /dev/null +++ b/src/utils/free_token.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* free_token.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/05 19:07:45 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:07:54 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_token_free(t_token *token) +{ + if (token->value) + free(token->value); + free(token); +} diff --git a/src/tokenizer/lexer_utils.c b/src/utils/free_token_list.c similarity index 68% rename from src/tokenizer/lexer_utils.c rename to src/utils/free_token_list.c index aad99ce..db06843 100644 --- a/src/tokenizer/lexer_utils.c +++ b/src/utils/free_token_list.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* lexer_utils.c :+: :+: :+: */ +/* free_token_list.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/04 20:54:09 by qmennen #+# #+# */ -/* Updated: 2025/02/04 20:54:36 by qmennen ### ########.fr */ +/* Created: 2025/02/05 19:08:14 by qmennen #+# #+# */ +/* Updated: 2025/02/05 19:08:31 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,17 +19,3 @@ void ft_clear_tokenlist(void *content) token = (t_token *)content; ft_token_free(token); } - -void ft_token_free(t_token *token) -{ - if (token->value) - free(token->value); - free(token); -} - -void ft_lexer_free(t_lexer *lexer) -{ - if (lexer->input) - free(lexer->input); - free(lexer); -}