From cdfc6c6d557e6ccee5ede6b89697ded6f735c0d6 Mon Sep 17 00:00:00 2001 From: "ariard@student.42.fr" Date: Mon, 20 Feb 2017 18:58:46 +0100 Subject: [PATCH] until ok --- 42sh/sample/if/01_if_easy.sh | 5 ++--- 42sh/sample/until/01_until.sh | 11 ++++++++++ 42sh/src/lexer/get_reserved_words.c | 2 +- 42sh/src/parser/.produce_sym.c.swn | Bin 20480 -> 0 bytes 42sh/src/parser/add_cmd.c | 2 +- 42sh/src/parser/add_condition.c | 2 +- 42sh/src/parser/add_loop.c | 16 +++++++------- 42sh/src/parser/aggregate_sym.c | 9 +++++++- 42sh/src/parser/build_tree.c | 3 ++- 42sh/src/parser/eval_sym.c | 31 +++++++++++++++++++++++++++- 42sh/src/parser/ft_parse.c | 2 +- 42sh/src/parser/produce_sym.c | 4 +++- 42sh/src/parser/read_stack.c | 6 +++++- 13 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 42sh/sample/until/01_until.sh delete mode 100644 42sh/src/parser/.produce_sym.c.swn diff --git a/42sh/sample/if/01_if_easy.sh b/42sh/sample/if/01_if_easy.sh index 8d5a9525..171c2a03 100644 --- a/42sh/sample/if/01_if_easy.sh +++ b/42sh/sample/if/01_if_easy.sh @@ -2,8 +2,7 @@ if ls then if ls then - pwd - else pwd + ls | cat + pwd ; ls fi -else ls fi diff --git a/42sh/sample/until/01_until.sh b/42sh/sample/until/01_until.sh new file mode 100644 index 00000000..4233c43f --- /dev/null +++ b/42sh/sample/until/01_until.sh @@ -0,0 +1,11 @@ +until ls +do + until ls + do + pwd | cat + done + until ls + do + pwd ; ls + done +done diff --git a/42sh/src/lexer/get_reserved_words.c b/42sh/src/lexer/get_reserved_words.c index d09cf09e..a99b60db 100644 --- a/42sh/src/lexer/get_reserved_words.c +++ b/42sh/src/lexer/get_reserved_words.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/26 00:07:05 by ariard #+# #+# */ -/* Updated: 2017/02/17 17:30:54 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:54:01 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/.produce_sym.c.swn b/42sh/src/parser/.produce_sym.c.swn deleted file mode 100644 index 747572ce8e1c984c0e4916f253c6dbb69b3f304f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI2OKclO7{{lirCsO)@sJP*X`0a1v0dA70!^K!)Unsew)WcC4rx^t<2nv;n>v=g zQHj#f3y2GF;32gL34tg=>VZ>H54|9S5U2uypaQN1dME;khs3S?XCKZwvDa>?cu3#2 zzpU5u-*3M8@6LL6XATD*Qxbg87hqWKVC*w~cK?-AoGCvsmamrb)k#s{ycGMZeZk6r zZy@NKsyaxYHUj!n)!8G(f>!en1Z&g&TD9P>|6_Eqv z!1XyWr%i1i+`#&SeR@~#>E6umx^w*cVvw2~AP2|+a)2Bl2gm_(fE*wP{?`s@l`eJ? zEx5&O#i+SnwQRlG+`ivj?_E~jWp1xC*Vf~^703LVR^$LVKn{=tl2aj*eg*vQyXa3A<&17lBtZQ#;+#-0Vw zfC`ueX^;Xwunt_gov{zWo8SaE0Q$iuaP>CEJ_c`q6W|~i0{4L5B*wl1=fEqV2GYO- zuHhxax8OW@9!!C~zy(%;FV`}52Gl?p^nkVC$6Fcu2%H7afhWK&a4-0E4PzIu|_*=N!#iYnW9iM(VPZirYoAtk-V;L(r_brFOv+x zFn76UYFh91-G$k*RxE2n43(EPI8Z_wT27Zql3QO7u?40V+NPekG~t|4yO$dqR%68W zOsS@Ew_XWji-@@p@N)5g(Tl1Uviox3M9RzKN+#>&895bBhqK9aE}264QgK#JCmf0+ ziD)h}o|4l_GTmI3krRrSr<9bO6Cd&C(Q#Rg$WH3kIT_JfCI$D}E=J>2c_OZ;$Rd(d zqe@mus$On>mlM@nCfIa|R9w!=x$D^>Ij%qO-OAzTD-qr+dYrSWb-6gR@Ke=V zuo>$7-TN5e;X?ynIYf%Q;z%T9+=%W;9(_H7FLCwsa#Z zN%kAfLwp$b;-zw7W^S^`yNx-&zUgkp{BGP&-K>SX{UYE^T&#fOl}X%bPlk9f(6_@M z2>OEo-ZvNu^o0UJet4c6)0=G-_w@8&3xD+mlcUWtD_{h-!VLifJ9*!Z&_jcv{(+_e zd5=d#v{q&~eq&AcAei|Nf$*swZYki%e8_6nE~9ySY8nn-Su8+~5s{}E-3n;CarYHEhzCi?6EcM62V-Rg>@3DIRVZYI#3!+!{BH$Z7GK{q z0^Y2C;zpnRGX`oxhtR#-&%u@7(vwsEseohF{X;)+Raue#&5Bw zRPuOGqJOjx!P;NMEe#J3>CgXPW1RjF#`DGVzcs)A8$92i2dBUh5CIQ@HDERP6LSIn z0KbFt;C=8mcnzEeC&38V0v-Sx!Oy7UD)<1r4o(5R-W#@xb|eSL0djyGAP2|+a)2Bl k2gm_(;6LI3P1-f)OV diff --git a/42sh/src/parser/add_cmd.c b/42sh/src/parser/add_cmd.c index 74f17a8c..31c7ba6e 100644 --- a/42sh/src/parser/add_cmd.c +++ b/42sh/src/parser/add_cmd.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/15 20:49:15 by ariard #+# #+# */ -/* Updated: 2017/02/20 18:08:21 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:19:04 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/add_condition.c b/42sh/src/parser/add_condition.c index 4b4dc908..b1d43125 100644 --- a/42sh/src/parser/add_condition.c +++ b/42sh/src/parser/add_condition.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/19 18:12:52 by ariard #+# #+# */ -/* Updated: 2017/02/20 18:17:26 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:18:56 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/add_loop.c b/42sh/src/parser/add_loop.c index 465f66cb..fa52c993 100644 --- a/42sh/src/parser/add_loop.c +++ b/42sh/src/parser/add_loop.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 22:17:14 by ariard #+# #+# */ -/* Updated: 2017/02/20 17:46:39 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:58:28 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,12 +24,12 @@ int isloop(t_btree **ast) if ((node->type == TK_NEWLINE || node->type == TK_SEMI || node->type == TK_AMP) && isloop(&(*ast)->right) == 1) return (1); - if (node->type == TK_WHILE && node->full == 1) + if ((node->type == TK_WHILE || node->type == TK_UNTIL) && node->full == 1) { DG("DON ENTER"); return (2); } - if (node->type == TK_WHILE && node->full == 0) + if ((node->type == TK_WHILE || node->type == TK_UNTIL) && node->full == 0) { DG(" NOFULL"); return (1); @@ -46,18 +46,20 @@ int add_loop_cmd(t_btree **ast, t_list **lst) token = (*lst)->content; node = (*ast)->item; DG("add loop cmd"); - if (token->type == TK_WHILE && node->type == TK_WHILE) + if ((token->type == TK_WHILE || token->type == TK_UNTIL) + && (node->type == TK_WHILE || node->type == TK_UNTIL)) { DG("nest one more"); node->nest++; } - if (token->type == TK_DONE && node->type == TK_WHILE && node->nest > 0) + if (token->type == TK_DONE && (node->type == TK_WHILE || node->type == TK_UNTIL) + && node->nest > 0) { node->nest--; DG("nest one less"); } - else if (token->type == TK_DONE && node->type == TK_WHILE - && node->nest == 0) + else if (token->type == TK_DONE && (node->type == TK_WHILE + || node->type == TK_UNTIL) && node->nest == 0) { DG("WHILE FULL"); return ((node->full = 1)); diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index c4b7d367..1181c1e7 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/20 18:03:21 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:50:20 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -62,6 +62,7 @@ t_aggrematch g_aggrematch[] = {NEWLINE_LIST, TK_ELIF, TK_ELIF, TK_ELIF}, {NEWLINE_LIST, TK_ELSE, TK_ELSE, TK_ELSE}, {NEWLINE_LIST, TK_WHILE, TK_WHILE, TK_WHILE}, + {NEWLINE_LIST, TK_UNTIL, TK_UNTIL, TK_UNTIL}, {NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, NEWLINE}, {NEWLINE_LIST, NAME, SEQUENTIAL_SEP, 0}, {NEWLINE_LIST, IN, SEQUENTIAL_SEP, 0}, @@ -114,6 +115,7 @@ t_aggrematch g_aggrematch[] = {CMD_NAME, SEPARATOR_OP, CMD_SUPERIOR, 0}, {CMD_NAME, NEWLINE_LIST, CMD_SUPERIOR, 0}, {CMD_NAME, TK_WHILE, CMD_SUPERIOR, 0}, + {CMD_NAME, TK_UNTIL, CMD_SUPERIOR, 0}, {CMD_NAME, TK_DO, CMD_SUPERIOR, 0}, {CMD_NAME, TK_IF, CMD_SUPERIOR, 0}, {CMD_NAME, TK_ELIF, CMD_SUPERIOR, 0}, @@ -162,6 +164,7 @@ t_aggrematch g_aggrematch[] = {COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, {COMMAND, COMPOUND_LIST, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, TK_WHILE, PIPE_SEMI_SEQUENCE, 0}, + {COMMAND, TK_UNTIL, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, TK_DO, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, TK_IF, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, TK_THEN, PIPE_SEMI_SEQUENCE, 0}, @@ -175,6 +178,7 @@ t_aggrematch g_aggrematch[] = {COMMAND, COMPLETE_CONDITION, PIPE_SEMI_SEQUENCE, 0}, {END_COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {END_COMMAND, TK_WHILE, PIPE_SEQUENCE, 0}, + {END_COMMAND, TK_UNTIL, PIPE_SEQUENCE, 0}, {END_COMMAND, LINEBREAK, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_DO, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_IF, PIPE_SEQUENCE, 0}, @@ -184,6 +188,7 @@ t_aggrematch g_aggrematch[] = {END_COMMAND, COMPLETE_CONDITION, PIPE_SEQUENCE, 0}, {END_COMMAND, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {PIPE_SEQUENCE, TK_WHILE, PIPELINE, 0}, + {PIPE_SEQUENCE, TK_UNTIL, PIPELINE, 0}, {PIPE_SEQUENCE, TK_BANG, PIPELINE, TK_BANG}, {PIPE_SEQUENCE, SEPARATOR_OP, PIPELINE, 0}, {PIPE_SEQUENCE, NEWLINE_LIST, PIPELINE, 0}, @@ -197,6 +202,7 @@ t_aggrematch g_aggrematch[] = {PIPE_SEQUENCE, COMPOUND_LIST, PIPELINE, 0}, {PIPE_SEQUENCE, COMPLETE_CONDITION, PIPELINE, 0}, {PIPELINE, TK_WHILE, AND_OR, 0}, + {PIPELINE, TK_UNTIL, AND_OR, 0}, {PIPELINE, TK_DO, AND_OR, 0}, {PIPELINE, TK_IF, AND_OR, 0}, {PIPELINE, TK_ELIF, AND_OR, 0}, @@ -211,6 +217,7 @@ t_aggrematch g_aggrematch[] = {AND_OR_MAJOR, AND_OR_MAJOR, AND_OR_MAJOR, AND_OR_MAJOR}, {AND_OR, TK_DO, COMPOUND_LIST, 0}, {AND_OR, TK_WHILE, COMPOUND_LIST, 0}, + {AND_OR, TK_UNTIL, COMPOUND_LIST, 0}, {AND_OR, TK_IF, COMPOUND_LIST, 0}, {AND_OR, TK_ELIF, COMPOUND_LIST, 0}, {AND_OR, TK_THEN, COMPOUND_LIST, 0}, diff --git a/42sh/src/parser/build_tree.c b/42sh/src/parser/build_tree.c index 5a0a87cb..e3792335 100644 --- a/42sh/src/parser/build_tree.c +++ b/42sh/src/parser/build_tree.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/15 18:32:59 by ariard #+# #+# */ -/* Updated: 2017/02/20 17:46:48 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:53:00 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,6 +22,7 @@ t_treematch g_treematch[] = {TK_OR_IF, &add_sep}, {TK_AND_IF, &add_sep}, {TK_WHILE, &add_cmd}, + {TK_UNTIL, &add_cmd}, {TK_DO, &add_cmd}, {TK_DONE, &add_cmd}, {TK_IF, &add_cmd}, diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index 72b9015a..ac6775d4 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/20 18:03:18 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:50:14 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -171,6 +171,7 @@ t_stackmatch g_stackmatch[] = {TK_IF, NEWLINE_LIST}, {TK_IF, PIPE_SEMI_SEQUENCE}, {TK_IF, TK_WHILE}, + {TK_IF, TK_UNTIL}, {TK_IF, TK_IF}, {TK_IF, TK_DO}, {TK_IF, TK_ELIF}, @@ -222,6 +223,12 @@ t_stackmatch g_stackmatch[] = {TK_UNTIL, SEPARATOR_OP}, {TK_UNTIL, NEWLINE_LIST}, {TK_UNTIL, PIPE_SEMI_SEQUENCE}, + {TK_UNTIL, TK_DO}, + {TK_UNTIL, TK_WHILE}, + {TK_UNTIL, COMPOUND_LIST}, + {TK_UNTIL, TK_IF}, + {TK_UNTIL, TK_ELIF}, + {TK_UNTIL, TK_THEN}, {TK_FOR, LINEBREAK}, {TK_FOR, TK_BANG}, {TK_FOR, SEPARATOR_OP}, @@ -263,6 +270,7 @@ t_stackmatch g_stackmatch[] = {SEQUENTIAL_SEP, WORDLIST}, {END_COMMAND, PIPE_SEMI_SEQUENCE}, {END_COMMAND, TK_WHILE}, + {END_COMMAND, TK_UNTIL}, {END_COMMAND, TK_DO}, {END_COMMAND, TK_IF}, {END_COMMAND, TK_THEN}, @@ -296,6 +304,7 @@ t_stackmatch g_stackmatch[] = {LINEBREAK, PROGRAM}, {NEWLINE_LIST, TK_DO}, {NEWLINE_LIST, TK_WHILE}, + {NEWLINE_LIST, TK_UNTIL}, {NEWLINE_LIST, TK_IF}, {NEWLINE_LIST, TK_ELIF}, {NEWLINE_LIST, TK_THEN}, @@ -371,6 +380,7 @@ t_stackmatch g_stackmatch[] = {CMD_NAME, PIPE_SEMI_SEQUENCE}, {CMD_NAME, AND_OR_MAJOR}, {CMD_NAME, TK_WHILE}, + {CMD_NAME, TK_UNTIL}, {CMD_NAME, TK_DO}, {CMD_NAME, TK_IF}, {CMD_NAME, TK_ELIF}, @@ -380,6 +390,7 @@ t_stackmatch g_stackmatch[] = {CMD_NAME, COMPLETE_CONDITION}, {CMD_SUPERIOR, TK_WHILE}, + {CMD_SUPERIOR, TK_UNTIL}, {CMD_SUPERIOR, TK_DO}, {CMD_SUPERIOR, TK_IF}, {CMD_SUPERIOR, TK_ELIF}, @@ -396,6 +407,7 @@ t_stackmatch g_stackmatch[] = {CMD_SUPERIOR, AND_OR_MAJOR}, {SIMPLE_COMMAND, TK_WHILE}, + {SIMPLE_COMMAND, TK_UNTIL}, {SIMPLE_COMMAND, TK_DO}, {SIMPLE_COMMAND, TK_IF}, {SIMPLE_COMMAND, TK_ELIF}, @@ -441,6 +453,15 @@ t_stackmatch g_stackmatch[] = {UNTIL_CLAUSE, SEPARATOR_OP}, {UNTIL_CLAUSE, NEWLINE_LIST}, {UNTIL_CLAUSE, PIPE_SEMI_SEQUENCE}, + {UNTIL_CLAUSE, TK_DO}, + {UNTIL_CLAUSE, TK_WHILE}, + {UNTIL_CLAUSE, TK_UNTIL}, + {UNTIL_CLAUSE, TK_IF}, + {UNTIL_CLAUSE, TK_ELIF}, + {UNTIL_CLAUSE, TK_THEN}, + {UNTIL_CLAUSE, TK_ELSE}, + {UNTIL_CLAUSE, COMPOUND_LIST}, + {UNTIL_CLAUSE, COMPLETE_CONDITION}, {WHILE_CLAUSE, LINEBREAK}, {WHILE_CLAUSE, TK_BANG}, {WHILE_CLAUSE, SEPARATOR_OP}, @@ -448,6 +469,7 @@ t_stackmatch g_stackmatch[] = {WHILE_CLAUSE, PIPE_SEMI_SEQUENCE}, {WHILE_CLAUSE, TK_DO}, {WHILE_CLAUSE, TK_WHILE}, + {WHILE_CLAUSE, TK_UNTIL}, {WHILE_CLAUSE, TK_IF}, {WHILE_CLAUSE, TK_ELIF}, {WHILE_CLAUSE, TK_THEN}, @@ -463,6 +485,7 @@ t_stackmatch g_stackmatch[] = {IF_CLAUSE, PIPE_SEMI_SEQUENCE}, {IF_CLAUSE, TK_DO}, {IF_CLAUSE, TK_WHILE}, + {IF_CLAUSE, TK_UNTIL}, {IF_CLAUSE, TK_IF}, {IF_CLAUSE, TK_ELIF}, {IF_CLAUSE, TK_THEN}, @@ -518,6 +541,7 @@ t_stackmatch g_stackmatch[] = {COMPOUND_COMMAND, FUNC}, {COMPOUND_COMMAND, TK_DO}, {COMPOUND_COMMAND, TK_WHILE}, + {COMPOUND_COMMAND, TK_UNTIL}, {COMPOUND_COMMAND, TK_IF}, {COMPOUND_COMMAND, TK_ELIF}, {COMPOUND_COMMAND, TK_THEN}, @@ -525,6 +549,7 @@ t_stackmatch g_stackmatch[] = {COMPOUND_COMMAND, COMPOUND_LIST}, {COMPOUND_COMMAND, COMPLETE_CONDITION}, {COMMAND, TK_WHILE}, + {COMMAND, TK_UNTIL}, {COMMAND, LINEBREAK}, {COMMAND, TK_DO}, {COMMAND, TK_IF}, @@ -542,6 +567,7 @@ t_stackmatch g_stackmatch[] = {AND_OR_MINOR, LINEBREAK}, {AND_OR_MINOR, AND_OR_MAJOR}, {PIPE_SEQUENCE, TK_WHILE}, + {PIPE_SEQUENCE, TK_UNTIL}, {PIPE_SEQUENCE, TK_DO}, {PIPE_SEQUENCE, TK_IF}, {PIPE_SEQUENCE, TK_ELIF}, @@ -555,6 +581,7 @@ t_stackmatch g_stackmatch[] = {PIPE_SEQUENCE, NEWLINE_LIST}, {PIPE_SEQUENCE, AND_OR_MAJOR}, {PIPE_SEMI_SEQUENCE, TK_WHILE}, + {PIPE_SEMI_SEQUENCE, TK_UNTIL}, {PIPE_SEMI_SEQUENCE, TK_DO}, {PIPE_SEMI_SEQUENCE, TK_IF}, {PIPE_SEMI_SEQUENCE, TK_ELIF}, @@ -568,6 +595,7 @@ t_stackmatch g_stackmatch[] = {PIPE_SEMI_SEQUENCE, NEWLINE_LIST}, {PIPE_SEMI_SEQUENCE, AND_OR_MAJOR}, {PIPELINE, TK_WHILE}, + {PIPELINE, TK_UNTIL}, {PIPELINE, TK_DO}, {PIPELINE, TK_IF}, {PIPELINE, TK_ELIF}, @@ -583,6 +611,7 @@ t_stackmatch g_stackmatch[] = {AND_OR_MAJOR, AND_OR_MAJOR}, {AND_OR, TK_DO}, {AND_OR, TK_WHILE}, + {AND_OR, TK_UNTIL}, {AND_OR, TK_IF}, {AND_OR, TK_ELIF}, {AND_OR, TK_THEN}, diff --git a/42sh/src/parser/ft_parse.c b/42sh/src/parser/ft_parse.c index 317c5a00..cdd99360 100644 --- a/42sh/src/parser/ft_parse.c +++ b/42sh/src/parser/ft_parse.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 14:30:22 by ariard #+# #+# */ -/* Updated: 2017/02/20 18:16:44 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:57:14 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index 0c78928c..5807c61d 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/20 18:01:02 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:50:16 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,6 +31,7 @@ t_prodmatch g_prodmatch[] = {TK_N_WORD, AND_OR, CMD_NAME}, {TK_N_WORD, AND_OR_MAJOR, CMD_NAME}, {TK_N_WORD, TK_WHILE, CMD_NAME}, + {TK_N_WORD, TK_UNTIL, CMD_NAME}, {TK_N_WORD, TK_DO, CMD_NAME}, {TK_N_WORD, TK_IF, CMD_NAME}, {TK_N_WORD, TK_THEN, CMD_NAME}, @@ -56,6 +57,7 @@ t_prodmatch g_prodmatch[] = {TK_NAME, TK_FOR, NAME}, {TK_NEWLINE, TK_DO, NEWLINE_LIST}, {TK_NEWLINE, TK_WHILE, NEWLINE_LIST}, + {TK_NEWLINE, TK_UNTIL, NEWLINE_LIST}, {TK_NEWLINE, TK_IF, NEWLINE_LIST}, {TK_NEWLINE, TK_FI, NEWLINE_LIST}, {TK_NEWLINE, TK_ELIF, NEWLINE_LIST}, diff --git a/42sh/src/parser/read_stack.c b/42sh/src/parser/read_stack.c index 3dd67cd2..b13bc4ca 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/20 18:03:26 by ariard ### ########.fr */ +/* Updated: 2017/02/20 18:50:22 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,10 @@ char *read_state(t_sym current) { + if (current == UNTIL_CLAUSE) + return ("UNTIL_CLAUSE"); + if (current == TK_UNTIL) + return ("TK_UNTIL"); if (current == IF_CLAUSE) return ("IF_CLAUSE"); if (current == CONDITION)