diff --git a/42sh/includes/.parser.h.swn b/42sh/includes/.parser.h.swn new file mode 100644 index 00000000..2abcaac7 Binary files /dev/null and b/42sh/includes/.parser.h.swn differ diff --git a/42sh/includes/parser.h b/42sh/includes/parser.h index d15dc7a9..8ca18491 100644 --- a/42sh/includes/parser.h +++ b/42sh/includes/parser.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */ -/* Updated: 2017/02/10 15:58:05 by ariard ### ########.fr */ +/* Updated: 2017/02/12 17:41:16 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -203,8 +203,8 @@ extern t_prodmatch g_prodmatch[]; struct s_stackmatch { - t_sym under; t_sym top; + t_sym under; }; typedef struct s_stackmatch t_stackmatch; diff --git a/42sh/src/parser/.eval_sym.c.swm b/42sh/src/parser/.eval_sym.c.swm new file mode 100644 index 00000000..f8bd1d65 Binary files /dev/null and b/42sh/src/parser/.eval_sym.c.swm differ diff --git a/42sh/src/parser/.eval_sym.c.swn b/42sh/src/parser/.eval_sym.c.swn new file mode 100644 index 00000000..15f49d57 Binary files /dev/null and b/42sh/src/parser/.eval_sym.c.swn differ diff --git a/42sh/src/parser/.produce_sym.c.swn b/42sh/src/parser/.produce_sym.c.swn new file mode 100644 index 00000000..222f271b Binary files /dev/null and b/42sh/src/parser/.produce_sym.c.swn differ diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index 35b9ea4d..d2bccfe3 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/09 20:19:29 by ariard ### ########.fr */ +/* Updated: 2017/02/12 18:47:00 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,25 +14,26 @@ t_aggrematch g_aggrematch[] = { - {CMD_SUFFIX, TK_WORD, CMD_SUFFIX}, - {TK_PIPE, TK_WORD, PATTERN}, - {WORDLIST, TK_WORD, WORDLIST}, + {TK_WORD, CMD_SUFFIX, CMD_SUFFIX, ALL, 0}, + {TK_WORD, TK_PIPE, PATTERN, ALL, 0}, + {TK_WORD, WORDLIST, WORDLIST, ALL, 0}, - {CMD_PREFIX, TK_ASSIGNEMENT_WORD, CMD_PREFIX}, + {TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, ALL, 0}, - {ELSE_PART, TK_FI, IF_CLAUSE}, - {COMPOUND_LIST, TK_FI, IF_CLAUSE}, + {TK_FI, ELSE_PART, IF_CLAUSE, ALL, tant que IF}, + {TK_FI, COMPOUND_LIST, IF_CLAUSE, ALL, tant que IF}, - {COMPOUND_LIST, TK_DONE, DO_GROUP}, - {COMPOUND_LIST, TK_RBRACE, BRACE_GROUP}, + {TK_DONE, COMPOUND_LIST, DO_GROUP, ALL, tant DO}, - {TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, 2}, + {TK_RBRACE, COMPOUND_LIST, BRACE_GROUP, ALL tant que LBRACE}, + + {TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, ALL, tant que TK_PAREN_OPEN}, //watch this - {SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, 1}, + {SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, ALL, 0}, - {LINEBREAK, TK_SEMI, SEPARATOR_OP, 1}, -//prediction one + {LINEBREAK, TK_SEMI, SEPARATOR_OP, ALL, tant que TK_SEMI}, +//do one {LINEBREAK, TK_PAREN_CLOSE, TK_ESAC, CASE_ITEM_NS, tant que pattern ou '('}, {NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, ALL, tant que newline}, @@ -42,7 +43,48 @@ t_aggrematch g_aggrematch[] = {NEWLINE_LIST, TERM, SEPARATOR, ALL, 0}, {NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, ALL, 0}, + {IO_HERE, ALL, IO_REDIRECT, ALL, TK_IO_NUMBER}, + + {FILENAME, TK_LESS, IO_FILE, ALL, TK_LESS}, + {FILENAME, TK_LESSAND, IO_FILE, ALL, TK_LESSAND}, + {FILENAME, TK_GREAT, IO_FILE, ALL, TK_GREAT}, + {FILENAME, TK_GREATAND, IO_FILE, ALL, TK_GREATAND}, + {FILENAME, TK_DGREAT, IO_FILE, ALL, TK_DGREAT}, + {FILENAME, TK_LESGREAT, IO_FILE, ALL, TK_LESSGREAT}, + {FILENAME, TK_CLOBBER, IO_FILE, ALL, TK_CLOBBER}, + + {IO_FILE, ALL, IO_REDIRECT, ALL, TK_IO_NUMBER}, + + {IO_REDIRECT, COMPOUND_COMMAND, REDIRECT_LIST, ALL, REDIRECT_LIST}, + {IO_REDIRECT, CMD_SUFFIX, CMD_SUFFIX, ALL, CMD_SUFFIX}, + {IO_REDIRECT, CMD_NAME, CMD_SUFFIX, ALL, 0}, + {IO_REDIRECT, CMD_WORD, CMD_SUFFIX, ALL, 0}, + {IO_REDIRECT, CMD_PREFIX, CMD_PREFIX, ALL, CMD_PREFIX}, + {IO_REDIRECT, LINEBREAK, CMD_PREFIX, ALL, 0}, + {IO_REDIRECT, TK_BANG, CMD_PREFIX, ALL, 0}, + {IO_REDIRECT, SEPARATOR_OP, CMD_PREFIX, ALL, 0}, + {IO_REDIRECT, NEWLINE_LIST, CMD_PREFIX, ALL, 0}, + + {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, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_PREFIX, NEWLINE_LIST, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + + {CMD_WORD, CMD_PREFIX, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, + CMD_PREFIX}, + + {CMD_NAME, LINEBREAK, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_NAME, TK_BANG, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_NAME, SEPARATOR_OP, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {CMD_NAME, NEWLINE_LIST, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0}, + {0, 0, 0}, +} int aggregate_sym(t_sym **stack, t_sym *new_sym) { diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index 72313720..711b4761 100644 --- a/42sh/src/parser/eval_sym.c +++ b/42sh/src/parser/eval_sym.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 16:26:30 by ariard #+# #+# */ -/* Updated: 2017/02/10 16:57:46 by ariard ### ########.fr */ +/* Updated: 2017/02/12 18:46:15 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,22 +14,22 @@ t_stackmatch g_stackmatch[] = { - {CMD_SUFFIX, TK_WORD}, - {TK_PIPE, TK_WORD}, - {CASE, TK_WORD}, - {WORDLIST, TK_WORD}, + {TK_WORD, CMD_SUFFIX}, + {TK_WORD, TK_PIPE}, + {TK_WORD, CASE}, + {TK_WORD, WORDLIST}, - {CMD_PREFIX, TK_ASSIGNEMENT_WORD}, + {TK_ASSIGNEMENT_WORD, CMD_PREFIX}, - {REDIRECT_LIST, TK_IO_NUMBER}, - {CMD_SUFFIX, TK_IO_NUMBER}, - {CMD_PREFIX, TK_IO_NUMBER}, - {CMD_NAME, TK_IO_NUMBER}, - {CMD_WORD, TK_IO_NUMBER}, - {LINEBREAK, TK_IO_NUMBER}, - {TK_BANG, TK_IO_NUMBER}, - {SEPARATOR_OP, TK_IO_NUMBER}, - {NEWLINE_LIST, TK_IO_NUMBER}, + {TK_IO_NUMBER, REDIRECT_LIST}, + {TK_IO_NUMBER, CMD_SUFFIX}, + {TK_IO_NUMBER, CMD_PREFIX}, + {TK_IO_NUMBER, CMD_NAME}, + {TK_IO_NUMBER, CMD_WORD}, + {TK_IO_NUMBER, LINEBREAK}, + {TK_IO_NUMBER, TK_BANG}, + {TK_IO_NUMBER, SEPARATOR_OP}, + {TK_IO_NUMBER, NEWWLINE_LIST}, {TK_AND_IF, AND_OR}, @@ -224,6 +224,65 @@ t_stackmatch g_stackmatch[] = {NEWLINE_LIST, COMPOUND_LIST}, {NEWLINE_LIST, COMPLETE_COMMANDS}, + {HERE_END, DLESS}, + {HERE_END, DLESSDASH}, + + {IO_HERE, TK_IO_NUMBER}, + {IO_HERE, REDIRECT_LIST}, + {IO_HERE, CMD_SUFFIX}, + {IO_HERE, CMD_PREFIX}, + {IO_HERE, CMD_WORD}, + {IO_HERE, CMD_NAME}, + {IO_HERE, LINEBREAK}, + {IO_HERE, TK_BANG}, + {IO_HERE, SEPARATOR_OP}, + {IO_HERE, NEWLINE_LIST}, + + {FILENAME, TK_LESS}, + {FILENAME, TK_LESSAND}, + {FILENAME, TK_GREAT}, + {FILENAME, TK_GREATAND}, + {FILENAME, TK_DGREAT}, + {FILENAME, TK_LESSGREAT}, + {FILENAME, TK_CLOBBER}, + + {IO_FILE, TK_IO_NUMBER}, + {IO_FILE, REDIRECT_LIST}, + {IO_FILE, CMD_SUFFIX}, + {IO_FILE, CMD_PREFIX}, + {IO_FILE, CMD_WORD}, + {IO_FILE, CMD_NAME}, + {IO_FILE, LINEBREAK}, + {IO_FILE, TK_BANG}, + {IO_FILE, SEPARATOR_OP}, + {IO_FILE, NEWLINE_LIST}, + + {IO_REDIRECT, REDIRECT_LIST}, + {IO_REDIRECT, CMD_SUFFIX}, + {IO_REDIRECT, CMD_PREFIX}, + {IO_REDIRECT, CMD_WORD}, + {IO_REDIRECT, CMD_NAME}, + {IO_REDIRECT, LINEBREAK}, + {IO_REDIRECT, TK_BANG}, + {IO_REDIRECT, SEPARATOR_OP}, + {IO_REDIRECT, NEWLINE_LIST}, + + {REDIRECT_LIST, COMPOUND_COMMAND} + + {CMD_SUFFIX, CMD_WORD}, + {CMD_SUFFIX, CMD_NAME}, + + {CMD_PREFIX, LINEBREAK}, + {CMD_PREFIX, TK_BANG}, + {CMD_PREFIX, SEPARATOR_OP}, + {CMD_PREFIX, NEWLINE_LIST}, + + {CMD_WORD, CMD_PREFIX}, + + {CMD_NAME, LINEBREAK}, + {CMD_NAME, TK_BANG}, + {CMD_NAME, SEPARATOR_OP}, + {CMD_NAME, NEWLINE_LIST}, {0, 0}, }; @@ -235,8 +294,7 @@ int eval_sym(t_sym stack, t_sym new_sym) i = 0; while (g_stackmatch[i].top) { - if (stack == g_stackmatch[i].under - && new_sym == g_stackmatch[i].top) + if (new_sym == g_stackmatch[i].top && stack == g.stackmatch[i].under) return (0); i++; } diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index 112ada0f..8dea1220 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/10 16:57:17 by ariard ### ########.fr */ +/* Updated: 2017/02/12 17:41:45 by ariard ### ########.fr */ /* */ /* ************************************************************************** */