From 2e012b3e9139c09602fa40bc6a2596da6c814f25 Mon Sep 17 00:00:00 2001 From: "ariard@student.42.fr" Date: Mon, 20 Feb 2017 17:20:34 +0100 Subject: [PATCH] if elif ok, else coming --- 42sh/includes/.parser.h.swn | Bin 20480 -> 0 bytes 42sh/includes/parser.h | 6 ++-- 42sh/sample/if/01_if_easy.sh | 8 ++++- 42sh/src/main/ft_putast.c | 10 ++++-- 42sh/src/parser/.eval_sym.c.swn | Bin 40960 -> 0 bytes 42sh/src/parser/.produce_sym.c.swn | Bin 16384 -> 0 bytes 42sh/src/parser/.read_stack.c.swn | Bin 20480 -> 0 bytes 42sh/src/parser/add_cmd.c | 6 ++-- 42sh/src/parser/add_condition.c | 49 ++++++++++++++++++++++------- 42sh/src/parser/add_loop.c | 2 +- 42sh/src/parser/add_sep.c | 8 ++--- 42sh/src/parser/aggregate_sym.c | 10 +++--- 42sh/src/parser/build_tree.c | 4 +-- 42sh/src/parser/eval_sym.c | 4 +-- 42sh/src/parser/ft_parse.c | 7 ++--- 42sh/src/parser/produce_sym.c | 8 ++--- 42sh/src/parser/read_stack.c | 2 +- 17 files changed, 81 insertions(+), 43 deletions(-) delete mode 100644 42sh/includes/.parser.h.swn delete mode 100644 42sh/src/parser/.eval_sym.c.swn delete mode 100644 42sh/src/parser/.produce_sym.c.swn delete mode 100644 42sh/src/parser/.read_stack.c.swn diff --git a/42sh/includes/.parser.h.swn b/42sh/includes/.parser.h.swn deleted file mode 100644 index dbc833146f12db4969d19374b9554f4e49f21ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */ -/* Updated: 2017/02/20 14:57:52 by ariard ### ########.fr */ +/* Updated: 2017/02/20 17:07:02 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -217,9 +217,11 @@ int add_file(t_btree **ast, t_list **lst); int add_loop_cmd(t_btree **ast, t_list **lst); int add_loop_sep(t_btree **ast, t_list **lst); int add_condition_cmd(t_btree **ast, t_list **lst); +int add_condition_sep(t_btree **ast, t_list **lst); +int add_branch(t_btree **ast, t_list **lst); int isloop(t_btree **ast); int isdir(t_btree **ast); -int iscondition(t_btree **ast); +int iscondition(t_btree **ast, t_list **lst); int join_ast(t_btree **ast, t_btree **new_node); int gen_node(t_btree **ast); diff --git a/42sh/sample/if/01_if_easy.sh b/42sh/sample/if/01_if_easy.sh index 4676e8ca..cc8f6b09 100644 --- a/42sh/sample/if/01_if_easy.sh +++ b/42sh/sample/if/01_if_easy.sh @@ -1,4 +1,10 @@ -if ls ; +if ls +then + pwd +elif ls +then + pwd +elif ls then pwd fi diff --git a/42sh/src/main/ft_putast.c b/42sh/src/main/ft_putast.c index c4d1f46c..02ad0f73 100644 --- a/42sh/src/main/ft_putast.c +++ b/42sh/src/main/ft_putast.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:41:26 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:42:40 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,9 +20,13 @@ char *ft_putast(void *nodein) t_type type; }; node = nodein; - if (node->type == TK_DO) + if (node->type == TK_THEN) + return ("THEN"); + else if (node->type == TK_FI) + return ("FI"); + else if (node->type == TK_DO) return ("TK_DO"); - if (node->type == TK_AMP) + else if (node->type == TK_AMP) return (" & "); else if (node->type == TK_N_WORD) return (" TK_N_WORD"); diff --git a/42sh/src/parser/.eval_sym.c.swn b/42sh/src/parser/.eval_sym.c.swn deleted file mode 100644 index 1835f54b978338ed7ddba52caf1fdabd191064e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 BtIPlZ diff --git a/42sh/src/parser/.produce_sym.c.swn b/42sh/src/parser/.produce_sym.c.swn deleted file mode 100644 index 994916b736c7d6d882fce1be1f88e0dc5c979f36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/15 20:49:15 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:46:04 by ariard ### ########.fr */ +/* Updated: 2017/02/20 17:03:15 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,8 +25,10 @@ int add_cmd(t_btree **ast, t_list **lst) return (add_file(ast, lst)); else if (isloop(ast)) return (add_loop_cmd(ast, lst)); - else if (iscondition(ast)) + else if (iscondition(ast, lst) == 1) return (add_condition_cmd(ast, lst)); + else if (iscondition(ast, lst) == 2) + return (add_branch(ast, lst)); else if ((node = (*ast)->item)->type != TK_DO && node->type != TK_THEN) return (add_cmd(&(*ast)->right, lst)); my_tab = NULL; diff --git a/42sh/src/parser/add_condition.c b/42sh/src/parser/add_condition.c index c4279323..1b790042 100644 --- a/42sh/src/parser/add_condition.c +++ b/42sh/src/parser/add_condition.c @@ -6,51 +6,76 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/19 18:12:52 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:46:01 by ariard ### ########.fr */ +/* Updated: 2017/02/20 17:17:34 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "parser.h" -int iscondition(t_btree **ast) +int iscondition(t_btree **ast, t_list **lst) { t_astnode *node; + t_token *token; node = NULL; + token = (*lst)->content; if (*ast) { node = (*ast)->item; - if ((node->type == TK_NEWLINE || node->type == TK_SEMI - || node->type == TK_AMP) && iscondition(&(*ast)->right) == 1) - return (1); - if ((node->type == TK_IF || node->type == TK_ELIF) - && node->full == 1) + if ((node->type == TK_IF || iscondition(&(*ast)->right, lst)) + && token->type == TK_ELIF && node->full == 0) return (2); if ((node->type == TK_IF || node->type == TK_ELIF) && node->full == 0) return (1); + if ((node->type == TK_NEWLINE || node->type == TK_SEMI + || node->type == TK_AMP) && iscondition(&(*ast)->right, lst) == 1) + return (1); } return (0); } -int add_condition_cmd(t_btree **ast, t_list **lst) +int add_condition_cmd(t_btree **ast, t_list **lst) { t_token *token; t_astnode *node; token = (*lst)->content; node = (*ast)->item; - if (token->type == TK_IF && node->type == TK_IF) + if (token->type == TK_IF && (node->type == TK_IF || node->type == TK_ELIF)) node->nest++; - if (token->type == TK_FI && node->type == TK_IF && node->nest > 0) + if (token->type == TK_FI && (node->type == TK_IF || node->type == TK_ELIF) + && node->nest > 0) node->nest--; - else if (token->type == TK_FI && node->type == TK_IF && node->nest == 0) + else if (token->type == TK_FI && (node->type == TK_IF || node->type == TK_ELIF)) return ((node->full = 1)); if (token->type == TK_THEN) return (add_cmd(&(*ast)->right, lst)); - else if (!(*ast)->right && iscondition(&(*ast)->left) != 2) + else if (!(*ast)->right) return (add_cmd(&(*ast)->left, lst)); else return (add_cmd(&(*ast)->right, lst)); return (0); +} + +int add_condition_sep(t_btree **ast, t_list **lst) +{ + if (!(*ast)->right) + return (add_sep(&(*ast)->left, lst)); + else + return (add_sep(&(*ast)->right, lst)); + return (0); +} + +int add_branch(t_btree **ast, t_list **lst) +{ + t_astnode *node; + t_btree *new_node; + + new_node = NULL; + gen_node(&new_node); + join_ast(ast, &new_node); + node = (new_node)->item; + node->type = TK_NEWLINE; + return (add_cmd(ast, lst)); } diff --git a/42sh/src/parser/add_loop.c b/42sh/src/parser/add_loop.c index 6a82ae1f..17eb4f5d 100644 --- a/42sh/src/parser/add_loop.c +++ b/42sh/src/parser/add_loop.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 22:17:14 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:38:25 by ariard ### ########.fr */ +/* Updated: 2017/02/20 17:18:49 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/add_sep.c b/42sh/src/parser/add_sep.c index ed591f3a..59335fbf 100644 --- a/42sh/src/parser/add_sep.c +++ b/42sh/src/parser/add_sep.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/15 19:12:07 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:46:06 by ariard ### ########.fr */ +/* Updated: 2017/02/20 17:07:16 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,9 +21,10 @@ int add_sep(t_btree **ast, t_list **lst) DG("add sep"); if (isloop(ast) == 1) return (add_loop_sep(ast, lst)); + else if (iscondition(ast, lst) == 1) + return (add_condition_sep(ast, lst)); if (!*ast) gen_node(ast); - node = (*ast)->item; token = (*lst)->content; // if (node->type != TK_DO) // { @@ -32,7 +33,6 @@ int add_sep(t_btree **ast, t_list **lst) join_ast(ast, &new_node); node = (new_node)->item; // } - node->type = token->type; - + node->type = token->type; return (0); } diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index a9d1494c..1d176325 100644 --- a/42sh/src/parser/aggregate_sym.c +++ b/42sh/src/parser/aggregate_sym.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 17:39:18 by ariard #+# #+# */ -/* Updated: 2017/02/20 16:06:08 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:10:21 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -232,20 +232,20 @@ int aggregate_sym(t_sym **stack, t_sym *new_sym, t_parstate *state) int i; i = 0; - DG("aggregate head %s && sym %s", - read_state(**stack), read_state(*new_sym)); +// DG("aggregate head %s && sym %s", +// read_state(**stack), read_state(*new_sym)); while (g_aggrematch[i].top) { if (*new_sym == g_aggrematch[i].top && MATCH_STACK(**stack, g_aggrematch[i].under)) { - DG("MATCH : %s", read_state(g_aggrematch[i].new_sym)); +// DG("MATCH : %s", read_state(g_aggrematch[i].new_sym)); *new_sym = g_aggrematch[i].new_sym; if (g_aggrematch[i].erase_sym) { pop_stack(stack, g_aggrematch[i].erase_sym); - DG("stack after pop: %s", read_state(**stack)); +// DG("stack after pop: %s", read_state(**stack)); } if (eval_sym(**stack, *new_sym)) return ((*state = ERROR)); diff --git a/42sh/src/parser/build_tree.c b/42sh/src/parser/build_tree.c index d4497c29..b8a0b4f4 100644 --- a/42sh/src/parser/build_tree.c +++ b/42sh/src/parser/build_tree.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/15 18:32:59 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:40:15 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:53:55 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,7 +35,7 @@ t_treematch g_treematch[] = static int isseparator(int type, int cache) { if (type == TK_NEWLINE && (cache == TK_WHILE || cache == TK_DO - || cache == TK_NEWLINE)) + || cache == TK_NEWLINE || cache == TK_THEN)) return (0); return (1); } diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index a37e7558..677e0bb8 100644 --- a/42sh/src/parser/eval_sym.c +++ b/42sh/src/parser/eval_sym.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 16:26:30 by ariard #+# #+# */ -/* Updated: 2017/02/20 16:06:15 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:10:06 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -600,7 +600,7 @@ int eval_sym(t_sym stack, t_sym new_sym) { int i; - DG("eval head %s && sym %s", read_state(stack), read_state(new_sym)); +// DG("eval head %s && sym %s", read_state(stack), read_state(new_sym)); i = 0; while (g_stackmatch[i].top) { diff --git a/42sh/src/parser/ft_parse.c b/42sh/src/parser/ft_parse.c index 54349019..09329b2d 100644 --- a/42sh/src/parser/ft_parse.c +++ b/42sh/src/parser/ft_parse.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 14:30:22 by ariard #+# #+# */ -/* Updated: 2017/02/19 18:41:29 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:32:27 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,7 +33,6 @@ int ft_parse2(t_btree **ast, t_list **token) t_sym *stack; t_parstate state; - (void)ast; state = UNDEFINED; new_sym = ft_memalloc(sizeof(t_sym)); stack = ft_memalloc(sizeof(t_sym) * 1000); @@ -57,8 +56,8 @@ int ft_parse2(t_btree **ast, t_list **token) return (error_syntax(token)); if (state == SUCCESS) ft_putstr("success"); -// build_tree(ast, token); -// btree_print(STDBUG, *ast, &ft_putast); + build_tree(ast, token); + btree_print(STDBUG, *ast, &ft_putast); if ((end_instruction(*stack) && !(*token)->next) || *stack == PROGRAM) insert_linebreak(token); else diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index fc35aea6..f1c6bf0b 100644 --- a/42sh/src/parser/produce_sym.c +++ b/42sh/src/parser/produce_sym.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 17:58:34 by ariard #+# #+# */ -/* Updated: 2017/02/20 15:54:45 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:09:54 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -86,8 +86,8 @@ int produce_sym(t_sym stack, t_sym *new_sym, t_list **lst) int i; token = (*lst)->content; - DG("produce stack : %s && token : %s", read_state(stack), - read_state(token->type)); +// DG("produce stack : %s && token : %s", read_state(stack), +// read_state(token->type)); i = 0; *new_sym = 0; while (g_prodmatch[i].new_sym) @@ -95,7 +95,7 @@ int produce_sym(t_sym stack, t_sym *new_sym, t_list **lst) if (token->type == g_prodmatch[i].token && stack == g_prodmatch[i].stack) { - DG("MATCH : %s", read_state(g_prodmatch[i].new_sym)); +// DG("MATCH : %s", read_state(g_prodmatch[i].new_sym)); *new_sym = g_prodmatch[i].new_sym; } i++; diff --git a/42sh/src/parser/read_stack.c b/42sh/src/parser/read_stack.c index 56435060..fa73330d 100644 --- a/42sh/src/parser/read_stack.c +++ b/42sh/src/parser/read_stack.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 15:32:10 by ariard #+# #+# */ -/* Updated: 2017/02/20 15:04:21 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:09:16 by ariard ### ########.fr */ /* */ /* ************************************************************************** */