ast with while ok next:execution while
This commit is contained in:
parent
42bd66af42
commit
2212c927f8
20 changed files with 148 additions and 20 deletions
|
|
@ -1 +0,0 @@
|
|||
/Users/ariard/Projects/42sh
|
||||
|
|
@ -1 +0,0 @@
|
|||
/Users/ariard/Projects/42sh
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/27 12:49:53 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 16:32:37 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/26 20:57:12 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:14:02 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -80,5 +80,12 @@ int parse_subshell(t_list **list_ast, t_btree **ast,
|
|||
t_list **start, t_list **lst);
|
||||
int parse_newline(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst);
|
||||
|
||||
int parse_while(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst);
|
||||
int parse_do(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst);
|
||||
int parse_done(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst);
|
||||
int parse_list(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
ls ; echo ; pwd | cat > file2
|
||||
ls | cat
|
||||
pwd > file1
|
||||
pwd ; echo hello
|
||||
|
|
|
|||
3
42sh/sample/while.sh
Normal file
3
42sh/sample/while.sh
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
ls ; while [ 1 ]; do
|
||||
echo hello
|
||||
done > file1 ; pwd
|
||||
|
|
@ -1,11 +1,15 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "debut script"
|
||||
|
||||
do
|
||||
|
||||
while [ 1 ]
|
||||
VALUE=3
|
||||
while [ $VALUE -gt 1 ]
|
||||
do
|
||||
sleep 1
|
||||
((VALUE--))
|
||||
echo "a"
|
||||
done
|
||||
done > file1 | cat ; ls
|
||||
|
||||
ls -l > file2 | cat
|
||||
|
||||
echo "fin script"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/24 18:22:35 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/24 20:07:14 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:22:48 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/10 14:18:53 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:21:06 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -32,6 +32,10 @@ char *ft_putast(void *nodein)
|
|||
return (" | ");
|
||||
else if (node->type == TK_COMMAND)
|
||||
return (" COM ");
|
||||
else if (node->type == TK_WHILE)
|
||||
return (" WHILE ");
|
||||
else if (node->type == TK_LIST)
|
||||
return (" LIST ");
|
||||
else if (node->type == TK_GREAT)
|
||||
return (" > ");
|
||||
else if (node->type == TK_LESS)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/22 23:06:34 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/28 23:38:10 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:15:37 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -40,6 +40,7 @@ int shell_script()
|
|||
btree_print(STDBUG, *ast2, &ft_putast);
|
||||
tmp2 = tmp2->next;
|
||||
}
|
||||
return (0);
|
||||
while (list_ast)
|
||||
{
|
||||
if (ft_exec((t_btree **)list_ast->content))
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/30 17:14:58 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/28 23:27:39 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:14:19 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -26,6 +26,10 @@ t_parser g_parser[] =
|
|||
{TK_LESSAND, &parse_lessand},
|
||||
{TK_GREATAND, &parse_greatand},
|
||||
{TK_SUBSHELL, &parse_subshell},
|
||||
{TK_WHILE, &parse_while},
|
||||
{TK_DO, &parse_do},
|
||||
{TK_DONE, &parse_done},
|
||||
{TK_LIST, &parse_list},
|
||||
{TK_WORD, &parse_word},
|
||||
{0, 0},
|
||||
};
|
||||
|
|
|
|||
27
42sh/src/parser/parse_do.c
Normal file
27
42sh/src/parser/parse_do.c
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_do.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/30 16:28:41 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/30 17:15:40 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser.h"
|
||||
|
||||
int parse_do(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst)
|
||||
{
|
||||
t_astnode *node;
|
||||
t_token *token;
|
||||
|
||||
token = (*lst)->content;
|
||||
node = (*ast)->item;
|
||||
node->type = TK_DO;
|
||||
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
||||
ft_parse(list_ast, ast, start);
|
||||
return (0);
|
||||
}
|
||||
27
42sh/src/parser/parse_done.c
Normal file
27
42sh/src/parser/parse_done.c
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_done.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/30 16:36:28 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/30 17:15:00 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser.h"
|
||||
|
||||
int parse_done(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst)
|
||||
{
|
||||
t_astnode *node;
|
||||
t_token *token;
|
||||
|
||||
token = (*lst)->content;
|
||||
node = (*ast)->item;
|
||||
node->type = TK_DONE;
|
||||
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
||||
ft_parse(list_ast, ast, start);
|
||||
return (0);
|
||||
}
|
||||
28
42sh/src/parser/parse_list.c
Normal file
28
42sh/src/parser/parse_list.c
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_list.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/30 16:34:21 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/30 17:22:54 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser.h"
|
||||
|
||||
int parse_list(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst)
|
||||
{
|
||||
t_astnode *node;
|
||||
t_token *token;
|
||||
|
||||
(void)list_ast;
|
||||
token = (*lst)->content;
|
||||
node = (*ast)->item;
|
||||
node->type = TK_LIST;
|
||||
node->data.sstr = ft_sstradd(node->data.sstr, token->data);
|
||||
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/26 19:26:41 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/28 23:24:40 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:14:05 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/28 16:21:51 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/28 23:01:44 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 17:11:05 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
28
42sh/src/parser/parse_while.c
Normal file
28
42sh/src/parser/parse_while.c
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_while.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/30 16:03:28 by ariard #+# #+# */
|
||||
/* Updated: 2017/01/30 17:22:36 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser.h"
|
||||
|
||||
int parse_while(t_list **list_ast, t_btree **ast,
|
||||
t_list **start, t_list **lst)
|
||||
{
|
||||
t_astnode *node;
|
||||
t_token *token;
|
||||
|
||||
token = (*lst)->content;
|
||||
node = (*ast)->item;
|
||||
node->type = TK_WHILE;
|
||||
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
||||
ft_parse(list_ast, &(*ast)->left, start);
|
||||
ft_parse(list_ast, &(*ast)->right, start);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/14 12:49:45 by jhalford #+# #+# */
|
||||
/* Updated: 2017/01/27 13:52:59 by ariard ### ########.fr */
|
||||
/* Updated: 2017/01/30 16:45:53 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -18,8 +18,6 @@ int parse_word(t_list **list_ast, t_btree **ast,
|
|||
t_astnode *node;
|
||||
t_token *token;
|
||||
|
||||
(void)start;
|
||||
(void)list_ast;
|
||||
token = (*lst)->content;
|
||||
node = (*ast)->item;
|
||||
node->type = TK_COMMAND;
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
11
|
||||
Loading…
Reference in a new issue