bitwise pour exclure next_token malvenu

This commit is contained in:
ariard@student.42.fr 2017-02-14 19:09:30 +01:00
parent fd951302a3
commit 0040a07ce9
7 changed files with 36 additions and 42 deletions

Binary file not shown.

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */
/* Updated: 2017/02/13 22:33:39 by ariard ### ########.fr */
/* Updated: 2017/02/14 19:07:15 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
@ -115,15 +115,13 @@ enum e_sym
FUNC,
PIPE_SEMI_SEQUENCE,
ALL = 200,
PATTERN_CASE,
ALL_SEPERATOR,
};
# define PATTERN_CASE (PATTERN | TK_PAREN_OPEN)
# define ALL_SEPARATOR (TK_NEWLINE | TK_SEMI | TK_AMP)
typedef int t_sym;
# define REDIR (TK_IO_NUMBER | TK_LESS | TK_LESSAND | TK_GREATAND | TK_DGREAT\
| TK_LESSGREAT | TK_CLOBBER | TK_DLESS | TK_DLESSDASH | TK_WORD)
/*
typedef unsigned long long int t_sym;
@ -180,6 +178,11 @@ typedef unsigned long long int t_sym;
#define ALL_SYM !0
//#define ALL_SYM -1UL
*/
# define MATCH_STACK(x, y) (x == y || x == ALL)
# define MATCH_NXT_TOKEN(x, y) (x == y || y == ALL || x == 0 || x &~ REDIR)
typedef int t_parstate;
struct s_aggrematch

View file

@ -1 +1 @@
ls | cat | cat | cat
ls

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/22 23:06:34 by ariard #+# #+# */
/* Updated: 2017/02/09 20:30:31 by ariard ### ########.fr */
/* Updated: 2017/02/14 18:29:49 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
@ -31,10 +31,10 @@ int shell_script()
token_print(token);
if (ft_parse(&ast, &token))
return (1);
// btree_print(STDBUG, ast, &ft_putast);
// if (ft_exec(&ast))
// return (1);
// ast = NULL;
// btree_print(STDBUG, ast, &ft_putast);
// if (ft_exec(&ast))
// return (1);
// ast = NULL;
script->size = 0;
get_script_content(script);
}

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
/* Updated: 2017/02/13 22:59:11 by ariard ### ########.fr */
/* Updated: 2017/02/14 19:08:33 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
@ -64,17 +64,17 @@ t_aggrematch g_aggrematch[] =
{REDIRECT_LIST, COMPOUND_COMMAND, COMPOUND_COMMAND, ALL, COMPOUND_COMMAND},
{CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, ALL, CMD_PREFIX},
{CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, ALL, CMD_NAME},
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, ALL_SEPARATOR, 0},
{CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, ALL_SEPARATOR, 0},
{CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, ALL_SEPARATOR, 0},
{CMD_PREFIX, NEWLINE_LIST, SIMPLE_COMMAND, ALL_SEPARATOR, 0},
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, TK_WORD, 0},
{CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, TK_WORD, 0},
{CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, TK_WORD, 0},
{CMD_PREFIX, NEWLINE_LIST, SIMPLE_COMMAND, TK_WORD, 0},
{CMD_WORD, CMD_PREFIX, SIMPLE_COMMAND, ALL_SEPARATOR, CMD_PREFIX},
//to check
{CMD_NAME, LINEBREAK, SIMPLE_COMMAND, ALL, 0},
{CMD_NAME, TK_BANG, SIMPLE_COMMAND, ALL, 0},
{CMD_NAME, SEPARATOR_OP, SIMPLE_COMMAND, ALL, 0},
{CMD_NAME, NEWLINE_LIST, SIMPLE_COMMAND, ALL, 0},
{CMD_NAME, PIPE_SEMI_SEQUENCE, SIMPLE_COMMAND, ALL, 0},
{CMD_NAME, LINEBREAK, SIMPLE_COMMAND, SUFFIX_NAME, 0},
{CMD_NAME, TK_BANG, SIMPLE_COMMAND, SUFFIX_NAME, 0},
{CMD_NAME, SEPARATOR_OP, SIMPLE_COMMAND, SUFFIX_NAME, 0},
{CMD_NAME, NEWLINE_LIST, SIMPLE_COMMAND, SUFFIX_NAME, 0},
{CMD_NAME, PIPE_SEMI_SEQUENCE, SIMPLE_COMMAND, SUFFIX_NAME, 0},
{SIMPLE_COMMAND, ALL, COMMAND, ALL, 0},
{DO_GROUP, NAME, FOR_CLAUSE, ALL, TK_FOR},
@ -140,12 +140,9 @@ int aggregate_sym(t_sym **stack, t_sym *new_sym,
read_state(**stack), read_state(*new_sym), read_state(next));
while (g_aggrematch[i].top)
{
if (*new_sym == g_aggrematch[i].top && (**stack == g_aggrematch[i].under
|| g_aggrematch[i].under == ALL
|| g_aggrematch[i].under == ALL_SEPARATOR)
&& (next == g_aggrematch[i].next_token || next == 0
|| g_aggrematch[i].next_token == ALL
|| (g_aggrematch[i].next_token == ALL_SEPARATOR && next == TK_SEMI)))
if (*new_sym == g_aggrematch[i].top
&& MATCH_STACK(**stack, g_aggrematch[i].under)
&& MATCH_NXT_TOKEN(next, g_aggrematch[i].next_token))
{
DG("MATCH : %s", read_state(g_aggrematch[i].new_sym));
*new_sym = g_aggrematch[i].new_sym;

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/04 16:52:51 by ariard #+# #+# */
/* Updated: 2017/02/06 19:26:02 by ariard ### ########.fr */
/* Updated: 2017/02/14 17:48:58 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,10 +16,9 @@ int parse(t_btree **ast, t_list **token)
{
t_list *start;
(void)ast;
start = *token;
if (get_instruction(token))
return (1);
// if (get_instruction(token))
// return (1);
if (ft_parse(ast, &start))
return (1);
return (0);

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
/* Updated: 2017/02/13 22:59:16 by ariard ### ########.fr */
/* Updated: 2017/02/14 18:26:07 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
@ -26,10 +26,8 @@ t_prodmatch g_prodmatch[] =
{TK_N_WORD, CMD_WORD, CMD_SUFFIX},
{TK_N_WORD, CMD_NAME, CMD_SUFFIX},
{TK_N_WORD, LINEBREAK, CMD_NAME},
{TK_N_WORD, NEWLINE_LIST, CMD_NAME},
//to delete
{TK_N_WORD, TK_SEMI, CMD_NAME},
{TK_N_WORD, NEWLINE_LIST, CMD_NAME},
{TK_N_WORD, TK_BANG, CMD_NAME},
{TK_N_WORD, PIPE_SEMI_SEQUENCE, CMD_NAME},
{TK_N_WORD, SEPARATOR_OP, CMD_NAME},
@ -49,13 +47,10 @@ t_prodmatch g_prodmatch[] =
{TK_NEWLINE, LINEBREAK, NEWLINE_LIST},
{TK_SEMI, TERM, SEPARATOR_OP},
{TK_SEMI, LIST, SEPARATOR_OP},
{TK_SEMI, COMPLETE_COMMAND, SEPARATOR_OP},
{TK_SEMI, COMPLETE_COMMANDS, SEPARATOR_OP},
{TK_SEMI, COMPOUND_LIST, SEPARATOR_OP},
{TK_AMP, TERM, SEPARATOR_OP},
{TK_AMP, LIST, SEPARATOR_OP},
{TK_AMP, COMPLETE_COMMAND, SEPARATOR_OP},
{TK_AMP, COMPLETE_COMMANDS, SEPARATOR_OP},
{TK_AMP, LIST, SEPARATOR_OP},
{TK_AMP, COMPOUND_LIST, SEPARATOR_OP},
{0, 0, 0},
};