From 94e2f26112d5920b0e9e47b741d128c5d57f3d5a Mon Sep 17 00:00:00 2001 From: Nathan Lebrun Date: Wed, 29 Jan 2025 15:51:59 +0100 Subject: [PATCH] ast start --- parser | Bin 158296 -> 158696 bytes test/ast/ast.c | 145 ++++++++++++++++++++++----------- test/ast/ast.h | 3 +- test/drawio/drawio_ast_utils.c | 2 + 4 files changed, 101 insertions(+), 49 deletions(-) diff --git a/parser b/parser index 0b98a551136653eefb3184a8a3d874a05cc29f16..a9b72604a53f49abad0c346dd19b68c9d332727d 100755 GIT binary patch delta 15678 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 F{{>oQbO-yd=GGyf~U%56bAhwcL9K#?D&$ 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 = ft_split(args, " "); } +int last_tok_subsh(t_node *lst) +{ + while (lst) + { + if (lst->next == NULL && !ft_strncmp(lst->val, ")", 1)) + return (1); + lst = lst->next; + } + return (0); +} + +t_node *find_token(char *tok, t_node *lst) +{ + while (lst) + { + if (!ft_strncmp(lst->val, tok, ft_strlen(tok))) + return (lst); + lst = lst->next; + } + return (NULL); +} + +t_node *get_top_token(t_node *lst, t_state *state) +{ + *state = _SUBSH; + if (!ft_strncmp(lst->val, "(", 1) && last_tok_subsh(lst)) + return (lst); + else if (find_token("&&", lst)) + { + *state = _AND; + return (find_token("&&", lst)); + } + else if (find_token("||", lst)) + { + *state = _OR; + return (find_token("||", lst)); + } + else if (find_token("|", lst)) + { + *state = _PLINE; + return (find_token("|", lst)); + } + else + { + *state = UNDEF; + return (NULL); + } +} + +/*t_ast_n create_ast_n(t_node *lst, t_ast_n *parent);*/ + +/*void create_and_or(t_ast_n *parrent, t_node *lst, t_node *token)*/ +/*{*/ +/* t_node **sublsts;*/ +/**/ + /*sublsts = cutll(lst, token);*/ +/* parrent->left = create_ast_n(sublsts[0], parrent);*/ +/* parrent->left = create_ast_n(sublsts[1], parrent);*/ +/* free_lltab(sublsts);*/ +/* free(token);*/ +/*}*/ + + +/*void create_cmd(t_ast_n *parent, t_node *lst, t_node *token)*/ +/*{*/ +/*}*/ + +/*void create_pline(t_ast_n *parent, t_node *lst, t_node *token)*/ +/*{*/ +/*}*/ + +t_ast_n *create_ast_n(t_node *lst, t_ast_n *parent) +{ + t_ast_n *node; + t_node *token; + + node = malloc(sizeof(t_ast_n)); + token = get_top_token(lst, &node->state); + + (void)token; + (void)parent; + + /*if (node->state == _PLINE)*/ + /*create_pline(node, lst, token);*/ + /*else if (node->state == _CMD)*/ + /*create_cmd(node, lst, token);*/ + /*else if (node->state == _SUBSH)*/ + /*create_subsh(node, lst, token);*/ + /*else*/ + /*create_and_or(node, lst, token);*/ + + return (node); +} + t_ast_n *get_ast(char **envp, t_node *lst) { - t_ast_n *head; - - (void)lst; - // head - head = created_ast_n(_AND, NULL, NULL); - head->env = init_env(envp); - - // left - head->left = created_ast_n(_AND, head, head); - - // left - head->left->left = created_ast_n(_CMD, head->left, head); - setup_cmd(head->left->left, "echo", "echo coucou"); - // - // right - head->left->right = created_ast_n(_OR, head->left, head); - // - // left - head->left->right->left = created_ast_n(_CMD, head->left->right, head); - setup_cmd(head->left->right->left, "echo", "echo coucou"); - - // right - head->left->right->right = created_ast_n(_CMD, head->left->right, head); - setup_cmd(head->left->right->right, "echo", "echo coucou"); - - // right - head->right = created_ast_n(_PLINE, head, head); - head->right->pline = malloc(sizeof(t_ast_n *) * 4); - // ===0=== - head->right->pline[0] = created_ast_n(_CMD, head->right, head); - setup_cmd(head->right->pline[0], "ls", "ls"); - // ===1=== - head->right->pline[1] = created_ast_n(_AND, head->right, head); - - // left - head->right->pline[1]->left = created_ast_n(_CMD, head->right->pline[1], head); - setup_cmd(head->right->pline[1]->left, "echo", "echo coucou"); - - // right - head->right->pline[1]->right = created_ast_n(_CMD, head->right->pline[1], head); - setup_cmd(head->right->pline[1]->right, "echo", "echo coucou"); - - // ===2=== - head->right->pline[2] = created_ast_n(_CMD, head->right, head); - setup_cmd(head->right->pline[2], "cat", "cat -e"); - - // ===NULL=== - head->right->pline[3] = NULL; + t_ast_n *head; + (void)envp; + head = create_ast_n(lst, NULL); return (head); } diff --git a/test/ast/ast.h b/test/ast/ast.h index accffc0..933b8dc 100644 --- a/test/ast/ast.h +++ b/test/ast/ast.h @@ -23,7 +23,8 @@ typedef enum e_state _AND, _OR, _CMD, - _PLINE + _PLINE, + _SUBSH } t_state; typedef enum e_redir diff --git a/test/drawio/drawio_ast_utils.c b/test/drawio/drawio_ast_utils.c index fd823c5..b4f0246 100644 --- a/test/drawio/drawio_ast_utils.c +++ b/test/drawio/drawio_ast_utils.c @@ -24,6 +24,8 @@ const char *translate_state(t_state state) out = "CMD_PIPELINE"; else if (state == _CMD) out = "SIMPLE_CMD"; + else if (state == _SUBSH) + out = "SUBSHELL"; else out = "UNDEFINED"; return (out);