From 3d65d42708583a06a8830df7dd570951a8a1c5ba Mon Sep 17 00:00:00 2001 From: "ariard@student.42.fr" Date: Mon, 20 Feb 2017 16:07:54 +0100 Subject: [PATCH] grammar if stable --- 42sh/includes/.parser.h.swn | Bin 0 -> 20480 bytes 42sh/includes/parser.h | 4 +++- 42sh/sample/if/01_if_easy.sh | 4 ++++ 42sh/sample/if/02_if_elif.sh | 10 +++++++++ 42sh/sample/if/03_if_else.sh | 5 +++++ 42sh/sample/if/04_if_elseelsif.sh | 11 +++++++++ 42sh/src/parser/.eval_sym.c.swn | Bin 0 -> 40960 bytes 42sh/src/parser/.produce_sym.c.swn | Bin 0 -> 16384 bytes 42sh/src/parser/.read_stack.c.swn | Bin 0 -> 20480 bytes 42sh/src/parser/aggregate_sym.c | 27 +++++++++++++++++----- 42sh/src/parser/eval_sym.c | 35 ++++++++++++++++++++++++++--- 42sh/src/parser/produce_sym.c | 8 +++++-- 42sh/src/parser/read_stack.c | 6 ++++- 42sh/test.sh | 4 ---- 14 files changed, 97 insertions(+), 17 deletions(-) create mode 100644 42sh/includes/.parser.h.swn create mode 100644 42sh/sample/if/01_if_easy.sh create mode 100644 42sh/sample/if/02_if_elif.sh create mode 100644 42sh/sample/if/03_if_else.sh create mode 100644 42sh/sample/if/04_if_elseelsif.sh create mode 100644 42sh/src/parser/.eval_sym.c.swn create mode 100644 42sh/src/parser/.produce_sym.c.swn create mode 100644 42sh/src/parser/.read_stack.c.swn delete mode 100644 42sh/test.sh diff --git a/42sh/includes/.parser.h.swn b/42sh/includes/.parser.h.swn new file mode 100644 index 0000000000000000000000000000000000000000..dbc833146f12db4969d19374b9554f4e49f21ade GIT binary patch literal 20480 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */ -/* Updated: 2017/02/19 18:43:02 by ariard ### ########.fr */ +/* Updated: 2017/02/20 14:57:52 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -121,6 +121,8 @@ enum e_sym AND_OR_MAJOR, AND_OR_MINOR, END_COMMAND, + CONDITION, + COMPLETE_CONDITION, ALL = 200, }; diff --git a/42sh/sample/if/01_if_easy.sh b/42sh/sample/if/01_if_easy.sh new file mode 100644 index 00000000..4676e8ca --- /dev/null +++ b/42sh/sample/if/01_if_easy.sh @@ -0,0 +1,4 @@ +if ls ; +then + pwd +fi diff --git a/42sh/sample/if/02_if_elif.sh b/42sh/sample/if/02_if_elif.sh new file mode 100644 index 00000000..ae93a37e --- /dev/null +++ b/42sh/sample/if/02_if_elif.sh @@ -0,0 +1,10 @@ +if ls ; +then + pwd +elif ls +then + pwd +elif ls +then + pwd +fi diff --git a/42sh/sample/if/03_if_else.sh b/42sh/sample/if/03_if_else.sh new file mode 100644 index 00000000..a02520e0 --- /dev/null +++ b/42sh/sample/if/03_if_else.sh @@ -0,0 +1,5 @@ +if cat yolo ; +then + pwd +else ls +fi diff --git a/42sh/sample/if/04_if_elseelsif.sh b/42sh/sample/if/04_if_elseelsif.sh new file mode 100644 index 00000000..a52c07e3 --- /dev/null +++ b/42sh/sample/if/04_if_elseelsif.sh @@ -0,0 +1,11 @@ +if cat yolo ; +then + pwd +elif ls +then + pwd +elif pwd +then + ls +else ls +fi diff --git a/42sh/src/parser/.eval_sym.c.swn b/42sh/src/parser/.eval_sym.c.swn new file mode 100644 index 0000000000000000000000000000000000000000..1835f54b978338ed7ddba52caf1fdabd191064e9 GIT binary patch literal 40960 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 BtIPlZ literal 0 HcmV?d00001 diff --git a/42sh/src/parser/.produce_sym.c.swn b/42sh/src/parser/.produce_sym.c.swn new file mode 100644 index 0000000000000000000000000000000000000000..994916b736c7d6d882fce1be1f88e0dc5c979f36 GIT binary patch literal 16384 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 17:39:18 by ariard #+# #+# */ -/* Updated: 2017/02/19 19:32:24 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:06:08 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,8 +20,10 @@ t_aggrematch g_aggrematch[] = {TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, 0}, {TK_PIPE, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR}, {TK_FI, ELSE_PART, IF_CLAUSE, TK_IF}, - {TK_FI, COMPOUND_LIST, IF_CLAUSE, TK_IF}, - {TK_FI, CMD_SUPERIOR, IF_CLAUSE, TK_IF}, + {TK_FI, COMPOUND_LIST, IF_CLAUSE, COMPLETE_CONDITION}, + {TK_FI, COMPLETE_CONDITION, IF_CLAUSE, COMPLETE_CONDITION}, + {TK_FI, CONDITION, IF_CLAUSE, COMPLETE_CONDITION}, + {TK_THEN, CONDITION, COMPLETE_CONDITION, CONDITION}, {TK_DONE, CMD_SUPERIOR, DO_GROUP, TK_DO}, {TK_DONE, COMPOUND_LIST, DO_GROUP, TK_DO}, //Esac ? @@ -35,8 +37,10 @@ t_aggrematch g_aggrematch[] = //watch this {SEPARATOR_OP, CMD_SUPERIOR, SEPARATOR, 0}, {SEPARATOR_OP, COMPOUND_LIST, SEPARATOR, 0}, + {SEPARATOR_OP, PIPE_SEMI_SEQUENCE, SEPARATOR, 0}, {SEPARATOR, CMD_SUPERIOR, END_COMMAND, CMD_SUPERIOR}, {SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, + {SEPARATOR, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {LINEBREAK, SEPARATOR_OP, SEPARATOR, SEPARATOR_OP}, {LINEBREAK, TK_SEMI, SEQUENTIAL_SEP, TK_SEMI}, @@ -64,6 +68,8 @@ t_aggrematch g_aggrematch[] = {NEWLINE_LIST, WORDLIST, SEQUENTIAL_SEP, 0}, {NEWLINE_LIST, TERM, SEPARATOR, 0}, {NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, 0}, + {NEWLINE_LIST, COMPLETE_CONDITION, COMPLETE_CONDITION, COMPLETE_CONDITION}, + {NEWLINE_LIST, CONDITION, CONDITION, CONDITION}, //to check {IO_HERE, TK_IO_NUMBER, IO_REDIRECT, TK_IO_NUMBER}, @@ -94,7 +100,7 @@ t_aggrematch g_aggrematch[] = {REDIRECT_LIST, COMPOUND_COMMAND, COMPOUND_COMMAND, COMPOUND_COMMAND}, {CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, CMD_PREFIX}, {CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, CMD_NAME}, - + {CMD_SUFFIX, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR}, //to abstract {CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0}, {CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, 0}, @@ -114,6 +120,7 @@ t_aggrematch g_aggrematch[] = {CMD_NAME, TK_ELSE, CMD_SUPERIOR, 0}, {CMD_NAME, TK_THEN, CMD_SUPERIOR, 0}, {CMD_NAME, COMPOUND_LIST, CMD_SUPERIOR, 0}, + {CMD_NAME, COMPLETE_CONDITION, 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}, @@ -129,7 +136,8 @@ t_aggrematch g_aggrematch[] = {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}, +// {ELSE_PART, COMPOUND_LIST, ELSE_PART, TK_ELIF}, +// {ELSE_PART, COMPLETE_CONDITION, IF_CLAUSE, COMPLETE_CONDITION}, {IF_CLAUSE, ALL, COMPOUND_COMMAND, 0}, {PATTERN, TK_PAREN_OPEN, PATTERN_CASE, TK_PAREN_OPEN}, {PATTERN, CASE_LIST, PATTERN_CASE, 0}, @@ -140,7 +148,10 @@ t_aggrematch g_aggrematch[] = {CASE_CLAUSE, ALL, COMPOUND_COMMAND, 0}, {FOR_CLAUSE, ALL, COMPOUND_COMMAND, 0}, {TERM, LINEBREAK, COMPOUND_LIST, LINEBREAK}, - {COMPOUND_LIST, TK_ELSE, ELSE_PART, TK_ELSE}, +// {COMPOUND_LIST, TK_ELSE, ELSE_PART, TK_ELSE}, + {COMPOUND_LIST, TK_IF, CONDITION, TK_IF}, + {COMPOUND_LIST, TK_THEN, CONDITION, TK_THEN}, + {COMPOUND_LIST, COMPLETE_CONDITION, COMPLETE_CONDITION, COMPLETE_CONDITION}, // {COMPOUND_LIST, TK_THEN, ELSE_PART, TK_ELIF}, {COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {SUBSHELL, ALL, COMPOUND_COMMAND, 0}, @@ -169,6 +180,7 @@ t_aggrematch g_aggrematch[] = {END_COMMAND, TK_ELIF, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_THEN, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_ELSE, PIPE_SEQUENCE, 0}, + {END_COMMAND, COMPLETE_CONDITION, PIPE_SEQUENCE, 0}, {END_COMMAND, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {PIPE_SEQUENCE, TK_WHILE, PIPELINE, 0}, {PIPE_SEQUENCE, TK_BANG, PIPELINE, TK_BANG}, @@ -182,6 +194,7 @@ t_aggrematch g_aggrematch[] = {PIPE_SEQUENCE, TK_THEN, PIPELINE, 0}, {PIPE_SEQUENCE, TK_ELSE, PIPELINE, 0}, {PIPE_SEQUENCE, COMPOUND_LIST, PIPELINE, 0}, + {PIPE_SEQUENCE, COMPLETE_CONDITION, PIPELINE, 0}, {PIPELINE, TK_WHILE, AND_OR, 0}, {PIPELINE, TK_DO, AND_OR, 0}, {PIPELINE, TK_IF, AND_OR, 0}, @@ -192,6 +205,7 @@ t_aggrematch g_aggrematch[] = {PIPELINE, LINEBREAK, AND_OR, 0}, // {PIPELINE, LINEBREAK, AND_OR, AND_OR}, {PIPELINE, SEPARATOR_OP, AND_OR, 0}, + {PIPELINE, COMPLETE_CONDITION, 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_DO, COMPOUND_LIST, 0}, @@ -201,6 +215,7 @@ t_aggrematch g_aggrematch[] = {AND_OR, TK_THEN, COMPOUND_LIST, 0}, {AND_OR, TK_ELSE, COMPOUND_LIST, 0}, {AND_OR, COMPOUND_LIST, COMPOUND_LIST, 0}, + {AND_OR, COMPLETE_CONDITION, COMPOUND_LIST, 0}, {AND_OR, SEPARATOR_OP, LIST, LIST}, {AND_OR, NEWLINE_LIST, LIST, 0}, {AND_OR, LINEBREAK, LIST, 0}, diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index 5b3f5135..a37e7558 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/19 19:31:38 by ariard ### ########.fr */ +/* Updated: 2017/02/20 16:06:15 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -176,15 +176,21 @@ t_stackmatch g_stackmatch[] = {TK_IF, TK_ELIF}, {TK_IF, TK_THEN}, {TK_IF, COMPOUND_LIST}, + {TK_THEN, CONDITION}, {TK_THEN, COMPOUND_LIST}, - {TK_THEN, CMD_SUPERIOR}, {TK_ELSE, COMPOUND_LIST}, + {TK_ELSE, CONDITION}, + {TK_ELSE, COMPLETE_CONDITION}, {TK_ELIF, COMPOUND_LIST}, + {TK_ELIF, COMPLETE_CONDITION}, + {TK_ELIF, CONDITION}, {TK_FI, ELSE_PART}, {TK_FI, COMPOUND_LIST}, {TK_FI, CMD_SUPERIOR}, {TK_FI, END_COMMAND}, + {TK_FI, CONDITION}, {TK_DO, CMD_SUPERIOR}, + {TK_FI, COMPLETE_CONDITION}, {TK_DO, COMPOUND_LIST}, {TK_DO, NAME}, {TK_DO, SEQUENTIAL_SEP}, @@ -263,13 +269,16 @@ t_stackmatch g_stackmatch[] = {END_COMMAND, TK_ELSE}, {END_COMMAND, LINEBREAK}, {END_COMMAND, COMPOUND_LIST}, + {END_COMMAND, COMPLETE_CONDITION}, {SEPARATOR, CMD_SUPERIOR}, {SEPARATOR, TERM}, {SEPARATOR, COMPOUND_LIST}, + {SEPARATOR, PIPE_SEMI_SEQUENCE}, {SEPARATOR_OP, CMD_SUPERIOR}, {SEPARATOR_OP, LIST}, {SEPARATOR_OP, TERM}, {SEPARATOR_OP, COMPOUND_LIST}, + {SEPARATOR_OP, PIPE_SEMI_SEQUENCE}, {LINEBREAK, TK_SEMI}, {LINEBREAK, SEPARATOR_OP}, {LINEBREAK, TK_PAREN_CLOSE}, @@ -298,6 +307,8 @@ t_stackmatch g_stackmatch[] = {NEWLINE_LIST, TERM}, {NEWLINE_LIST, COMPOUND_LIST}, {NEWLINE_LIST, COMPLETE_COMMANDS}, + {NEWLINE_LIST, COMPLETE_CONDITION}, + {NEWLINE_LIST, CONDITION}, {HERE_END, TK_DLESS}, {HERE_END, TK_DLESSDASH}, {IO_HERE, TK_IO_NUMBER}, @@ -345,6 +356,7 @@ t_stackmatch g_stackmatch[] = {REDIRECT_LIST, COMPOUND_COMMAND}, {CMD_SUFFIX, CMD_WORD}, {CMD_SUFFIX, CMD_NAME}, + {CMD_SUFFIX, CMD_SUPERIOR}, {CMD_PREFIX, LINEBREAK}, {CMD_PREFIX, TK_BANG}, {CMD_PREFIX, SEPARATOR_OP}, @@ -364,6 +376,7 @@ t_stackmatch g_stackmatch[] = {CMD_NAME, TK_THEN}, {CMD_NAME, TK_ELSE}, {CMD_NAME, COMPOUND_LIST}, + {CMD_NAME, COMPLETE_CONDITION}, {CMD_SUPERIOR, TK_WHILE}, {CMD_SUPERIOR, TK_DO}, @@ -372,6 +385,7 @@ t_stackmatch g_stackmatch[] = {CMD_SUPERIOR, TK_THEN}, {CMD_SUPERIOR, TK_ELSE}, {CMD_SUPERIOR, COMPOUND_LIST}, + {CMD_SUPERIOR, COMPLETE_CONDITION}, {CMD_SUPERIOR, LINEBREAK,}, {CMD_SUPERIOR, TK_BANG}, {CMD_SUPERIOR, SEPARATOR_OP}, @@ -387,6 +401,7 @@ t_stackmatch g_stackmatch[] = {SIMPLE_COMMAND, TK_THEN}, {SIMPLE_COMMAND, TK_ELSE}, {SIMPLE_COMMAND, COMPOUND_LIST}, + {SIMPLE_COMMAND, COMPLETE_CONDITION}, {SIMPLE_COMMAND, LINEBREAK}, {SIMPLE_COMMAND, TK_BANG}, {SIMPLE_COMMAND, SEPARATOR_OP}, @@ -399,6 +414,9 @@ t_stackmatch g_stackmatch[] = {DO_GROUP, SEQUENTIAL_SEP}, {LOOP, TK_WHILE}, {LOOP, TK_UNTIL}, + {CONDITION, LINEBREAK}, + {CONDITION, COMPOUND_LIST}, + {COMPLETE_CONDITION, LINEBREAK}, {BRACE_GROUP, LINEBREAK}, {BRACE_GROUP, TK_BANG}, {BRACE_GROUP, SEPARATOR_OP}, @@ -432,7 +450,9 @@ t_stackmatch g_stackmatch[] = {WHILE_CLAUSE, TK_THEN}, {WHILE_CLAUSE, TK_ELSE}, {WHILE_CLAUSE, COMPOUND_LIST}, - {ELSE_PART, COMPOUND_LIST}, + {WHILE_CLAUSE, COMPLETE_CONDITION}, +// {ELSE_PART, COMPOUND_LIST}, +// {ELSE_PART, COMPLETE_CONDITION}, {IF_CLAUSE, LINEBREAK}, {IF_CLAUSE, TK_BANG}, {IF_CLAUSE, SEPARATOR_OP}, @@ -444,6 +464,8 @@ t_stackmatch g_stackmatch[] = {IF_CLAUSE, TK_ELIF}, {IF_CLAUSE, TK_THEN}, {IF_CLAUSE, TK_ELSE}, + {IF_CLAUSE, COMPOUND_LIST}, + {IF_CLAUSE, COMPLETE_COMMAND}, {PATTERN, TK_PAREN_OPEN}, {PATTERN, CASE_LIST}, @@ -478,6 +500,7 @@ t_stackmatch g_stackmatch[] = {COMPOUND_LIST, TK_THEN}, {COMPOUND_LIST, TK_ELSE}, {COMPOUND_LIST, COMPOUND_LIST}, + {COMPOUND_LIST, COMPLETE_CONDITION}, {SUBSHELL, LINEBREAK}, {SUBSHELL, TK_BANG}, {SUBSHELL, SEPARATOR_OP}, @@ -496,6 +519,7 @@ t_stackmatch g_stackmatch[] = {COMPOUND_COMMAND, TK_THEN}, {COMPOUND_COMMAND, TK_ELSE}, {COMPOUND_COMMAND, COMPOUND_LIST}, + {COMPOUND_COMMAND, COMPLETE_CONDITION}, {COMMAND, TK_WHILE}, {COMMAND, LINEBREAK}, {COMMAND, TK_DO}, @@ -504,6 +528,7 @@ t_stackmatch g_stackmatch[] = {COMMAND, TK_THEN}, {COMMAND, TK_ELSE}, {COMMAND, COMPOUND_LIST}, + {COMMAND, COMPLETE_CONDITION}, {COMMAND, TK_BANG}, {COMMAND, SEPARATOR_OP}, {COMMAND, NEWLINE_LIST}, @@ -519,6 +544,7 @@ t_stackmatch g_stackmatch[] = {PIPE_SEQUENCE, TK_THEN}, {PIPE_SEQUENCE, TK_ELSE}, {PIPE_SEQUENCE, COMPOUND_LIST}, + {PIPE_SEQUENCE, COMPLETE_CONDITION}, {PIPE_SEQUENCE, LINEBREAK}, {PIPE_SEQUENCE, TK_BANG}, {PIPE_SEQUENCE, SEPARATOR_OP}, @@ -531,6 +557,7 @@ t_stackmatch g_stackmatch[] = {PIPE_SEMI_SEQUENCE, TK_THEN}, {PIPE_SEMI_SEQUENCE, TK_ELSE}, {PIPE_SEMI_SEQUENCE, COMPOUND_LIST}, + {PIPE_SEMI_SEQUENCE, COMPLETE_CONDITION}, {PIPE_SEMI_SEQUENCE, LINEBREAK}, {PIPE_SEMI_SEQUENCE, TK_BANG}, {PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, @@ -543,6 +570,7 @@ t_stackmatch g_stackmatch[] = {PIPELINE, TK_THEN}, {PIPELINE, TK_ELSE}, {PIPELINE, COMPOUND_LIST}, + {PIPELINE, COMPLETE_CONDITION}, {PIPELINE, LINEBREAK}, {PIPELINE, SEPARATOR_OP}, {PIPELINE, NEWLINE_LIST}, @@ -556,6 +584,7 @@ t_stackmatch g_stackmatch[] = {AND_OR, TK_THEN}, {AND_OR, TK_ELSE}, {AND_OR, COMPOUND_LIST}, + {AND_OR, COMPLETE_CONDITION}, {AND_OR, LINEBREAK}, {AND_OR, SEPARATOR_OP}, {AND_OR, NEWLINE_LIST}, diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index f52ff681..fc35aea6 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/19 19:31:40 by ariard ### ########.fr */ +/* Updated: 2017/02/20 15:54:45 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,7 @@ t_prodmatch g_prodmatch[] = {TK_N_WORD, TK_CLOBBER, FILENAME}, {TK_N_WORD, CMD_WORD, CMD_SUFFIX}, {TK_N_WORD, CMD_NAME, CMD_SUFFIX}, + {TK_N_WORD, CMD_SUPERIOR, CMD_SUFFIX}, {TK_N_WORD, LINEBREAK, CMD_NAME}, {TK_N_WORD, TK_PIPE, CMD_NAME}, {TK_N_WORD, AND_OR, CMD_NAME}, @@ -36,7 +37,7 @@ t_prodmatch g_prodmatch[] = {TK_N_WORD, TK_ELIF, CMD_NAME}, {TK_N_WORD, TK_ELSE, CMD_NAME}, {TK_N_WORD, COMPOUND_LIST, CMD_NAME}, - + {TK_N_WORD, COMPLETE_CONDITION, CMD_NAME}, {TK_N_WORD, NEWLINE_LIST, CMD_NAME}, {TK_N_WORD, TK_BANG, CMD_NAME}, {TK_N_WORD, PIPE_SEMI_SEQUENCE, CMD_NAME}, @@ -66,9 +67,12 @@ t_prodmatch g_prodmatch[] = {TK_NEWLINE, CMD_SUPERIOR, LINEBREAK}, {TK_NEWLINE, PIPE_SEMI_SEQUENCE, LINEBREAK}, {TK_NEWLINE, COMPOUND_LIST, NEWLINE_LIST}, + {TK_NEWLINE, COMPLETE_CONDITION, NEWLINE_LIST}, + {TK_NEWLINE, CONDITION, NEWLINE_LIST}, {TK_SEMI, CMD_SUPERIOR, SEPARATOR_OP}, {TK_SEMI, TERM, SEPARATOR_OP}, {TK_SEMI, LIST, SEPARATOR_OP}, + {TK_SEMI, PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, {TK_AMP, CMD_SUPERIOR, SEPARATOR_OP}, {TK_AMP, TERM, SEPARATOR_OP}, {TK_AMP, LIST, SEPARATOR_OP}, diff --git a/42sh/src/parser/read_stack.c b/42sh/src/parser/read_stack.c index d5d0c802..56435060 100644 --- a/42sh/src/parser/read_stack.c +++ b/42sh/src/parser/read_stack.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 15:32:10 by ariard #+# #+# */ -/* Updated: 2017/02/19 19:31:42 by ariard ### ########.fr */ +/* Updated: 2017/02/20 15:04:21 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,10 @@ char *read_state(t_sym current) { + if (current == CONDITION) + return ("CONDITION"); + if (current == COMPLETE_CONDITION) + return ("COMPLETE_CONDITION"); if (current == TK_ELSE) return ("TK_ELSE"); if (current == TK_FI) diff --git a/42sh/test.sh b/42sh/test.sh deleted file mode 100644 index 36681fe0..00000000 --- a/42sh/test.sh +++ /dev/null @@ -1,4 +0,0 @@ -if cat yolo -then ls -else pwd -fi