From 0040a07ce9aacc6e47531d1a53a25c06e5eb7076 Mon Sep 17 00:00:00 2001 From: "ariard@student.42.fr" Date: Tue, 14 Feb 2017 19:09:30 +0100 Subject: [PATCH] bitwise pour exclure next_token malvenu --- 42sh/includes/.parser.h.swn | Bin 20480 -> 0 bytes 42sh/includes/parser.h | 15 +++++++++------ 42sh/sample/stack.sh | 2 +- 42sh/src/main/shell_script.c | 10 +++++----- 42sh/src/parser/aggregate_sym.c | 29 +++++++++++++---------------- 42sh/src/parser/parse.c | 7 +++---- 42sh/src/parser/produce_sym.c | 15 +++++---------- 7 files changed, 36 insertions(+), 42 deletions(-) delete mode 100644 42sh/includes/.parser.h.swn diff --git a/42sh/includes/.parser.h.swn b/42sh/includes/.parser.h.swn deleted file mode 100644 index 163f04d89d5281e593a7a318388f290b64dcfda1..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/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 diff --git a/42sh/sample/stack.sh b/42sh/sample/stack.sh index 968d1077..30cde0b2 100644 --- a/42sh/sample/stack.sh +++ b/42sh/sample/stack.sh @@ -1 +1 @@ -ls | cat | cat | cat +ls diff --git a/42sh/src/main/shell_script.c b/42sh/src/main/shell_script.c index 0c33c5b3..1e953693 100644 --- a/42sh/src/main/shell_script.c +++ b/42sh/src/main/shell_script.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index f4424ef4..a845f0ad 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/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; diff --git a/42sh/src/parser/parse.c b/42sh/src/parser/parse.c index b96698de..f21dacab 100644 --- a/42sh/src/parser/parse.c +++ b/42sh/src/parser/parse.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index bf36bd82..4ab45e5f 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/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}, };