fixes + norm
This commit is contained in:
@@ -3,10 +3,10 @@
|
||||
/* ::: :::::::: */
|
||||
/* heredoc.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lderidde <lderidde@student.s19.be> +#+ +:+ +#+ */
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/11 09:01:14 by lderidde #+# #+# */
|
||||
/* Updated: 2025/02/11 10:45:08 by lderidde ### ########.fr */
|
||||
/* Updated: 2025/02/11 16:31:50 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -25,8 +25,8 @@ static void remove_quote(char **str, char c)
|
||||
new = ft_calloc(len - 1, sizeof(char));
|
||||
while (i < len - 2)
|
||||
{
|
||||
if ((&((*str)[k]) == ft_strchr(*str, c)) ||
|
||||
(&((*str)[k]) == ft_strrchr(*str, c)))
|
||||
if ((&((*str)[k]) == ft_strchr(*str, c))
|
||||
|| (&((*str)[k]) == ft_strrchr(*str, c)))
|
||||
{
|
||||
k++;
|
||||
}
|
||||
@@ -37,11 +37,11 @@ static void remove_quote(char **str, char c)
|
||||
*str = new;
|
||||
}
|
||||
|
||||
static int ifremove_quote(char **str)
|
||||
static int ifremove_quote(char **str)
|
||||
{
|
||||
char c;
|
||||
int ret;
|
||||
|
||||
|
||||
ret = 0;
|
||||
if (!ft_strchr(*str, '\'') && !ft_strchr(*str, '\"'))
|
||||
c = 0;
|
||||
@@ -73,8 +73,8 @@ void read_hereinput(char *limiter)
|
||||
r = read(0, &c, 1);
|
||||
if (r == 0)
|
||||
{
|
||||
ft_fprintf (2, "\n");
|
||||
ft_fprintf (1, "%s\n", limiter);
|
||||
ft_fprintf(2, "\n");
|
||||
ft_fprintf(1, "%s\n", limiter);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
while (r && c != '\n' && c != '\0')
|
||||
@@ -96,7 +96,7 @@ void read_hereinput(char *limiter)
|
||||
|
||||
void parse_heredoc(char *limiter)
|
||||
{
|
||||
int fd;
|
||||
int fd;
|
||||
pid_t pid;
|
||||
|
||||
fd = open(".heredoc", O_WRONLY | O_CREAT | O_APPEND, 0666);
|
||||
@@ -105,20 +105,20 @@ void parse_heredoc(char *limiter)
|
||||
{
|
||||
ifremove_quote(&limiter);
|
||||
dup2(fd, STDOUT_FILENO);
|
||||
close (fd);
|
||||
close(fd);
|
||||
while (1)
|
||||
read_hereinput(limiter);
|
||||
}
|
||||
else if (pid > 0)
|
||||
{
|
||||
waitpid(pid, NULL, 0);
|
||||
close (fd);
|
||||
close(fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
close (fd);
|
||||
close(fd);
|
||||
perror("fork");
|
||||
exit (EXIT_FAILURE);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/07 12:08:53 by nalebrun #+# #+# */
|
||||
/* Updated: 2025/02/07 17:58:30 by nalebrun ### ########.fr */
|
||||
/* Updated: 2025/02/11 16:31:12 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
int syntax_err_mess(char *token_base, int selected)
|
||||
{
|
||||
char *token;
|
||||
char *token;
|
||||
|
||||
token = ft_strdup(token_base);
|
||||
if (selected == 0)
|
||||
@@ -33,19 +33,9 @@ int syntax_err_mess(char *token_base, int selected)
|
||||
return (1);
|
||||
}
|
||||
|
||||
int unexpected_token(t_node *node)
|
||||
static int check_unclosed(char *c, t_node *node)
|
||||
{
|
||||
if ((!ft_strncmp(node->val, "&", 1) && ft_strncmp(node->val, "&&", 2))
|
||||
|| !ft_strncmp(node->val, ";", 1) || !ft_strncmp(node->val, "[", 1)
|
||||
|| !ft_strncmp(node->val, "]", 1) || !ft_strncmp(node->val, "{", 1)
|
||||
|| !ft_strncmp(node->val, "}", 1))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int check_unclosed(char *c, t_node *node)
|
||||
{
|
||||
t_node *cpy;
|
||||
t_node *cpy;
|
||||
int count;
|
||||
|
||||
cpy = node;
|
||||
@@ -65,28 +55,28 @@ int check_unclosed(char *c, t_node *node)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int check_unclosed_quote(char *c, t_node *node)
|
||||
static int check_unclosed_quote(char *c, t_node *node)
|
||||
{
|
||||
t_node *cpy;
|
||||
int count;
|
||||
int len;
|
||||
t_node *cpy;
|
||||
int count;
|
||||
int len;
|
||||
|
||||
cpy = node;
|
||||
count = 0;
|
||||
while (cpy)
|
||||
{
|
||||
len = ft_strlen(cpy->val);
|
||||
if (len > 0 && cpy->val[0] == c[0])
|
||||
{
|
||||
if (len == 1 || cpy->val[len - 1] != c[0])
|
||||
count++;
|
||||
}
|
||||
cpy = cpy->next;
|
||||
}
|
||||
return (count % 2);
|
||||
cpy = node;
|
||||
count = 0;
|
||||
while (cpy)
|
||||
{
|
||||
len = ft_strlen(cpy->val);
|
||||
if (len > 0 && cpy->val[0] == c[0])
|
||||
{
|
||||
if (len == 1 || cpy->val[len - 1] != c[0])
|
||||
count++;
|
||||
}
|
||||
cpy = cpy->next;
|
||||
}
|
||||
return (count % 2);
|
||||
}
|
||||
|
||||
int unclosed(t_node *head)
|
||||
int unclosed(t_node *head)
|
||||
{
|
||||
if (check_unclosed("()", head) != 0)
|
||||
return (syntax_err_mess("()", check_unclosed("()", head)));
|
||||
@@ -97,17 +87,6 @@ int unclosed(t_node *head)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int is_aop_operator(t_node *node)
|
||||
{
|
||||
if (!node || node->token != OPERATOR)
|
||||
return (0);
|
||||
if (node->pressision == AND
|
||||
|| node->pressision == OR
|
||||
|| node->pressision == PIPE)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int syntax_error(t_node *head)
|
||||
{
|
||||
t_node *cpy;
|
||||
|
||||
33
srcs/parsing/syntax_utils.c
Normal file
33
srcs/parsing/syntax_utils.c
Normal file
@@ -0,0 +1,33 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* syntax_utils.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/11 16:00:49 by nalebrun #+# #+# */
|
||||
/* Updated: 2025/02/11 16:34:22 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../includes/minishell.h"
|
||||
|
||||
int is_aop_operator(t_node *node)
|
||||
{
|
||||
if (!node || node->token != OPERATOR)
|
||||
return (0);
|
||||
if (node->pressision == AND || node->pressision == OR
|
||||
|| node->pressision == PIPE)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int unexpected_token(t_node *node)
|
||||
{
|
||||
if ((!ft_strncmp(node->val, "&", 1) && ft_strncmp(node->val, "&&", 2))
|
||||
|| !ft_strncmp(node->val, ";", 1) || !ft_strncmp(node->val, "[", 1)
|
||||
|| !ft_strncmp(node->val, "]", 1) || !ft_strncmp(node->val, "{", 1)
|
||||
|| !ft_strncmp(node->val, "}", 1))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/01/15 13:27:57 by lderidde #+# #+# */
|
||||
/* Updated: 2025/02/07 17:26:04 by nalebrun ### ########.fr */
|
||||
/* Updated: 2025/02/11 16:31:30 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -33,26 +33,6 @@ static t_node *tokenize_base(char *str)
|
||||
return (head);
|
||||
}
|
||||
|
||||
static void set_token(t_node *head)
|
||||
{
|
||||
t_node *it;
|
||||
t_token last_token;
|
||||
t_pres last_pres;
|
||||
|
||||
it = head;
|
||||
last_token = UNSET;
|
||||
last_pres = UNDEFINED;
|
||||
while (it != NULL)
|
||||
{
|
||||
it->token = get_token(it->val);
|
||||
it->pressision = get_pressision(it->val, it->token, last_token,
|
||||
last_pres);
|
||||
last_token = it->token;
|
||||
last_pres = it->pressision;
|
||||
it = it->next;
|
||||
}
|
||||
}
|
||||
|
||||
static int unstick_nodes(t_node *head)
|
||||
{
|
||||
t_node *it;
|
||||
@@ -89,7 +69,8 @@ static int stick_quote_node(t_node *head, char q)
|
||||
it = head;
|
||||
while (it != NULL)
|
||||
{
|
||||
if (ft_strchr(it->val, q) && ft_strchr(it->val, q) == ft_strrchr(it->val, q))
|
||||
if (ft_strchr(it->val, q) && ft_strchr(it->val,
|
||||
q) == ft_strrchr(it->val, q))
|
||||
{
|
||||
while (it->next && !ft_strchr(it->next->val, q))
|
||||
if (!merge_with_next_node(it))
|
||||
@@ -102,36 +83,19 @@ static int stick_quote_node(t_node *head, char q)
|
||||
return (1);
|
||||
}
|
||||
|
||||
void debug_token_list(t_node* lst, char *msg)
|
||||
static void del_void_nodes(t_node **head)
|
||||
{
|
||||
t_node *cpy;
|
||||
|
||||
cpy = lst;
|
||||
if (DEBUG)
|
||||
{
|
||||
ft_debug("==================================================================={%s}\n", msg);
|
||||
while (cpy)
|
||||
{
|
||||
ft_fprintf(2, "| %10s | TOKEN : %3d | PRESSISION : %3d |\n", cpy->val, cpy->token, cpy->pressision);
|
||||
cpy = cpy->next;
|
||||
}
|
||||
ft_debug("===================================================================\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
void del_void_nodes(t_node **head)
|
||||
{
|
||||
t_node *cpy;
|
||||
t_node *tmp;
|
||||
t_node *cpy;
|
||||
t_node *tmp;
|
||||
|
||||
cpy = *head;
|
||||
if (ft_strlen((*head)->val) == 0)
|
||||
{
|
||||
cpy = (*head)->next;
|
||||
free ((*head)->val);
|
||||
free (*head);
|
||||
free((*head)->val);
|
||||
free(*head);
|
||||
}
|
||||
*head = cpy;
|
||||
*head = cpy;
|
||||
while (cpy)
|
||||
{
|
||||
if (cpy->next && ft_strlen(cpy->next->val) == 0)
|
||||
@@ -152,19 +116,12 @@ t_node *tokenize(char *str)
|
||||
head = tokenize_base(str);
|
||||
if (!head)
|
||||
return (NULL);
|
||||
debug_token_list(head, "tokenize_base");
|
||||
if (!trim_nodes(head))
|
||||
return (NULL);
|
||||
debug_token_list(head, "trim_nodes");
|
||||
if (!unstick_nodes(head))
|
||||
return (NULL);
|
||||
debug_token_list(head, "unstick_nodes");
|
||||
stick_quote_node(head, 39);
|
||||
stick_quote_node(head, '"');
|
||||
debug_token_list(head, "stick quote node");
|
||||
// if (!trim_nodes(head))
|
||||
// return (NULL);
|
||||
// debug_token_list(head, "trim_nodes");
|
||||
set_token(head);
|
||||
del_void_nodes(&head);
|
||||
debug_token_list(head, "tokenizer");
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/01/22 14:24:05 by nalebrun #+# #+# */
|
||||
/* Updated: 2025/02/07 18:04:31 by nalebrun ### ########.fr */
|
||||
/* Updated: 2025/02/11 16:33:45 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -15,16 +15,15 @@
|
||||
int is_meta(char c)
|
||||
{
|
||||
if (c == '&' || c == '|' || c == '<' || c == '>' || c == '(' || c == ')'
|
||||
|| c == ';' || c == '{' || c == '}' || c == '['
|
||||
|| c == ']')
|
||||
|| c == ';' || c == '{' || c == '}' || c == '[' || c == ']')
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int unic(int *meta)
|
||||
int unic(int *meta)
|
||||
{
|
||||
int i;
|
||||
int ref_meta;
|
||||
int i;
|
||||
int ref_meta;
|
||||
|
||||
i = -1;
|
||||
ref_meta = meta[0];
|
||||
@@ -38,7 +37,7 @@ int is_sticked(char *val)
|
||||
{
|
||||
int i;
|
||||
int meta[100];
|
||||
int meta_it;
|
||||
int meta_it;
|
||||
int unmeta;
|
||||
|
||||
i = 0;
|
||||
@@ -85,8 +84,7 @@ int trim_nodes(t_node *head)
|
||||
in_quote = 0;
|
||||
while (it != NULL)
|
||||
{
|
||||
if (ft_str_count(it->val, 39) == 1
|
||||
|| ft_str_count(it->val, '"') == 1)
|
||||
if (ft_str_count(it->val, 39) == 1 || ft_str_count(it->val, '"') == 1)
|
||||
{
|
||||
if (!in_quote)
|
||||
in_quote = it->val[0];
|
||||
@@ -103,17 +101,3 @@ int trim_nodes(t_node *head)
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
int find_quote_node(t_node *head, char q)
|
||||
{
|
||||
t_node *it;
|
||||
|
||||
it = head;
|
||||
while (it != NULL)
|
||||
{
|
||||
if (it->val[0] == q)
|
||||
return (1);
|
||||
it = it->next;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
68
srcs/parsing/tokenizer/tokenizer_utils2.c
Normal file
68
srcs/parsing/tokenizer/tokenizer_utils2.c
Normal file
@@ -0,0 +1,68 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* tokenizer_utils2.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: nalebrun <nalebrun@student.s19.be> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/11 16:10:17 by nalebrun #+# #+# */
|
||||
/* Updated: 2025/02/11 16:33:26 by nalebrun ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../../includes/minishell.h"
|
||||
|
||||
void debug_token_list(t_node *lst, char *msg)
|
||||
{
|
||||
t_node *cpy;
|
||||
|
||||
cpy = lst;
|
||||
if (DEBUG)
|
||||
{
|
||||
ft_debug("====================================================\
|
||||
==============={%s}\n",
|
||||
msg);
|
||||
while (cpy)
|
||||
{
|
||||
ft_fprintf(2, "| %10s | TOKEN : %3d | PRESSISION : %3d |\n",
|
||||
cpy->val, cpy->token, cpy->pressision);
|
||||
cpy = cpy->next;
|
||||
}
|
||||
ft_debug("====================================================\
|
||||
===============\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
void set_token(t_node *head)
|
||||
{
|
||||
t_node *it;
|
||||
t_token last_token;
|
||||
t_pres last_pres;
|
||||
|
||||
it = head;
|
||||
last_token = UNSET;
|
||||
last_pres = UNDEFINED;
|
||||
while (it != NULL)
|
||||
{
|
||||
it->token = get_token(it->val);
|
||||
it->pressision = get_pressision(it->val, it->token, last_token,
|
||||
last_pres);
|
||||
last_token = it->token;
|
||||
last_pres = it->pressision;
|
||||
it = it->next;
|
||||
}
|
||||
}
|
||||
|
||||
int find_quote_node(t_node *head, char q)
|
||||
{
|
||||
t_node *it;
|
||||
|
||||
it = head;
|
||||
while (it != NULL)
|
||||
{
|
||||
if (it->val[0] == q)
|
||||
return (1);
|
||||
it = it->next;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
Reference in New Issue
Block a user