diff --git a/42sh/includes/.parser.h.swm b/42sh/includes/.parser.h.swm new file mode 100644 index 00000000..0fdd297d Binary files /dev/null and b/42sh/includes/.parser.h.swm differ diff --git a/42sh/includes/parser.h b/42sh/includes/parser.h index 8ca18491..314d49c8 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/12 17:41:16 by ariard ### ########.fr */ +/* Updated: 2017/02/12 19:02:48 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,6 +106,8 @@ enum e_sym SEPARATOR_OP, SEPARATOR, SEQUENTIAL_SEP, + LOOP, + FUNC, ALL = TK_LESS | TK_GREAT | TK_DLESS | TK_DGREAT | TK_LESSAND | TK_GREATAND\ | TK_SEMI | TK_PIPE | TK_AND_IF | TK_OR_IF | TK_AMP | TK_PAREN_OPEN\ | TK_PAREN_CLOSE | TK_BQUOTE | TK_SUBSHELL | TK_NEWLINE | TK_WHILE | TK_DO\ diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index d2bccfe3..4ae42267 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/12 18:47:00 by ariard ### ########.fr */ +/* Updated: 2017/02/12 19:18:45 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,7 +35,8 @@ t_aggrematch g_aggrematch[] = {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 '('}, - + {LINEBREAK, TK_PAREN_CLOSE, FUNC, ALL, FNAME}, + {NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, ALL, tant que newline}, {NEWLINE_LIST, NAME, SEPARATOR_SEP, ALL, 0}, {NEWlINE_LIST, IN, SEPARATOR_SEP, ALL, 0}, @@ -83,6 +84,28 @@ t_aggrematch g_aggrematch[] = {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}, + {SIMPLE_COMMAND, ALL, COMMAND, ALL, 0}, + + {DO_GROUP, NAME, FOR_CLAUSE, ALL, FOR}, + {DO_GROUP, SEQUENTIAL_SEP, FOR_CLAUSE, ALL, FOR}, + {DO_GROUP, COMPOUND_LIST, LOOP, ALL, COMPOUND_LIST}, + + {LOOP, WHILE, WHILE_CLAUSE, ALL, WHILE}, + {LOOP, UNTIL, UNTIL_CLAUSE, ALL, UNTIL}, + + {BRACE_GROUP, ALL, COMMAND, ALL, 0}, + + {FUNCTION_BODY, FUNC, FUNCTION_DEFINITION, ALL, 0}, + + {FUNCTION_DEFINITION, ALL, COMMAND, ALL, 0}, + + {UNTIL_CLAUSE, ALL, COMMAND, ALL, 0}, + + {WHILE_CLAUSE, ALL, COMMAND, ALL, 0}, + + {ELSE_PART, COMPOUND_LIST, ELSE_PART, ALL, ELIF}, + + {IF_CLAUSE, ALL, COMMAND, ALL, 0} {0, 0, 0}, } diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index 711b4761..7c2d5e92 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/12 18:46:15 by ariard ### ########.fr */ +/* Updated: 2017/02/12 19:18:30 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -283,6 +283,52 @@ t_stackmatch g_stackmatch[] = {CMD_NAME, TK_BANG}, {CMD_NAME, SEPARATOR_OP}, {CMD_NAME, NEWLINE_LIST}, + + {SIMPLE_COMMNAND, LINEBREAK}, + {SIMPLE_COMMAND, TK_BANG}, + {SIMPLE_COMMAND, SEPARATOR_OP}, + {SIMPLE_COMMAND, NEWLINE_LIST}, + + {DO_GROUP, COMPOUND_LIST}, + {DO_GROUP, NAME}, + {DO_GROUP, SEQUENTIAL_SEP}, + + {LOOP, WHILE}, + {LOOP, UNTIL}, + + {BRACE_GROUP, LINEBREAK}, + {BRACE_GROUP, TK_BANG}, + {BRACE_GROUP, SEPARATOR_OP}, + {BRACE_GROUP, NEWLINE_LIST}, + + {FNAME, LINEBREAK}, + {FNAME, TK_BANG}, + {FNAME, SEPARATOR_OP}, + {FNAME, NEWLINE_LIST}, + + {FUNCTION_BODY, FUNC}, + + {FUNCTION_DEFINITION, LINEBREAK}, + {FUNCTION_DEFINITION, TK_BANG}, + {FUNCTION_DEFINITION, SEPARATOR_OP}, + {FUNCTION_DEFINITION, NEWLINE_LIST}, + + {UNTIL_CLAUSE, LINEBREAK}, + {UNTIL_CLAUSE, TK_BANG}, + {UNTIL_CLAUSE, SEPARATOR_OP}, + {UNTIL_CLAUSE, NEWLINE_LIST}, + + {WHILE_CLAUSE, LINEBREAK}, + {WHILE_CLAUSE, TK_BANG}, + {WHILE_CLAUSE, SEPARATOR_OP}, + {WHILE_CLAUSE, NEWLINE_LIST}, + + {ELSE_PART, COMPOUND_LIST}, + + {IF_CLAUSE, LINEBREAK}, + {IF_CLAUSE, TK_BANG}, + {IF_CLAUSE, SEPARATOR_OP}, + {IF_CLAUSE, NEWLINE_LIST}, {0, 0}, };