From 1358c367e68e9a9c731e6cd43189b719a266fa8a Mon Sep 17 00:00:00 2001 From: "ariard@student.42.fr" Date: Fri, 10 Feb 2017 01:43:20 +0100 Subject: [PATCH] jack a raison: les enums ca marche.. --- 42sh/includes/.parser.h.swn | Bin 0 -> 20480 bytes 42sh/includes/lexer.h | 14 ++- 42sh/includes/minishell.h | 3 +- 42sh/includes/parser.h | 129 ++++++++++++++++++++++++++-- 42sh/sample/stack.sh | 2 +- 42sh/src/lexer/ft_lexer.c | 6 +- 42sh/src/lexer/ft_tokenize.c | 2 +- 42sh/src/lexer/get_reserved_words.c | 2 +- 42sh/src/lexer/lexer_then.c | 4 +- 42sh/src/main/data_init.c | 4 +- 42sh/src/parser/.ft_parse.c.swm | Bin 0 -> 12288 bytes 42sh/src/parser/.ft_parse.c.swn | Bin 0 -> 12288 bytes 42sh/src/parser/.produce_sym.c.swn | Bin 0 -> 12288 bytes 42sh/src/parser/eval_sym.c | 30 +++++-- 42sh/src/parser/ft_parse.c | 11 +-- 42sh/src/parser/old_parse.c | 2 +- 42sh/src/parser/parse_dgreat.c | 2 +- 42sh/src/parser/produce_sym.c | 38 ++++---- 42sh/src/parser/read_stack.c | 16 ++-- 42sh/test.sh | 2 + 20 files changed, 197 insertions(+), 70 deletions(-) create mode 100644 42sh/includes/.parser.h.swn create mode 100644 42sh/src/parser/.ft_parse.c.swm create mode 100644 42sh/src/parser/.ft_parse.c.swn create mode 100644 42sh/src/parser/.produce_sym.c.swn create 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..7a3584acb38091b2d7976c605da3d3bb37c73e4d GIT binary patch literal 20480 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 W{@-$uQu9{)e)QzS$)~e(k@as36&l3= literal 0 HcmV?d00001 diff --git a/42sh/includes/lexer.h b/42sh/includes/lexer.h index f55f3b82..4cfa83cb 100644 --- a/42sh/includes/lexer.h +++ b/42sh/includes/lexer.h @@ -6,20 +6,13 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */ -/* Updated: 2017/02/09 20:20:23 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:24:00 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef LEXER_H # define LEXER_H -struct s_nest -{ - long long do_group; -}; - -typedef struct s_nest t_nest; - # include "minishell.h" typedef long long t_type; @@ -43,6 +36,8 @@ typedef long long t_type; * */ +/* + # define TK_LESS (1 << 0) //transparent # define TK_GREAT (1 << 1) //transparent # define TK_DLESS (1 << 2) @@ -73,6 +68,9 @@ typedef long long t_type; # define TK_ELSE (1 << 27) # define TK_UNTIL (1 << 28) +*/ + +# define TK_COMMAND (1 << 10) # define TK_WORD (TK_N_WORD | TK_Q_WORD | TK_DQ_WORD) # define TK_REDIR (0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) # define TK_NON_FREEABLE (TK_PAREN_OPEN | TK_PAREN_CLOSE | TK_BQUOTE) diff --git a/42sh/includes/minishell.h b/42sh/includes/minishell.h index d1a944fb..8fe62ce6 100644 --- a/42sh/includes/minishell.h +++ b/42sh/includes/minishell.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */ -/* Updated: 2017/02/06 23:47:53 by ariard ### ########.fr */ +/* Updated: 2017/02/09 22:31:21 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,7 +69,6 @@ struct s_data t_exec exec; t_jobc jobc; t_script script; - t_nest nest; }; extern t_stof g_builtins[]; diff --git a/42sh/includes/parser.h b/42sh/includes/parser.h index 3c53dfb8..632ee87f 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/09 20:28:03 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:39:33 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,98 @@ * */ +enum e_sym +{ + EMPTY = 1, + 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, + TK_DONE, + TK_IF, + TK_THEN, + TK_FI, + TK_ELIF, + TK_ELSE, + TK_UNTIL, + TK_N_WORD, + TK_Q_WORD, + TK_DQ_WORD, + PROGRAM = 100, + COMPLETE_COMMANDS, + LIST, + AND_OR, + PIPELINE, + PIPE_SEQUENCE, + COMMAND, + COMPOUND_COMMAND, + SUBSHELL, + COMPOUND_LIST, + TERM, + FOR_CLAUSE, + NAME, + IN, + WORDLIST, + CASE_CLAUSE, + CASE_LIST_NS, + CASE_ITEM_NS, + PATTERN, + IF_CLAUSE, + ELSE_PART, + WHILE_CLAUSE, + UNTIL_CLAUSE, + FUNCTION_DEFINITION, + FUNCTION_BODY, + FNAME, + BRACE_GROUP, + DO_GROUP, + SIMPLE_COMMAND, + CMD_NAME, + CMD_WORD, + CMD_PREFIX, + CMD_SUFFIX, + REDIRECT_LIST, + IO_REDIRECT, + IO_FILE, + FILENAME, + IO_HERE, + HERE_END, + NEWLINE_LIST, + LINEBREAK, + SEPARATOR_OP, + SEPARATOR, + SEQUENTIAL_SEP, + 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\ + | TK_DONE | TK_IF | TK_THEN | TK_FI | TK_ELIF | TK_ELSE | TK_UNTIL | TK_N_WORD\ + | TK_Q_WORD | TK_DQ_WORD | PROGRAM | COMPLETE_COMMANDS | LIST\ + | AND_OR | PIPELINE | PIPE_SEQUENCE | COMMAND | COMPOUND_COMMAND | SUBSHELL\ + | COMPOUND_LIST | TERM | FOR_CLAUSE | NAME | IN | WORDLIST | CASE_CLAUSE\ + | CASE_LIST_NS | CASE_ITEM_NS | PATTERN | IF_CLAUSE | ELSE_PART\ + | WHILE_CLAUSE | UNTIL_CLAUSE | FUNCTION_DEFINITION | FUNCTION_BODY | FNAME\ + | BRACE_GROUP | DO_GROUP | SIMPLE_COMMAND | CMD_NAME | CMD_WORD | CMD_PREFIX\ + | CMD_SUFFIX | REDIRECT_LIST | IO_REDIRECT | IO_FILE | FILENAME | IO_HERE\ + | HERE_END | NEWLINE_LIST | LINEBREAK | SEPARATOR_OP | SEPARATOR | SEQUENTIAL_SEP +}; + +typedef unsigned long long int t_sym; + +/* typedef unsigned long long int t_sym; #define PROGRAM (1UL << 0) @@ -69,13 +161,34 @@ typedef unsigned long long int t_sym; #define SEPARATOR (1UL << 44) #define SEQUENTIAL_SEP (1UL << 45) -#define SYM_DLESS (1UL << 46) -#define SYM_DGREAT (1UL << 47) -#define SYM_GREATAND (1UL << 48) -#define SYM_GREAT (1UL << 49) -#define SYM_LESSAND (1UL << 50) -#define SYM_LESS (1UL << 51) -#define SYM_SEMI (1UL << 52) +#define SYM_LESS (1UL << 49) +#define SYM_GREAT (1UL << 50) + +#define ALL_SYM !0 +//#define ALL_SYM -1UL +*/ + +struct s_prodmatch +{ + t_type token; + t_sym stack; + t_sym new_sym; +}; + +typedef struct s_prodmatch t_prodmatch; + +extern t_prodmatch g_prodmatch[]; + + +struct s_stackmatch +{ + t_sym under; + t_sym top; +}; + +typedef struct s_stackmatch t_stackmatch; + +extern t_stackmatch g_stackmatch[]; int ft_parse(t_btree **ast, t_list **token); int produce_sym(t_sym stack, t_sym *new_sym, t_list **lst); diff --git a/42sh/sample/stack.sh b/42sh/sample/stack.sh index 1900a1fe..4ec79147 100644 --- a/42sh/sample/stack.sh +++ b/42sh/sample/stack.sh @@ -1 +1 @@ -ls ; +ls > file1 > file2 diff --git a/42sh/src/lexer/ft_lexer.c b/42sh/src/lexer/ft_lexer.c index 48385360..2063e7dd 100644 --- a/42sh/src/lexer/ft_lexer.c +++ b/42sh/src/lexer/ft_lexer.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/02 15:30:59 by jhalford #+# #+# */ -/* Updated: 2017/02/09 15:36:59 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:24:32 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,8 +21,8 @@ int ft_lexer(t_list **alst, char **command) ret = 1; else if (ft_tokenize(alst, *command, DEFAULT)) ret = 1; - else if (ft_post_tokenize(alst, command)) - ret = 1; +// else if (ft_post_tokenize(alst, command)) +// ret = 1; ft_strdel(command); return (ret); } diff --git a/42sh/src/lexer/ft_tokenize.c b/42sh/src/lexer/ft_tokenize.c index 43d9fb29..26b35eca 100644 --- a/42sh/src/lexer/ft_tokenize.c +++ b/42sh/src/lexer/ft_tokenize.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */ -/* Updated: 2017/02/09 19:54:13 by ariard ### ########.fr */ +/* Updated: 2017/02/09 21:55:06 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/lexer/get_reserved_words.c b/42sh/src/lexer/get_reserved_words.c index 00fd33ca..8e05c32c 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/06 20:37:28 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:13:35 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/lexer/lexer_then.c b/42sh/src/lexer/lexer_then.c index ad4f937b..c00c521c 100644 --- a/42sh/src/lexer/lexer_then.c +++ b/42sh/src/lexer/lexer_then.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/31 23:29:49 by ariard #+# #+# */ -/* Updated: 2017/01/31 23:59:37 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:15:01 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,6 @@ int lexer_then(t_list **alst, char *str) } token = (*alst)->content; token->type = TK_THEN; - state = LIST; + state = TK_WORD; return (ft_tokenize(&(*alst)->next, str + 4, state)); } diff --git a/42sh/src/main/data_init.c b/42sh/src/main/data_init.c index a865b92c..6582e39b 100644 --- a/42sh/src/main/data_init.c +++ b/42sh/src/main/data_init.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */ -/* Updated: 2017/02/03 14:34:02 by ariard ### ########.fr */ +/* Updated: 2017/02/09 22:31:50 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,8 +23,6 @@ int data_init(void) data->env = ft_sstrdup(environ); data->opts = SHELL_OPTS_JOBC; - data->nest.do_group = 0; - data->exec.process.path = NULL; data->exec.process.av = NULL; data->exec.process.fdin = STDIN; diff --git a/42sh/src/parser/.ft_parse.c.swm b/42sh/src/parser/.ft_parse.c.swm new file mode 100644 index 0000000000000000000000000000000000000000..833a54ff378e5a316885855b875d579f24b6afef GIT binary patch literal 12288 zcmeI2PjB2r7{;d@08>H{y@7;=T~WM$y7q1&C|*)1$r5@<8*NxxB*ew#d8Pyz6(CdYuV>aP;lc(A(hIr!11f zTk46aCwS!LAs38$6FJsro#??P_KqcB2|PN1LQc+KSRjkNu71_)wO8ob7eBKI8Tt{r1APPS zLk09P^gh&s&Om=4=U>N86S)NnGE+z*G8l7I0!j1bTAxV9qNIVn=w8Lhs&e%;%x?3jid7{V}pQKqKD6Z;aop5`bvu&iV z0^M`f$oYW>uxF`YY8I20PShmDZiJ~GU1m2ougY$9&8@*s%}8GrwKg@6Uo!VFL7idF zv$%-LM2uCHNSl^Vu@7X(=jJp?+2Nxl^Tk&M4AwV3_(-|xK3%4G=DTb+Ow%lKMe-TT zutGE&+N53I*K4zy?BAj*OZBAb=*sHgy~|eytC+^UktJ~h3#CtpQ|`P~>!Bis06iH9 zmW9nr=lQEcrq2b-J}r%k9l`6W8l?^zf-0_C{Ct zjNuB_)e%GgP1;=w7Gc=?M?+d~DMxdt?C5_hxdpT84@NjUw7YNk?tWm(daEq&9U<}f zX0qJueQ|D#F=++HY0lG>d^G+TJ>_=a5qVbb#?Y+1PIL^jG9+jPM^4JVF+8@-d|(h5 ZOPr~OoBzvj-rSs*h9~u&H1X1T2A_aoEDLyHu6vAF^6hghcS#lZ{!gZOu%& z4W(2<@Cmpg@ew$1MdF6U7eE|1f#4f(p+e%#*t5-6Xti2aNR?)y7teTp^M3F5JU&F3 z&EC5gFVS<|9zlD8kY|7Y>e}DC&ykbw5EAh;;)$9#xUqnrD}#P_G3bu@0imB(g#J}t ze8gfY{KY^_e8FSCjJROjAIp*Mb>jnA?38uDI&d@x7RZ^PuV3|M<9T}O$&I7Y*j3g6 z>wtB@I$#~J4p;}Q1J(iSz&dySO=^F)&c9leds`h|MzDn33<Mowe*b^-I3XVZ3&3}e5wZFg2A4IZ9ZTj$K)7v%EuHPj^}`osWxLvRroP zX~acI!sDG113f(&bH+g9`;N0YO|xVqal>##LaG!xK{=H|aMvKU!fs1e1kN10w-shi8I)U94{8=zAe=?kLKq2}pH=I#m93QJxj)3_31 zsA?e{T0O-9EQ6liNt&^}M@#05uM5yyMfd3v#q-`_J5iPuu`AM#S%KZ5eW4!h_j)?E zPIOST5@`(BxV*ad*2T+ftGMT0FVduiO)?S_0G$l(RYlF;sIv~pO_Jsk zA&{z1?n2%_m38Rhb%x`znAjJ0&aa@ghz9KxvW(YUR z1pXu;4SM}o{9fSqUZp`0zPuQoIZHQZv^w5Am$=z%VuWwqa5%c2GlVPHQ}+_~!PX0d z;9m)8v#l7-rKY1tE4dA_`U4{L_UP^szBvm`S+7;)y&)tXUoNZD-sk7m7?O5qnC3W5 z$@}9EF;Z-I8KJXgH-u*Ab>l;jRUu(J+}EkbhVald^MPS#DA7|5lmCfup4{{+!sB{R JJiK&1`3K_&!^;2w 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..f06e7bec986a637b0c15bb7ed0edbcca35a20601 GIT binary patch literal 12288 zcmeI2&rcIU6vrQ4%qpnSc=13+n$*&k?ry087a<}LHBcl3{1Jmq*)Dc%*=}~H!KSGu zMo<1Yd+{GICjJ5HAE1dh8yy}U*lkC{h#T}YZ zIuRfOM1Tko0U|&IhyW2F0(+SNce~&oHn1;hA{otHo91Xs6A>T+M1Tko0U|&IhyW2F z0z`la5CI~v2MLt%^Zoq?0A8bl&;RBB|E~@M+(h-D-W&p`p-!OQ^#I&KokD%;26%{i zfO1g{)I4eqrK66cz8?hmhWd*7f_jO1fqI5|ih6?bQ8m;w>LRKa^#kkqi28tfk9vy= zYJ7yEK?H~Z5g-CYfCvx)BJdv&=z!u`yy-bCrS*@1f_ufzWN@V@X~$X%E`_pDcB|xi z9Wh`BCmNO2GB>L??4?{}C47@f=JT>yV@cr~%M!ot4@y{JDc-1A&cGONxfUA@ONgb4 zC@5`E)~a^hVyU3SSUh?ln%P*th7T4eaGgrmecnGXW;PsdIeY{##o^em9VC@R8a6NH z5om)5#_q_bxPT&R&9ZPKQ3d^}=*%wsiIK{A8Am&&*`m zL~*h-J6@cU!3*g8_2v@)C)(y|M4B6J% zu)T9W$3LIL!^_@du`|*nV@Ri%r)+s+{x)`j+qxsx8M#Zt*!z$(x8a8=M#cyeqeVDL h!|i!&$}$XTiK}2>{GSXr`HO96xLfZ@8ecjUegciuWQPC% literal 0 HcmV?d00001 diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index b78cda57..fefbe13a 100644 --- a/42sh/src/parser/eval_sym.c +++ b/42sh/src/parser/eval_sym.c @@ -6,20 +6,32 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 16:26:30 by ariard #+# #+# */ -/* Updated: 2017/02/09 20:14:46 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:42:21 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "parser.h" -int eval_sym(t_sym stack, t_sym new_sym) +t_stackmatch g_stackmatch[] = { - DG("eval head %s && eval sym %s", read_state(stack), read_state(new_sym)); - if (stack == 0 && new_sym == CMD_NAME) - return (0); - if (stack == SYM_GREAT && new_sym == CMD_NAME) - return (0); - if (stack == CMD_NAME && new_sym == SYM_GREAT) - return (0); + {EMPTY, CMD_NAME}, + {TK_GREAT, CMD_NAME}, + {CMD_NAME, TK_GREAT}, + {0, 0}, +}; + +int eval_sym(t_sym stack, t_sym new_sym) +{ + int i; + + DG("eval head %s && sym %s", read_state(stack), read_state(new_sym)); + i = 0; + while (g_stackmatch[i].top) + { + if (stack == g_stackmatch[i].under + && new_sym == g_stackmatch[i].top) + return (0); + i++; + } return (1); } diff --git a/42sh/src/parser/ft_parse.c b/42sh/src/parser/ft_parse.c index f4edb39a..a7316233 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/09 20:32:25 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:40:26 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,23 +22,24 @@ int ft_parse(t_btree **ast, t_list **token) state = UNDEFINED; new_sym = ft_memalloc(sizeof(t_sym)); stack = ft_memalloc(sizeof(t_sym) * 1000); - push_stack(stack, 0); + push_stack(stack, EMPTY); while (*token) { produce_sym(*stack, new_sym, token); + DG("new sym %s", read_state(*new_sym)); if (eval_sym(*stack, *new_sym)) state = ERROR; else { - aggregate_sym(&stack, new_sym); +// aggregate_sym(&stack, new_sym); //superflous sym push_stack(++stack, *new_sym); } if (*stack == PROGRAM) - state = PROGRAM; + state = SUCCESS; if (state == ERROR) return (error_syntax(token)); - if (state == PROGRAM) + if (state == SUCCESS) ft_putstr("success"); // build_tree(token, ast); ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free); diff --git a/42sh/src/parser/old_parse.c b/42sh/src/parser/old_parse.c index 929b2e4a..8814ece1 100644 --- a/42sh/src/parser/old_parse.c +++ b/42sh/src/parser/old_parse.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/30 17:14:58 by jhalford #+# #+# */ -/* Updated: 2017/02/09 15:24:15 by ariard ### ########.fr */ +/* Updated: 2017/02/09 22:06:41 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/parse_dgreat.c b/42sh/src/parser/parse_dgreat.c index 885ac93a..960be5ee 100644 --- a/42sh/src/parser/parse_dgreat.c +++ b/42sh/src/parser/parse_dgreat.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/14 12:49:45 by jhalford #+# #+# */ -/* Updated: 2017/02/03 16:35:32 by ariard ### ########.fr */ +/* Updated: 2017/02/09 21:22:16 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index b3a9cead..bad1b889 100644 --- a/42sh/src/parser/produce_sym.c +++ b/42sh/src/parser/produce_sym.c @@ -6,35 +6,33 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 17:58:34 by ariard #+# #+# */ -/* Updated: 2017/02/09 20:28:25 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:42:12 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "parser.h" +t_prodmatch g_prodmatch[] = +{ + {TK_N_WORD, EMPTY, CMD_NAME}, + {TK_GREAT, ALL, TK_GREAT}, + {TK_N_WORD, ALL, CMD_NAME}, + {0, 0, 0}, +}; + int produce_sym(t_sym stack, t_sym *new_sym, t_list **lst) { t_token *token; + int i; - (void)stack; token = (*lst)->content; - if (token->type == TK_N_WORD) - *new_sym = CMD_NAME; - else if (token->type == TK_NEWLINE) - *new_sym = NEWLINE_LIST; - else if (token->type == TK_DLESS) - *new_sym = SYM_DLESS; - else if (token->type == TK_DGREAT) - *new_sym = SYM_DGREAT; - else if (token->type == TK_GREATAND) - *new_sym = SYM_GREATAND; - else if (token->type == TK_GREAT) - *new_sym = SYM_GREAT; - else if (token->type == TK_LESSAND) - *new_sym = SYM_LESSAND; - else if (token->type == TK_LESS) - *new_sym = SYM_LESS; - else if (token->type == TK_SEMI) - *new_sym = SYM_SEMI; + i = 0; + while (g_prodmatch[i].new_sym) + { + if (token->type == g_prodmatch[i].token + && stack & g_prodmatch[i].stack) + *new_sym = g_prodmatch[i].new_sym; + i++; + } return (0); } diff --git a/42sh/src/parser/read_stack.c b/42sh/src/parser/read_stack.c index 4523b906..4ffb8113 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/09 19:41:44 by ariard ### ########.fr */ +/* Updated: 2017/02/10 01:41:47 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,7 @@ char *read_state(t_sym current) { if (current == CMD_NAME) return ("CMD_NAME"); - if (current == NEWLINE_LIST) +/* if (current == NEWLINE_LIST) return ("NEWLINE_LIST"); if (current == SYM_DLESS) return ("DLESS"); @@ -24,9 +24,11 @@ char *read_state(t_sym current) return ("DGREAT"); if (current == SYM_GREATAND) return ("GREATAND"); - if (current == SYM_GREAT) +*/ if (current == TK_GREAT) return ("GREAT"); - if (current == SYM_LESSAND) + if (current == TK_LESS) + return ("LESS"); +/* if (current == SYM_LESSAND) return ("LESSAND"); if (current == SYM_LESS) return ("LESS"); @@ -34,9 +36,13 @@ char *read_state(t_sym current) return ("SIMPLE_COMMAND"); if (current == PROGRAM) return ("PROGRAM"); +*/ if (current == EMPTY) + return ("EMPTY"); if (current != 0) return ("NON-DEFINED"); - return (NULL); + if (current == 0) + return ("NULL"); + return ("NULL"); } int ft_read_stack(t_sym *stack) diff --git a/42sh/test.sh b/42sh/test.sh new file mode 100644 index 00000000..48d16f00 --- /dev/null +++ b/42sh/test.sh @@ -0,0 +1,2 @@ +while [ 1 ] ; do + ls