while error check doing
This commit is contained in:
parent
21e98d1364
commit
4ef7af6e20
21 changed files with 121 additions and 90 deletions
Binary file not shown.
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/17 17:11:45 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 18:49:28 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1 @@
|
|||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
echo hello
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
ls
|
||||
while ls
|
||||
do
|
||||
while ls
|
||||
do
|
||||
echo world
|
||||
done
|
||||
done
|
||||
pwd
|
||||
done
|
||||
ls | cat | cat | cat | cat | cat
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
< file1 ls | cat | cat | ls > file2
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/02 15:30:59 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/10 01:24:32 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:28:32 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -21,8 +21,8 @@ int ft_lexer(t_list **alst, char **command)
|
|||
ret = 1;
|
||||
else if (ft_tokenize(alst, *command, DEFAULT))
|
||||
ret = 1;
|
||||
// else if (ft_post_tokenize(alst, command))
|
||||
// ret = 1;
|
||||
else if (ft_post_tokenize(alst, command))
|
||||
ret = 1;
|
||||
ft_strdel(command);
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/11 16:11:11 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/04 15:54:27 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:28:15 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -14,12 +14,13 @@
|
|||
|
||||
int ft_post_tokenize(t_list **alst, char **str)
|
||||
{
|
||||
int ret;
|
||||
t_flag tk;
|
||||
// int ret;
|
||||
// t_flag tk;
|
||||
|
||||
(void)str;
|
||||
// token_print(*alst);
|
||||
get_reserved_words(alst);
|
||||
while ((ret = reduce_parens(alst, *str)))
|
||||
/* while ((ret = reduce_parens(alst, *str)))
|
||||
if (ret == -1)
|
||||
{
|
||||
ft_dprintf(2, "{red}%s: parse error near '('{eoc}\n", SHELL_NAME);
|
||||
|
|
@ -38,5 +39,5 @@ int ft_post_tokenize(t_list **alst, char **str)
|
|||
return (-1);
|
||||
}
|
||||
DG("new command from bquotes: '%s'", *str);
|
||||
return (0);
|
||||
*/ return (0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/09 21:55:06 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:28:23 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/26 00:07:05 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/10 01:13:35 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:30:54 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ int get_reserved_words(t_list **alst)
|
|||
temp = *alst;
|
||||
previous_token = NULL;
|
||||
while (temp)
|
||||
{
|
||||
{
|
||||
token = temp->content;
|
||||
if (!previous_token || (previous_token->type & RW_SEP))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/22 23:06:34 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/15 20:58:03 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:22:03 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
BIN
42sh/src/parser/.eval_sym.c.swn
Normal file
BIN
42sh/src/parser/.eval_sym.c.swn
Normal file
Binary file not shown.
BIN
42sh/src/parser/.read_stack.c.swn
Normal file
BIN
42sh/src/parser/.read_stack.c.swn
Normal file
Binary file not shown.
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/15 20:49:15 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 16:52:22 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:46:18 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/17 16:39:05 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:14:52 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:19:35 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:05:00 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 19:48:12 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -19,9 +19,10 @@ t_aggrematch g_aggrematch[] =
|
|||
{TK_WORD, WORDLIST, WORDLIST, 0},
|
||||
{TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, 0},
|
||||
{TK_PIPE, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR},
|
||||
{TK_FI, ELSE_PART, IF_CLAUSE, IF},
|
||||
{TK_FI, COMPOUND_LIST, IF_CLAUSE, IF},
|
||||
{TK_DONE, COMPOUND_LIST, DO_GROUP, DO},
|
||||
{TK_FI, ELSE_PART, IF_CLAUSE, TK_IF},
|
||||
{TK_FI, COMPOUND_LIST, IF_CLAUSE, TK_IF},
|
||||
{TK_DONE, CMD_SUPERIOR, DO_GROUP, TK_DO},
|
||||
{TK_DONE, COMPOUND_LIST, DO_GROUP, TK_DO},
|
||||
//Esac ?
|
||||
{TK_ESAC, CASE_LIST, CASE_CLAUSE, TK_CASE},
|
||||
{TK_ESAC, CASE_LIST_NS, CASE_CLAUSE, TK_CASE},
|
||||
|
|
@ -31,7 +32,10 @@ t_aggrematch g_aggrematch[] =
|
|||
{TK_AND_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR},
|
||||
{TK_OR_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR},
|
||||
//watch this
|
||||
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, 0},
|
||||
{SEPARATOR_OP, CMD_SUPERIOR, SEPARATOR, 0},
|
||||
{SEPARATOR_OP, COMPOUND_LIST, SEPARATOR, 0},
|
||||
{SEPARATOR, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR},
|
||||
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
|
||||
{LINEBREAK, SEPARATOR_OP, SEPARATOR, SEPARATOR_OP},
|
||||
{LINEBREAK, TK_SEMI, SEQUENTIAL_SEP, TK_SEMI},
|
||||
|
||||
|
|
@ -45,6 +49,9 @@ t_aggrematch g_aggrematch[] =
|
|||
{LINEBREAK, COMPLETE_COMMANDS, PROGRAM, LINEBREAK},
|
||||
{LINEBREAK, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR},
|
||||
{LINEBREAK, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
|
||||
{NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME},
|
||||
{NEWLINE_LIST, TK_DO, TK_DO, TK_DO},
|
||||
{NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, NEWLINE},
|
||||
{NEWLINE_LIST, NAME, SEQUENTIAL_SEP, 0},
|
||||
{NEWLINE_LIST, IN, SEQUENTIAL_SEP, 0},
|
||||
|
|
@ -94,18 +101,20 @@ t_aggrematch g_aggrematch[] =
|
|||
{CMD_NAME, TK_BANG, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, SEPARATOR_OP, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, NEWLINE_LIST, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, TK_WHILE, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, TK_PIPE, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, PIPE_SEMI_SEQUENCE, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, AND_OR_MAJOR, CMD_SUPERIOR, 0},
|
||||
{SIMPLE_COMMAND, ALL, COMMAND, 0},
|
||||
{DO_GROUP, NAME, FOR_CLAUSE, TK_FOR},
|
||||
{DO_GROUP, SEQUENTIAL_SEP, FOR_CLAUSE, TK_FOR},
|
||||
{DO_GROUP, CMD_SUPERIOR, LOOP, CMD_SUPERIOR},
|
||||
{DO_GROUP, COMPOUND_LIST, LOOP, COMPOUND_LIST},
|
||||
{LOOP, WHILE, WHILE_CLAUSE, WHILE},
|
||||
{LOOP, TK_UNTIL, UNTIL_CLAUSE, TK_UNTIL},
|
||||
{BRACE_GROUP, ALL, COMPOUND_COMMAND, 0},
|
||||
{FUNCTION_BODY, FUNC, FUNCTION_DEFINITION, 0},
|
||||
{FUNCTION_DEFINITION, ALL, COMMAND, 0},
|
||||
{LOOP, TK_WHILE, WHILE_CLAUSE, TK_WHILE},
|
||||
{LOOP, TK_UNTIL, UNTIL_CLAUSE, TK_UNTIL},
|
||||
{UNTIL_CLAUSE, ALL, COMPOUND_COMMAND, 0},
|
||||
{WHILE_CLAUSE, ALL, COMPOUND_COMMAND, 0},
|
||||
{ELSE_PART, COMPOUND_LIST, ELSE_PART, TK_ELIF},
|
||||
|
|
@ -126,22 +135,26 @@ t_aggrematch g_aggrematch[] =
|
|||
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE},
|
||||
{AND_OR_MINOR, LINEBREAK, AND_OR_MAJOR, 0},
|
||||
{AND_OR_MINOR, AND_OR_MAJOR, AND_OR_MAJOR, 0},
|
||||
{COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{COMMAND, TK_WHILE, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, TK_BANG, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, SEPARATOR_OP, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, NEWLINE_LIST, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, LINEBREAK, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE, 0},
|
||||
{PIPE_SEQUENCE, TK_WHILE, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, TK_BANG, PIPELINE, TK_BANG},
|
||||
{PIPE_SEQUENCE, SEPARATOR_OP, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, NEWLINE_LIST, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, LINEBREAK, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, AND_OR_MAJOR, PIPELINE, 0},
|
||||
{PIPELINE, TK_WHILE, AND_OR, 0},
|
||||
{PIPELINE, LINEBREAK, AND_OR, 0},
|
||||
// {PIPELINE, LINEBREAK, AND_OR, AND_OR},
|
||||
{PIPELINE, SEPARATOR_OP, AND_OR, 0},
|
||||
{PIPELINE, AND_OR_MAJOR, AND_OR, AND_OR_MAJOR},
|
||||
{AND_OR_MAJOR, AND_OR_MAJOR, AND_OR_MAJOR, AND_OR_MAJOR},
|
||||
{AND_OR, TK_WHILE, COMPOUND_LIST, 0},
|
||||
{AND_OR, SEPARATOR_OP, LIST, LIST},
|
||||
{AND_OR, NEWLINE_LIST, LIST, 0},
|
||||
{AND_OR, LINEBREAK, LIST, 0},
|
||||
|
|
@ -159,20 +172,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));
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/15 18:32:59 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 16:39:38 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 18:48:56 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -36,8 +36,8 @@ int build_tree(t_btree **ast, t_list **lst)
|
|||
if (g_treematch[i].type == token->type)
|
||||
{
|
||||
|
||||
DG("func TK : '%s' TK : '%s'",
|
||||
read_state(g_treematch[i].type) ,read_state(token->type));
|
||||
// DG("func TK : '%s' TK : '%s'",
|
||||
// read_state(g_treematch[i].type) ,read_state(token->type));
|
||||
return (g_treematch[i].add(ast, lst));
|
||||
}
|
||||
i++;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/09 16:26:30 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:05:11 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 19:43:28 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -175,9 +175,11 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_ELIF, COMPOUND_LIST},
|
||||
{TK_FI, ELSE_PART},
|
||||
{TK_FI, COMPOUND_LIST},
|
||||
{TK_DO, CMD_SUPERIOR},
|
||||
{TK_DO, COMPOUND_LIST},
|
||||
{TK_DO, NAME},
|
||||
{TK_DO, SEQUENTIAL_SEP},
|
||||
{TK_DONE, CMD_SUPERIOR},
|
||||
{TK_DONE, COMPOUND_LIST},
|
||||
{TK_CASE, LINEBREAK},
|
||||
{TK_CASE, TK_BANG},
|
||||
|
|
@ -236,8 +238,10 @@ t_stackmatch g_stackmatch[] =
|
|||
{SEQUENTIAL_SEP, NAME},
|
||||
{SEQUENTIAL_SEP, IN},
|
||||
{SEQUENTIAL_SEP, WORDLIST},
|
||||
{SEPARATOR, CMD_SUPERIOR},
|
||||
{SEPARATOR, TERM},
|
||||
{SEPARATOR, COMPOUND_LIST},
|
||||
{SEPARATOR_OP, CMD_SUPERIOR},
|
||||
{SEPARATOR_OP, LIST},
|
||||
{SEPARATOR_OP, TERM},
|
||||
{SEPARATOR_OP, COMPOUND_LIST},
|
||||
|
|
@ -253,6 +257,9 @@ t_stackmatch g_stackmatch[] =
|
|||
{LINEBREAK, COMPLETE_COMMANDS},
|
||||
{LINEBREAK, CMD_SUPERIOR},
|
||||
{LINEBREAK, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, COMPOUND_LIST},
|
||||
{NEWLINE_LIST, TK_DO},
|
||||
{NEWLINE_LIST, CMD_NAME},
|
||||
{NEWLINE_LIST, NEWLINE_LIST},
|
||||
{NEWLINE_LIST, NAME},
|
||||
{NEWLINE_LIST, IN},
|
||||
|
|
@ -319,7 +326,11 @@ t_stackmatch g_stackmatch[] =
|
|||
{CMD_NAME, NEWLINE_LIST},
|
||||
{CMD_NAME, PIPE_SEMI_SEQUENCE},
|
||||
{CMD_NAME, AND_OR_MAJOR},
|
||||
{CMD_NAME, TK_WHILE},
|
||||
{CMD_NAME, TK_DO},
|
||||
|
||||
{CMD_SUPERIOR, TK_WHILE},
|
||||
{CMD_SUPERIOR, TK_DO},
|
||||
{CMD_SUPERIOR, LINEBREAK,},
|
||||
{CMD_SUPERIOR, TK_BANG},
|
||||
{CMD_SUPERIOR, SEPARATOR_OP},
|
||||
|
|
@ -328,12 +339,14 @@ t_stackmatch g_stackmatch[] =
|
|||
{CMD_SUPERIOR, PIPE_SEMI_SEQUENCE},
|
||||
{CMD_SUPERIOR, AND_OR_MAJOR},
|
||||
|
||||
{SIMPLE_COMMAND, TK_WHILE},
|
||||
{SIMPLE_COMMAND, LINEBREAK},
|
||||
{SIMPLE_COMMAND, TK_BANG},
|
||||
{SIMPLE_COMMAND, SEPARATOR_OP},
|
||||
{SIMPLE_COMMAND, NEWLINE_LIST},
|
||||
{SIMPLE_COMMAND, PIPE_SEMI_SEQUENCE},
|
||||
{SIMPLE_COMMAND, AND_OR_MAJOR},
|
||||
{DO_GROUP, CMD_SUPERIOR},
|
||||
{DO_GROUP, COMPOUND_LIST},
|
||||
{DO_GROUP, NAME},
|
||||
{DO_GROUP, SEQUENTIAL_SEP},
|
||||
|
|
@ -412,6 +425,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{COMPOUND_COMMAND, NEWLINE_LIST},
|
||||
{COMPOUND_COMMAND, PIPE_SEMI_SEQUENCE},
|
||||
{COMPOUND_COMMAND, FUNC},
|
||||
{COMMAND, TK_WHILE},
|
||||
{COMMAND, LINEBREAK},
|
||||
{COMMAND, TK_BANG},
|
||||
{COMMAND, SEPARATOR_OP},
|
||||
|
|
@ -421,22 +435,26 @@ t_stackmatch g_stackmatch[] =
|
|||
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE},
|
||||
{AND_OR_MINOR, LINEBREAK},
|
||||
{AND_OR_MINOR, AND_OR_MAJOR},
|
||||
{PIPE_SEQUENCE, TK_WHILE},
|
||||
{PIPE_SEQUENCE, LINEBREAK},
|
||||
{PIPE_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEQUENCE, SEPARATOR_OP},
|
||||
{PIPE_SEQUENCE, NEWLINE_LIST},
|
||||
{PIPE_SEQUENCE, AND_OR_MAJOR},
|
||||
{PIPE_SEMI_SEQUENCE, TK_WHILE},
|
||||
{PIPE_SEMI_SEQUENCE, LINEBREAK},
|
||||
{PIPE_SEMI_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
|
||||
{PIPE_SEMI_SEQUENCE, NEWLINE_LIST},
|
||||
{PIPE_SEMI_SEQUENCE, AND_OR_MAJOR},
|
||||
{PIPELINE, TK_WHILE},
|
||||
{PIPELINE, LINEBREAK},
|
||||
{PIPELINE, SEPARATOR_OP},
|
||||
{PIPELINE, NEWLINE_LIST},
|
||||
{PIPELINE, AND_OR_MAJOR},
|
||||
{AND_OR_MAJOR, LINEBREAK},
|
||||
{AND_OR_MAJOR, AND_OR_MAJOR},
|
||||
{AND_OR, TK_WHILE},
|
||||
{AND_OR, LINEBREAK},
|
||||
{AND_OR, SEPARATOR_OP},
|
||||
{AND_OR, NEWLINE_LIST},
|
||||
|
|
@ -452,7 +470,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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,20 +6,33 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/09 14:30:22 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:05:21 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 19:48:01 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser.h"
|
||||
|
||||
static void insert_linebreak(t_list **lst)
|
||||
{
|
||||
t_token *token;
|
||||
|
||||
token = (*lst)->content;
|
||||
token->type = LINEBREAK;
|
||||
}
|
||||
|
||||
static int end_instruction(t_sym sym)
|
||||
{
|
||||
if (sym == CMD_SUPERIOR || sym == PIPE_SEMI_SEQUENCE)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int ft_parse2(t_btree **ast, t_list **token)
|
||||
{
|
||||
t_sym *new_sym;
|
||||
t_sym *stack;
|
||||
t_parstate state;
|
||||
//to delete
|
||||
|
||||
(void)ast;
|
||||
state = UNDEFINED;
|
||||
new_sym = ft_memalloc(sizeof(t_sym));
|
||||
stack = ft_memalloc(sizeof(t_sym) * 1000);
|
||||
|
|
@ -27,11 +40,11 @@ int ft_parse2(t_btree **ast, t_list **token)
|
|||
while (*token)
|
||||
{
|
||||
produce_sym(*stack, new_sym, token);
|
||||
// DG("new sym %s", read_state(*new_sym));
|
||||
DG("new sym %s", read_state(*new_sym));
|
||||
if (eval_sym(*stack, *new_sym))
|
||||
state = ERROR;
|
||||
else
|
||||
{
|
||||
{
|
||||
aggregate_sym(&stack, new_sym, &state);
|
||||
push_stack(++stack, *new_sym);
|
||||
}
|
||||
|
|
@ -44,7 +57,10 @@ int ft_parse2(t_btree **ast, t_list **token)
|
|||
if (state == SUCCESS)
|
||||
ft_putstr("success");
|
||||
build_tree(ast, token);
|
||||
ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free);
|
||||
if (end_instruction(*stack) && !(*token)->next)
|
||||
insert_linebreak(token);
|
||||
else
|
||||
ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:04:44 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 19:48:06 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -29,6 +29,8 @@ t_prodmatch g_prodmatch[] =
|
|||
{TK_N_WORD, TK_PIPE, CMD_NAME},
|
||||
{TK_N_WORD, AND_OR, CMD_NAME},
|
||||
{TK_N_WORD, AND_OR_MAJOR, CMD_NAME},
|
||||
{TK_N_WORD, TK_WHILE, CMD_NAME},
|
||||
{TK_N_WORD, TK_DO, CMD_NAME},
|
||||
|
||||
{TK_N_WORD, NEWLINE_LIST, CMD_NAME},
|
||||
{TK_N_WORD, TK_BANG, CMD_NAME},
|
||||
|
|
@ -46,13 +48,18 @@ t_prodmatch g_prodmatch[] =
|
|||
{TK_NAME, SEPARATOR_OP, FNAME},
|
||||
{TK_NAME, NEWLINE_LIST, FNAME},
|
||||
{TK_NAME, TK_FOR, NAME},
|
||||
{TK_NEWLINE, TK_DO, NEWLINE_LIST},
|
||||
{TK_NEWLINE, CMD_NAME, NEWLINE_LIST},
|
||||
{TK_NEWLINE, COMPLETE_COMMANDS, NEWLINE_LIST},
|
||||
{TK_NEWLINE, LINEBREAK, NEWLINE_LIST},
|
||||
{TK_NEWLINE, CMD_SUPERIOR, LINEBREAK},
|
||||
{TK_NEWLINE, PIPE_SEMI_SEQUENCE, LINEBREAK},
|
||||
{TK_NEWLINE, COMPOUND_LIST, NEWLINE_LIST},
|
||||
{TK_SEMI, CMD_SUPERIOR, SEPARATOR_OP},
|
||||
{TK_SEMI, TERM, SEPARATOR_OP},
|
||||
{TK_SEMI, LIST, SEPARATOR_OP},
|
||||
{TK_SEMI, COMPOUND_LIST, SEPARATOR_OP},
|
||||
{TK_AMP, CMD_SUPERIOR, SEPARATOR_OP},
|
||||
{TK_AMP, TERM, SEPARATOR_OP},
|
||||
{TK_AMP, LIST, SEPARATOR_OP},
|
||||
{TK_AMP, COMPOUND_LIST, SEPARATOR_OP},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/09 15:32:10 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/13 22:40:40 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 19:40:45 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -14,6 +14,26 @@
|
|||
|
||||
char *read_state(t_sym current)
|
||||
{
|
||||
if (current == SEQUENTIAL_SEP)
|
||||
return ("SEQUENTIAL_SEP");
|
||||
if (current == SEPARATOR)
|
||||
return ("SEPARATOR");
|
||||
if (current == SEPARATOR_OP)
|
||||
return ("SEPARATOR_OP");
|
||||
if (current == TERM)
|
||||
return ("TERM");
|
||||
if (current == COMPOUND_LIST)
|
||||
return ("COMPOUND_LIST");
|
||||
if (current == DO_GROUP)
|
||||
return ("DO_GROUP");
|
||||
if (current == TK_NEWLINE)
|
||||
return ("TK_NEWLINE");
|
||||
if (current == TK_WHILE)
|
||||
return ("TK_WHILE");
|
||||
if (current == TK_DO)
|
||||
return ("TK_DO");
|
||||
if (current == TK_DONE)
|
||||
return ("TK_DONE");
|
||||
if (current == AND_OR_MINOR)
|
||||
return("AND_OR_MINOR");
|
||||
if (current == AND_OR_MAJOR)
|
||||
|
|
@ -92,27 +112,9 @@ char *read_state(t_sym current)
|
|||
return ("TK_SEMI");
|
||||
if (current == ALL)
|
||||
return ("ALL");
|
||||
/* if (current == NEWLINE_LIST)
|
||||
if (current == NEWLINE_LIST)
|
||||
return ("NEWLINE_LIST");
|
||||
if (current == SYM_DLESS)
|
||||
return ("DLESS");
|
||||
if (current == SYM_DGREAT)
|
||||
return ("DGREAT");
|
||||
if (current == SYM_GREATAND)
|
||||
return ("GREATAND");
|
||||
*/ if (current == TK_GREAT)
|
||||
return ("GREAT");
|
||||
if (current == TK_LESS)
|
||||
return ("LESS");
|
||||
/* if (current == SYM_LESSAND)
|
||||
return ("LESSAND");
|
||||
if (current == SYM_LESS)
|
||||
return ("LESS");
|
||||
if (current == SIMPLE_COMMAND)
|
||||
return ("SIMPLE_COMMAND");
|
||||
if (current == PROGRAM)
|
||||
return ("PROGRAM");
|
||||
*/ if (current == LINEBREAK)
|
||||
if (current == LINEBREAK)
|
||||
return ("LINEBREAK");
|
||||
if (current != 0)
|
||||
return ("NON-DEFINED");
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/15 18:57:44 by ariard #+# #+# */
|
||||
/* Updated: 2017/02/17 17:14:34 by ariard ### ########.fr */
|
||||
/* Updated: 2017/02/17 17:19:41 by ariard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
ls |
|
||||
Loading…
Reference in a new issue