before rebase

This commit is contained in:
ariard@student.42.fr 2017-02-02 17:56:40 +01:00
parent f33d2be526
commit 36dcd432a4
15 changed files with 61 additions and 82 deletions

View file

@ -1,20 +1,11 @@
echo "begin loop" echo "begin loop"
while [ 1 ] while [ 1 ]
do do
echo "inner loop1" echo "begin inner loop"
while [ 1 ] while [ 1 ]
do do
echo "love 42" echo "end scd loop"
done done
echo "inner loop2" echo "end inner loop"
while [ 1 ] done
do
echo "inner loop2-1"
while [ 1 ]
do
echo "hello world"
done
echo "salut monde"
done
done
echo "end loop" echo "end loop"

View file

@ -6,7 +6,7 @@
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */ /* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */ /* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
/* Updated: 2017/01/30 23:25:44 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:25:52 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -38,7 +38,6 @@ int exec_command(t_btree **ast)
p->pid = 0; p->pid = 0;
p->attributes = PROCESS_PIPESTART | PROCESS_PIPEEND; p->attributes = PROCESS_PIPESTART | PROCESS_PIPEEND;
if (!(p->script & SCRIPT_LOOP)) // btree_delone(ast, &ast_free);
btree_delone(ast, &ast_free);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/31 19:29:59 by ariard #+# #+# */ /* Created: 2017/01/31 19:29:59 by ariard #+# #+# */
/* Updated: 2017/01/31 19:57:44 by ariard ### ########.fr */ /* Updated: 2017/02/02 15:54:31 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,10 +14,8 @@
int exec_default(t_btree **ast) int exec_default(t_btree **ast)
{ {
t_process *p;
(void)ast;
p = &data_singleton()->exec.process; // btree_delone(ast, &ast_free);
if (!(p->script & SCRIPT_LOOP))
btree_delone(ast, &ast_free);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/30 20:19:29 by ariard #+# #+# */ /* Created: 2017/01/30 20:19:29 by ariard #+# #+# */
/* Updated: 2017/01/30 20:57:51 by ariard ### ########.fr */ /* Updated: 2017/02/02 16:00:40 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,10 +14,7 @@
int exec_list(t_btree **ast) int exec_list(t_btree **ast)
{ {
t_process *p; (void)ast;
// btree_delone(ast, &ast_free);
p = &data_singleton()->exec.process;
if (!(p->script & SCRIPT_LOOP))
btree_delone(ast, &ast_free);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/30 17:33:53 by ariard #+# #+# */ /* Created: 2017/01/30 17:33:53 by ariard #+# #+# */
/* Updated: 2017/01/31 23:20:33 by ariard ### ########.fr */ /* Updated: 2017/02/02 16:30:05 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,30 +14,23 @@
int exec_while(t_btree **ast) int exec_while(t_btree **ast)
{ {
t_list **test_commands;
t_list **consequent_commands; t_list **consequent_commands;
t_astnode *node; t_astnode *node;
t_process *p;
int test; int test;
node = ((*ast)->left)->item;
DG("test command data '%s'", node->data.str);
test_commands = shell_get_ast(node->data.str);
node = ((*ast)->right)->item; node = ((*ast)->right)->item;
DG("consequent command data '%s'", node->data.str); DG("consequent command data '%s'", node->data.str);
consequent_commands = shell_get_ast(node->data.str); consequent_commands = shell_get_ast(node->data.str);
p = &data_singleton()->exec.process;
p->script |= SCRIPT_LOOP;
test = 10; test = 10;
while (test--) while (test--)
{
loop_exec(*consequent_commands); loop_exec(*consequent_commands);
loop_del(*consequent_commands); DG("end loop : '%d'", test);
p->script &= 0; }
btree_delone(ast, &ast_free);
// loop_del(*consequent_commands);
// btree_delone(ast, &ast_free);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/11 16:11:11 by jhalford #+# #+# */ /* Created: 2017/01/11 16:11:11 by jhalford #+# #+# */
/* Updated: 2017/01/22 23:33:04 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:50:45 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,6 +16,7 @@ int ft_post_tokenize(t_list **alst, char *str)
{ {
int ret; int ret;
// get_reserverd_words(alst, str);
while ((ret = reduce_parens(alst, str))) while ((ret = reduce_parens(alst, str)))
if (ret == -1) if (ret == -1)
return (-1); return (-1);

View file

@ -6,7 +6,7 @@
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */ /* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */ /* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */
/* Updated: 2017/01/31 23:58:41 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:50:28 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -29,13 +29,6 @@ int (*g_lexer[])(t_list **alst, char *str) =
&lexer_backslash, &lexer_backslash,
&lexer_var, &lexer_var,
&lexer_special, &lexer_special,
&lexer_while,
&lexer_do,
&lexer_done,
&lexer_if,
&lexer_then,
&lexer_fi,
&lexer_list,
&lexer_comment, &lexer_comment,
}; };

View file

@ -6,25 +6,35 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/26 00:07:05 by ariard #+# #+# */ /* Created: 2017/01/26 00:07:05 by ariard #+# #+# */
/* Updated: 2017/01/31 23:51:56 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:50:17 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "lexer.h" #include "lexer.h"
t_lexstate get_reserved_words(char *str) int get_reserved_words(t_list **alst)
{ {
if (ft_strncmp(str, "while", 5) == 0) t_token token;
return (WHILE);
else if (ft_strncmp(str, "done", 4) == 0 && ft_isalpha(*(str + 4)) == 0) while (*alst)
return (DONE); {
else if (ft_strncmp(str, "do" , 2) == 0 && ft_isalpha(*(str + 2)) == 0) token = (*alst)->content;
return (DO); if (token->type = TK_WORD);
else if (ft_strncmp(str, "if", 2) == 0 && ft_isalpha(*(str + 2)) == 0) {
return (IF); if (ft_strncmp(str, "while", 5) == 0 && ft_isalpha(*(str + 5)) == 0)
else if (ft_strncmp(str, "then", 4) == 0 && ft_isalpha(*(str + 4)) == 0) lexer_while(
return (THEN); else if (ft_strncmp(str, "done", 4) == 0 && ft_isalpha(*(str + 4)) == 0)
else if (ft_strncmp(str, "fi", 2) == 0 && ft_isalpha(*(str + 2)) == 0) return (DONE);
return (FI); else if (ft_strncmp(str, "do" , 2) == 0 && ft_isalpha(*(str + 2)) == 0)
return (DO);
// else if (ft_strncmp(str, "if", 2) == 0 && ft_isalpha(*(str + 2)) == 0)
// return (IF);
// else if (ft_strncmp(str, "then", 4) == 0 && ft_isalpha(*(str + 4)) == 0)
// return (THEN);
// else if (ft_strncmp(str, "fi", 2) == 0 && ft_isalpha(*(str + 2)) == 0)
// return (FI);
}
(*alst) = (*alst)->next;
}
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/26 00:55:33 by ariard #+# #+# */ /* Created: 2017/01/26 00:55:33 by ariard #+# #+# */
/* Updated: 2017/01/31 23:58:50 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:31:07 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -25,8 +25,7 @@ int lexer_list(t_list **alst, char *str)
token_append(token, *str++); token_append(token, *str++);
while (ft_is_delim(*str) || *str == '\n') while (ft_is_delim(*str) || *str == '\n')
str++; str++;
if (ft_strncmp(str, "done", 4) == 0 && (ft_is_delim_list(*(str + 4)) if (ft_strncmp(str, "done", 4) == 0 && ft_isalpha(*(str + 4)) == 0)
|| *(str + 4) == ' '))
return (ft_tokenize(alst, str, DONE)); return (ft_tokenize(alst, str, DONE));
else if (ft_strncmp(str, "do", 2) == 0 && (ft_is_delim_list(*(str + 2)) else if (ft_strncmp(str, "do", 2) == 0 && (ft_is_delim_list(*(str + 2))
|| *(str + 2) == ' ')) || *(str + 2) == ' '))
@ -34,8 +33,7 @@ int lexer_list(t_list **alst, char *str)
else if (ft_strncmp(str, "then", 4) == 0 && (ft_is_delim_list(*(str + 4)) else if (ft_strncmp(str, "then", 4) == 0 && (ft_is_delim_list(*(str + 4))
|| *(str + 4) == ' ')) || *(str + 4) == ' '))
return (ft_tokenize(alst, str, THEN)); return (ft_tokenize(alst, str, THEN));
else if (ft_strncmp(str, "fi", 2) == 0 && (ft_is_delim_list(*(str + 2)) else if (ft_strncmp(str, "fi", 2) == 0 && ft_isalpha(*(str + 2)) == 0)
|| *(str + 2) == ' '))
return (ft_tokenize(alst, str, FI)); return (ft_tokenize(alst, str, FI));
} }
token_append(token, *str++); token_append(token, *str++);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/30 16:29:57 by jhalford #+# #+# */ /* Created: 2016/11/30 16:29:57 by jhalford #+# #+# */
/* Updated: 2017/01/26 00:48:08 by ariard ### ########.fr */ /* Updated: 2017/02/02 16:30:03 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */ /* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */
/* Updated: 2017/01/30 23:17:43 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:50:27 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -25,8 +25,6 @@ int lexer_word(t_list **alst, char *str)
return (ft_tokenize(&(*alst)->next, str, GREAT)); return (ft_tokenize(&(*alst)->next, str, GREAT));
else if (*str == '<') else if (*str == '<')
return (ft_tokenize(&(*alst)->next, str, LESS)); return (ft_tokenize(&(*alst)->next, str, LESS));
else if ((state = get_reserved_words(str)))
return (ft_tokenize(alst, str, state));
token_append(token, *str); token_append(token, *str);
return (ft_tokenize(alst, str + 1, WORD)); return (ft_tokenize(alst, str + 1, WORD));
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/11 16:46:27 by jhalford #+# #+# */ /* Created: 2017/01/11 16:46:27 by jhalford #+# #+# */
/* Updated: 2017/01/22 23:33:08 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:40:29 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/22 23:06:34 by ariard #+# #+# */ /* Created: 2017/01/22 23:06:34 by ariard #+# #+# */
/* Updated: 2017/01/31 23:56:53 by ariard ### ########.fr */ /* Updated: 2017/02/02 17:50:21 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -31,7 +31,6 @@ int shell_script()
return (1); return (1);
DG("after post_tokenize"); DG("after post_tokenize");
token_print(token); token_print(token);
return (0);
if (ft_parse(&list_ast, &ast, &token)) if (ft_parse(&list_ast, &ast, &token))
return (1); return (1);
tmp2 = list_ast; tmp2 = list_ast;
@ -47,6 +46,8 @@ int shell_script()
return (1); return (1);
list_ast = list_ast->next; list_ast = list_ast->next;
} }
*/ loop_exec(list_ast);
*/
loop_exec(list_ast);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/30 16:36:28 by ariard #+# #+# */ /* Created: 2017/01/30 16:36:28 by ariard #+# #+# */
/* Updated: 2017/01/31 19:36:49 by ariard ### ########.fr */ /* Updated: 2017/02/02 16:44:47 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/30 16:03:28 by ariard #+# #+# */ /* Created: 2017/01/30 16:03:28 by ariard #+# #+# */
/* Updated: 2017/01/30 19:52:17 by ariard ### ########.fr */ /* Updated: 2017/02/02 16:30:35 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */