math as a builtin

This commit is contained in:
Antoine Riard 2017-03-14 22:49:44 +01:00
parent dce9df5008
commit 8791eae9c3
23 changed files with 69 additions and 187 deletions

View file

@ -6,7 +6,7 @@
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ # # By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2016/08/29 21:32:58 by wescande #+# #+# # # Created: 2016/08/29 21:32:58 by wescande #+# #+# #
# Updated: 2017/03/14 12:34:49 by gwojda ### ########.fr # # Updated: 2017/03/14 21:59:22 by ariard ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -39,6 +39,7 @@ builtin/builtin_exit.c\
builtin/builtin_export.c\ builtin/builtin_export.c\
builtin/builtin_hash.c\ builtin/builtin_hash.c\
builtin/builtin_history.c\ builtin/builtin_history.c\
builtin/builtin_math.c\
builtin/builtin_read.c\ builtin/builtin_read.c\
builtin/builtin_setenv.c\ builtin/builtin_setenv.c\
builtin/builtin_unset.c\ builtin/builtin_unset.c\
@ -72,7 +73,6 @@ exec/exec_case_branch.c\
exec/exec_elif.c\ exec/exec_elif.c\
exec/exec_else.c\ exec/exec_else.c\
exec/exec_leaf.c\ exec/exec_leaf.c\
exec/exec_math.c\
exec/exec_or_if.c\ exec/exec_or_if.c\
exec/exec_pipe.c\ exec/exec_pipe.c\
exec/exec_reset.c\ exec/exec_reset.c\
@ -279,7 +279,6 @@ parser/add_cmd.c\
parser/add_condition.c\ parser/add_condition.c\
parser/add_func.c\ parser/add_func.c\
parser/add_loop.c\ parser/add_loop.c\
parser/add_math.c\
parser/add_number.c\ parser/add_number.c\
parser/add_redir.c\ parser/add_redir.c\
parser/add_sep.c\ parser/add_sep.c\

View file

@ -30,5 +30,6 @@ int builtin_fg(const char *path, char *const av[], char *const envp[]);
int builtin_bg(const char *path, char *const av[], char *const envp[]); int builtin_bg(const char *path, char *const av[], char *const envp[]);
int builtin_history(const char *path, char *const av[], char *const envp[]); int builtin_history(const char *path, char *const av[], char *const envp[]);
int builtin_hash(const char *path, char *const av[], char *const envp[]); int builtin_hash(const char *path, char *const av[], char *const envp[]);
int builtin_math(const char *path, char *const av[], char *const envp[]);
#endif #endif

View file

@ -142,8 +142,6 @@ int isdir_sep(t_btree **ast, t_list **list);
int isdir_word(t_btree **ast, t_list **list); int isdir_word(t_btree **ast, t_list **list);
int isnull(t_btree **ast, t_list **list); int isnull(t_btree **ast, t_list **list);
int isionumber(t_btree **ast, t_list **lst); int isionumber(t_btree **ast, t_list **lst);
int ismath(t_btree **ast, t_list **lst);
int ismath_expr(t_btree **ast, t_list **lst);
int isbang(t_btree **ast, t_list **lst); int isbang(t_btree **ast, t_list **lst);
int isbang_sep(t_btree **ast, t_list **lst); int isbang_sep(t_btree **ast, t_list **lst);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 17:11:48 by jhalford #+# #+# */ /* Created: 2016/12/13 17:11:48 by jhalford #+# #+# */
/* Updated: 2017/03/14 00:49:40 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:04:24 by ariard ### ########.fr */
/* Updated: 2017/03/07 18:35:11 by jhalford ### ########.fr */ /* Updated: 2017/03/07 18:35:11 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -197,9 +197,6 @@ enum e_sym
OPEN_FUNC, OPEN_FUNC,
CLOSE_FUNC, CLOSE_FUNC,
CLOSE_LIST, CLOSE_LIST,
MATH,
MATH_PLUS,
MATH_SUP,
REDIR, REDIR,
CMD, CMD,
HEREDOCDATA, HEREDOCDATA,

@ -1 +1 @@
Subproject commit fb9b737be2598ec204afb974ec02f7bce5261b6b Subproject commit 9382dc10fdb91892ab26604a5776e5301ab88b71

12
42sh/main.c Normal file
View file

@ -0,0 +1,12 @@
#include <stdlib.h>
int main(void)
{
char *s;
s = malloc(5);
fork();
free(s);
sleep(100);
return (0);
}

View file

@ -6,17 +6,25 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/07 10:58:49 by ariard #+# #+# */ /* Created: 2017/03/07 10:58:49 by ariard #+# #+# */
/* Updated: 2017/03/14 00:55:04 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:45:23 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
static int get_math(char *stream, char **var, char **value, char **operator) static int init_math(char **var, char **value, char **operator, char **operand)
{
*var = NULL;
*value = NULL;
*operator = NULL;
*operand = NULL;
return (0);
}
static int get_value(char **var, char **value)
{ {
char *temp; char *temp;
*var = ft_strduptr(stream, &ft_isalpha);
temp = ft_sstrstr(data_singleton()->local_var, *var); temp = ft_sstrstr(data_singleton()->local_var, *var);
if (temp) if (temp)
{ {
@ -30,21 +38,21 @@ static int get_math(char *stream, char **var, char **value, char **operator)
} }
else else
*value = ft_itoa(0); *value = ft_itoa(0);
stream += ft_strlen(*var);
*operator = ft_strdup(stream);
return (0); return (0);
} }
static int do_math(char **value, char *operator) static int do_math(char **value, char *operator, char *operand)
{ {
long ope1; long ope1;
long ope2; long ope2;
ope1 = ft_atoi(*value); ope1 = ft_atoi(*value);
if (operator[2]) if (operand)
ope2 = ft_atoi(&operator[2]); ope2 = ft_atoi(operand);
else else
ope2 = 0; ope2 = 0;
if (ft_strlen(operator) > 1)
return (0);
if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0) if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0)
ope1 = 0; ope1 = 0;
else else
@ -60,22 +68,22 @@ static int do_math(char **value, char *operator)
return (0); return (0);
} }
int exec_math(t_btree **ast) int builtin_math(const char *path, char *const av[], char *const envp[])
{ {
t_astnode *node;
char **av;
char *var; char *var;
char *value; char *value;
char *operator; char *operator;
char *operand;
node = (*ast)->item; (void)path;
av = token_to_argv(node->data.cmd.wordlist, 1); (void)envp;
DG("before get math : %s", av[0]); init_math(&var, &value, &operator, &operand);
get_math(av[0], &var, &value, &operator); var = av[1];
DG("before do math var %s value %s operator %s", var, value, operator); get_value(&var, &value);
do_math(&value, operator); operator = av[2];
DG("before setenv %s", value); operand = av[3];
// DG("math %s %s %s", var, operator, operand);
do_math(&value, operator, operand);
builtin_setenv("setenv", (char *[]){"local", var, value, 0}, data_singleton()->local_var); builtin_setenv("setenv", (char *[]){"local", var, value, 0}, data_singleton()->local_var);
DG("after setenv");
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/28 14:25:17 by jhalford #+# #+# */ /* Created: 2016/11/28 14:25:17 by jhalford #+# #+# */
/* Updated: 2017/03/14 00:44:32 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:44:18 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -21,7 +21,6 @@ int builtin_setenv(const char *path, char *const av[], char *const envp[])
(void)envp; (void)envp;
(void)path; (void)path;
i = 0; i = 0;
DG("in setenv");
env = ft_strcmp(av[0], "local") == 0 ? env = ft_strcmp(av[0], "local") == 0 ?
&data_singleton()->local_var : &data_singleton()->env; &data_singleton()->local_var : &data_singleton()->env;
if (ft_strcmp(av[0], "setenv") == 0 if (ft_strcmp(av[0], "setenv") == 0

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */ /* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */
/* Updated: 2017/03/13 22:52:32 by jhalford ### ########.fr */ /* Updated: 2017/03/14 22:32:24 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -28,6 +28,7 @@ t_stof g_builtin[] =
{"read", &builtin_read}, {"read", &builtin_read},
{"hash", &builtin_hash}, {"hash", &builtin_hash},
{"history", &builtin_history}, {"history", &builtin_history},
{"math", &builtin_math},
{NULL, NULL}, {NULL, NULL},
}; };

View file

@ -1,4 +1,4 @@
/* ************************************************************************** */ /*ss ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* ::: :::::::: */
/* exec_leaf.c :+: :+: :+: */ /* exec_leaf.c :+: :+: :+: */
@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/07 15:47:30 by wescande #+# #+# */ /* Created: 2017/03/07 15:47:30 by wescande #+# #+# */
/* Updated: 2017/03/13 23:56:53 by jhalford ### ########.fr */ /* Updated: 2017/03/14 21:49:17 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/07 11:12:05 by ariard #+# #+# */ /* Created: 2017/03/07 11:12:05 by ariard #+# #+# */
/* Updated: 2017/03/07 18:37:38 by jhalford ### ########.fr */ /* Updated: 2017/03/14 19:56:38 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -30,6 +30,6 @@ int exec_var(t_btree **ast)
node = (*ast)->item; node = (*ast)->item;
av = token_to_argv(node->data.cmd.token, 1); av = token_to_argv(node->data.cmd.token, 1);
set_var(av[0], &var, &value); set_var(av[0], &var, &value);
builtin_setenv("setenv", (char*[]){var, value, 0}, data_singleton()->local_var); builtin_setenv("setenv", (char*[]){"local", var, value, 0}, data_singleton()->local_var);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */ /* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */
/* Updated: 2017/03/14 00:49:02 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:10:56 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -29,7 +29,6 @@ t_itof g_execmap[] =
{TK_CASE, &exec_leaf}, {TK_CASE, &exec_leaf},
{TK_PAREN_OPEN, &exec_case_branch}, {TK_PAREN_OPEN, &exec_case_branch},
{TK_ASSIGNMENT_WORD, &exec_var}, {TK_ASSIGNMENT_WORD, &exec_var},
{MATH, &exec_math},
{SUBSHELL, &exec_leaf}, {SUBSHELL, &exec_leaf},
{TK_LBRACE, &exec_leaf}, {TK_LBRACE, &exec_leaf},
{TK_BANG, &exec_bang}, {TK_BANG, &exec_bang},

View file

@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/07 15:06:05 by wescande #+# #+# */ /* Created: 2017/03/07 15:06:05 by wescande #+# #+# */
/* Updated: 2017/03/13 22:52:43 by jhalford ### ########.fr */ /* Updated: 2017/03/14 21:25:01 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */ /* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/07 15:55:53 by wescande #+# #+# */ /* Created: 2017/03/07 15:55:53 by wescande #+# #+# */
/* Updated: 2017/03/13 17:23:53 by jhalford ### ########.fr */ /* Updated: 2017/03/14 22:39:25 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */ /* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */ /* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:11:26 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -19,10 +19,6 @@ char *ft_putast(void *nodein)
if (node->type == TK_BANG) if (node->type == TK_BANG)
return ("TK_BANG"); return ("TK_BANG");
if (node->type == MATH)
return ("MATH");
if (node->type == MATH_PLUS)
return ("MATH_PLUS");
if (node->type == TK_DSEMI) if (node->type == TK_DSEMI)
return ("TK_DSEMI"); return ("TK_DSEMI");
if (node->type == WORDLIST) if (node->type == WORDLIST)

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
/* Updated: 2017/03/14 17:05:45 by gwojda ### ########.fr */ /* Updated: 2017/03/14 22:09:29 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -75,7 +75,7 @@ int handle_instruction(int fd)
} }
btree_print(STDBUG, ast, &ft_putast); btree_print(STDBUG, ast, &ft_putast);
if (ft_exec(&ast)) if (ft_exec(&ast))
return (1); return (2);
instruction_free(&token, &parser, &ast); instruction_free(&token, &parser, &ast);
if (SH_IS_INTERACTIVE(data_singleton()->opts) && *lexer.str) if (SH_IS_INTERACTIVE(data_singleton()->opts) && *lexer.str)
ft_add_str_in_history(lexer.str); ft_add_str_in_history(lexer.str);

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/04 20:42:13 by ariard #+# #+# */ /* Created: 2017/03/04 20:42:13 by ariard #+# #+# */
/* Updated: 2017/03/13 22:38:44 by ariard ### ########.fr */ /* Updated: 2017/03/14 21:45:03 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -94,8 +94,9 @@ int add_pattern(t_btree **ast, t_list **lst)
token = (*lst)->content; token = (*lst)->content;
node = (*ast)->item; node = (*ast)->item;
DG("token type is %s", read_state(token->type));
DG("node type is %s", read_state(node->type)); DG("node type is %s", read_state(node->type));
ft_ld_pushback(&node->data.cmd.wordlist, ft_ld_pushback(&node->data.cmd.token,
gen_tab(token->data, token->esc, token->esc2, 1)); gen_tab(token->data, token->esc, token->esc2, 1));
node->pattern = 1; node->pattern = 1;
return (0); return (0);

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/15 20:49:15 by ariard #+# #+# */ /* Created: 2017/02/15 20:49:15 by ariard #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:22:15 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -24,8 +24,6 @@ t_distrostree g_distrostree[] =
{&iscase_pattern, &add_pattern}, {&iscase_pattern, &add_pattern},
{&iscase, &add_case_cmd}, {&iscase, &add_case_cmd},
{&iscase_branch, &add_branch}, {&iscase_branch, &add_branch},
{&ismath, &add_null},
{&ismath_expr, &add_pattern},
{&issubshell, &add_subshell_cmd}, {&issubshell, &add_subshell_cmd},
{&isfunc_name, &add_null}, {&isfunc_name, &add_null},
{&isfunc, &add_func_cmd}, {&isfunc, &add_func_cmd},
@ -72,7 +70,7 @@ int add_cmd(t_btree **ast, t_list **lst)
int i; int i;
i = -1; i = -1;
while (++i < 18) while (++i < 16)
{ {
if (g_distrostree[i].test(ast, lst) == 1) if (g_distrostree[i].test(ast, lst) == 1)
{ {
@ -96,7 +94,10 @@ int add_cmd(t_btree **ast, t_list **lst)
else else
node->type = CMD; node->type = CMD;
if (token->type == TK_WORD || token->type == TK_ASSIGNMENT_WORD) if (token->type == TK_WORD || token->type == TK_ASSIGNMENT_WORD)
{
DG("token data is %s", token->data);
ft_ld_pushback(&node->data.cmd.token, ft_ld_pushback(&node->data.cmd.token,
gen_tab(token->data, token->esc, token->esc2, 1)); gen_tab(token->data, token->esc, token->esc2, 1));
}
return (0); return (0);
} }

View file

@ -1,50 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* add_math.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/11 15:44:53 by ariard #+# #+# */
/* Updated: 2017/03/11 15:45:21 by ariard ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
int ismath(t_btree **ast, t_list **lst)
{
t_astnode *node;
t_token *token;
node = NULL;
token = (*lst)->content;
if (*ast)
{
node = (*ast)->item;
if (node->type == SUBSHELL && token->type == SUBSHELL)
{
node->type = MATH;
return (1);
}
if (node->type == MATH && token->type == TK_PAREN_CLOSE)
return (1);
}
return (0);
}
int ismath_expr(t_btree **ast, t_list **lst)
{
t_astnode *node;
t_token *token;
node = NULL;
token = (*lst)->content;
if (*ast)
{
node = (*ast)->item;
if (node->type == MATH && token->type == TK_WORD)
return (1);
}
return (0);
}

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/11 15:58:38 by ariard #+# #+# */ /* Created: 2017/03/11 15:58:38 by ariard #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:02:07 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -22,14 +22,12 @@ t_aggrematch g_aggrematch[] =
{TK_WORD, TK_PIPE, PATTERN, 0}, {TK_WORD, TK_PIPE, PATTERN, 0},
{TK_WORD, TK_IN, FOR_WORDLIST, TK_IN}, {TK_WORD, TK_IN, FOR_WORDLIST, TK_IN},
{TK_WORD, FOR_WORDLIST, FOR_WORDLIST, FOR_WORDLIST}, {TK_WORD, FOR_WORDLIST, FOR_WORDLIST, FOR_WORDLIST},
{TK_WORD, MATH, MATH, MATH},
{TK_SEMI, FOR_WORDLIST, SEQUENTIAL_SEP, 0}, {TK_SEMI, FOR_WORDLIST, SEQUENTIAL_SEP, 0},
{TK_DSEMI, CMD_SUPERIOR, PIPE_SEQUENCE, CMD_SUPERIOR}, {TK_DSEMI, CMD_SUPERIOR, PIPE_SEQUENCE, CMD_SUPERIOR},
{TK_DSEMI, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {TK_DSEMI, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
{TK_DSEMI, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE}, {TK_DSEMI, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE},
{TK_PAREN_OPEN, TK_IN, PATTERN_CASE, 0}, {TK_PAREN_OPEN, TK_IN, PATTERN_CASE, 0},
{TK_PAREN_OPEN, CASE_LIST_NS, PATTERN_CASE, 0}, {TK_PAREN_OPEN, CASE_LIST_NS, PATTERN_CASE, 0},
{TK_PAREN_OPEN, TK_PAREN_OPEN, MATH, TK_PAREN_OPEN},
{TK_PAREN_OPEN, CMD_SUPERIOR, OPEN_FUNC, 0}, {TK_PAREN_OPEN, CMD_SUPERIOR, OPEN_FUNC, 0},
{TK_ASSIGNMENT_WORD, CMD_PREFIX, CMD_PREFIX, 0}, {TK_ASSIGNMENT_WORD, CMD_PREFIX, CMD_PREFIX, 0},
{TK_PIPE, CMD_SUPERIOR, SEQUENCE, CMD_SUPERIOR}, {TK_PIPE, CMD_SUPERIOR, SEQUENCE, CMD_SUPERIOR},
@ -45,8 +43,6 @@ t_aggrematch g_aggrematch[] =
{TK_ESAC, TK_IN, CASE_CLAUSE, TK_CASE}, {TK_ESAC, TK_IN, CASE_CLAUSE, TK_CASE},
{TK_ESAC, CASE_LIST_NS, CASE_CLAUSE, TK_CASE}, {TK_ESAC, CASE_LIST_NS, CASE_CLAUSE, TK_CASE},
{TK_RBRACE, COMPOUND_LIST, BRACE_GROUP, TK_LBRACE}, {TK_RBRACE, COMPOUND_LIST, BRACE_GROUP, TK_LBRACE},
{TK_PAREN_CLOSE, MATH, MATH_PLUS, MATH},
{TK_PAREN_CLOSE, MATH_PLUS, MATH_SUP, MATH_PLUS},
{TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, TK_PAREN_OPEN}, {TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, TK_PAREN_OPEN},
{TK_PAREN_CLOSE, CMD_SUPERIOR, SUBSHELL, TK_PAREN_OPEN}, {TK_PAREN_CLOSE, CMD_SUPERIOR, SUBSHELL, TK_PAREN_OPEN},
{TK_PAREN_CLOSE, PIPE_SEMI_SEQUENCE, SUBSHELL, TK_PAREN_OPEN}, {TK_PAREN_CLOSE, PIPE_SEMI_SEQUENCE, SUBSHELL, TK_PAREN_OPEN},
@ -65,19 +61,16 @@ t_aggrematch g_aggrematch[] =
{TK_OR_IF, PIPE_SEMI_SEQUENCE, AND_OR_MINOR, PIPE_SEMI_SEQUENCE}, {TK_OR_IF, PIPE_SEMI_SEQUENCE, AND_OR_MINOR, PIPE_SEMI_SEQUENCE},
{TK_OR_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR}, {TK_OR_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR},
{TK_OR_IF, PIPE_CLOSE_SEQUENCE, AND_OR_MINOR, PIPE_CLOSE_SEQUENCE}, {TK_OR_IF, PIPE_CLOSE_SEQUENCE, AND_OR_MINOR, PIPE_CLOSE_SEQUENCE},
{SEPARATOR_OP, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
{SEPARATOR_OP, CMD_SUPERIOR, SEPARATOR, 0}, {SEPARATOR_OP, CMD_SUPERIOR, SEPARATOR, 0},
{SEPARATOR_OP, COMPOUND_LIST, SEPARATOR, 0}, {SEPARATOR_OP, COMPOUND_LIST, SEPARATOR, 0},
{SEPARATOR_OP, CASE_LIST_NS, SEPARATOR, 0}, {SEPARATOR_OP, CASE_LIST_NS, SEPARATOR, 0},
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE, SEPARATOR, 0}, {SEPARATOR_OP, PIPE_SEMI_SEQUENCE, SEPARATOR, 0},
{SEPARATOR_OP, PIPE_CLOSE_SEQUENCE, SEPARATOR, 0}, {SEPARATOR_OP, PIPE_CLOSE_SEQUENCE, SEPARATOR, 0},
{SEPARATOR, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
{SEPARATOR, CMD_SUPERIOR, END_COMMAND, CMD_SUPERIOR}, {SEPARATOR, CMD_SUPERIOR, END_COMMAND, CMD_SUPERIOR},
{SEPARATOR, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS}, {SEPARATOR, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS},
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
{SEPARATOR, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {SEPARATOR, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
{SEPARATOR, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE}, {SEPARATOR, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE},
{LINEBREAK, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
{LINEBREAK, SEPARATOR_OP, SEPARATOR, SEPARATOR_OP}, {LINEBREAK, SEPARATOR_OP, SEPARATOR, SEPARATOR_OP},
{LINEBREAK, TK_SEMI, SEQUENTIAL_SEP, TK_SEMI}, {LINEBREAK, TK_SEMI, SEQUENTIAL_SEP, TK_SEMI},
{LINEBREAK, TK_PAREN_CLOSE, FUNC, FNAME}, {LINEBREAK, TK_PAREN_CLOSE, FUNC, FNAME},
@ -87,7 +80,6 @@ t_aggrematch g_aggrematch[] =
{LINEBREAK, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE}, {LINEBREAK, PIPE_CLOSE_SEQUENCE, PIPE_SEQUENCE, PIPE_CLOSE_SEQUENCE},
{LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
{LINEBREAK, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS}, {LINEBREAK, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS},
{NEWLINE_LIST, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
{NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME}, {NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME},
{NEWLINE_LIST, SEQUENTIAL_SEP, SEQUENTIAL_SEP, SEQUENTIAL_SEP}, {NEWLINE_LIST, SEQUENTIAL_SEP, SEQUENTIAL_SEP, SEQUENTIAL_SEP},
{NEWLINE_LIST, TK_DO, TK_DO, TK_DO}, {NEWLINE_LIST, TK_DO, TK_DO, TK_DO},

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/11 16:11:21 by ariard #+# #+# */ /* Created: 2017/03/11 16:11:21 by ariard #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:01:19 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -25,7 +25,6 @@ t_stackmatch g_stackmatch[] =
{TK_WORD, COMPLETE_COMMANDS}, {TK_WORD, COMPLETE_COMMANDS},
{TK_WORD, TK_IN}, {TK_WORD, TK_IN},
{TK_WORD, FOR_WORDLIST}, {TK_WORD, FOR_WORDLIST},
{TK_WORD, MATH},
{TK_ASSIGNMENT_WORD, CMD_PREFIX}, {TK_ASSIGNMENT_WORD, CMD_PREFIX},
{TK_IO_NUMBER, REDIRECT_LIST}, {TK_IO_NUMBER, REDIRECT_LIST},
{TK_IO_NUMBER, CMD_SUFFIX}, {TK_IO_NUMBER, CMD_SUFFIX},
@ -501,14 +500,12 @@ t_stackmatch g_stackmatch[] =
{END_COMMAND, CASE_LIST_NS}, {END_COMMAND, CASE_LIST_NS},
{END_COMMAND, COMPLETE_CONDITION}, {END_COMMAND, COMPLETE_CONDITION},
{END_COMMAND, CONDITION}, {END_COMMAND, CONDITION},
{SEPARATOR, MATH_SUP},
{SEPARATOR, CMD_SUPERIOR}, {SEPARATOR, CMD_SUPERIOR},
{SEPARATOR, TERM}, {SEPARATOR, TERM},
{SEPARATOR, COMPOUND_LIST}, {SEPARATOR, COMPOUND_LIST},
{SEPARATOR, CASE_LIST_NS}, {SEPARATOR, CASE_LIST_NS},
{SEPARATOR, PIPE_SEMI_SEQUENCE}, {SEPARATOR, PIPE_SEMI_SEQUENCE},
{SEPARATOR, PIPE_CLOSE_SEQUENCE}, {SEPARATOR, PIPE_CLOSE_SEQUENCE},
{SEPARATOR_OP, MATH_SUP},
{SEPARATOR_OP, CMD_SUPERIOR}, {SEPARATOR_OP, CMD_SUPERIOR},
{SEPARATOR_OP, LIST}, {SEPARATOR_OP, LIST},
{SEPARATOR_OP, TERM}, {SEPARATOR_OP, TERM},
@ -516,7 +513,6 @@ t_stackmatch g_stackmatch[] =
{SEPARATOR_OP, COMPOUND_LIST}, {SEPARATOR_OP, COMPOUND_LIST},
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE}, {SEPARATOR_OP, PIPE_SEMI_SEQUENCE},
{SEPARATOR_OP, PIPE_CLOSE_SEQUENCE}, {SEPARATOR_OP, PIPE_CLOSE_SEQUENCE},
{LINEBREAK, MATH_SUP},
{LINEBREAK, TK_SEMI}, {LINEBREAK, TK_SEMI},
{LINEBREAK, END_COMMAND}, {LINEBREAK, END_COMMAND},
{LINEBREAK, SEPARATOR_OP}, {LINEBREAK, SEPARATOR_OP},
@ -537,8 +533,6 @@ t_stackmatch g_stackmatch[] =
{LINEBREAK, PROGRAM}, {LINEBREAK, PROGRAM},
{LINEBREAK, TK_PAREN_OPEN}, {LINEBREAK, TK_PAREN_OPEN},
{LINEBREAK, TK_LBRACE}, {LINEBREAK, TK_LBRACE},
{TK_PAREN_CLOSE, MATH},
{TK_PAREN_CLOSE, MATH_PLUS},
{TK_PAREN_CLOSE, TK_SEMI}, {TK_PAREN_CLOSE, TK_SEMI},
{TK_PAREN_CLOSE, END_COMMAND}, {TK_PAREN_CLOSE, END_COMMAND},
{TK_PAREN_CLOSE, SEPARATOR_OP}, {TK_PAREN_CLOSE, SEPARATOR_OP},
@ -557,8 +551,6 @@ t_stackmatch g_stackmatch[] =
{TK_PAREN_CLOSE, COMPOUND_LIST}, {TK_PAREN_CLOSE, COMPOUND_LIST},
{TK_PAREN_CLOSE, FUNC_NAME}, {TK_PAREN_CLOSE, FUNC_NAME},
{TK_PAREN_CLOSE, OPEN_FUNC}, {TK_PAREN_CLOSE, OPEN_FUNC},
{TK_RBRACE, MATH},
{TK_RBRACE, MATH_PLUS},
{TK_RBRACE, TK_SEMI}, {TK_RBRACE, TK_SEMI},
{TK_RBRACE, END_COMMAND}, {TK_RBRACE, END_COMMAND},
{TK_RBRACE, SEPARATOR_OP}, {TK_RBRACE, SEPARATOR_OP},
@ -577,7 +569,6 @@ t_stackmatch g_stackmatch[] =
{TK_RBRACE, PATTERN}, {TK_RBRACE, PATTERN},
{TK_RBRACE, COMPOUND_LIST}, {TK_RBRACE, COMPOUND_LIST},
{TK_RBRACE, FUNC_NAME}, {TK_RBRACE, FUNC_NAME},
{NEWLINE_LIST, MATH_SUP},
{NEWLINE_LIST, TK_DO}, {NEWLINE_LIST, TK_DO},
{NEWLINE_LIST, CASE_LIST_NS}, {NEWLINE_LIST, CASE_LIST_NS},
{NEWLINE_LIST, TK_PAREN_CLOSE}, {NEWLINE_LIST, TK_PAREN_CLOSE},
@ -780,66 +771,6 @@ t_stackmatch g_stackmatch[] =
{CMD_SUPERIOR, AND_OR_MAJOR}, {CMD_SUPERIOR, AND_OR_MAJOR},
{CLOSE_FUNC, CMD_SUPERIOR}, {CLOSE_FUNC, CMD_SUPERIOR},
{CLOSE_FUNC, OPEN_FUNC}, {CLOSE_FUNC, OPEN_FUNC},
{MATH, LINEBREAK},
{MATH, NEWLINE_LIST},
{MATH, SEPARATOR},
{MATH, SEPARATOR_OP},
{MATH, TK_WHILE},
{MATH, TK_UNTIL},
{MATH, TK_DO},
{MATH, TK_IF},
{MATH, TK_ELIF},
{MATH, TK_THEN},
{MATH, TK_ELSE},
{MATH, COMPOUND_LIST},
{MATH, COMPLETE_CONDITION},
{MATH, CONDITION},
{MATH, TK_PAREN_OPEN},
{MATH, TK_LBRACE},
{MATH, SEQUENCE},
{MATH, COMPLETE_COMMANDS},
{MATH, AND_OR_MAJOR},
{MATH, TK_BANG},
{MATH_PLUS, LINEBREAK},
{MATH_PLUS, NEWLINE_LIST},
{MATH_PLUS, SEPARATOR},
{MATH_PLUS, SEPARATOR_OP},
{MATH_PLUS, TK_WHILE},
{MATH_PLUS, TK_UNTIL},
{MATH_PLUS, TK_DO},
{MATH_PLUS, TK_IF},
{MATH_PLUS, TK_ELIF},
{MATH_PLUS, TK_THEN},
{MATH_PLUS, TK_ELSE},
{MATH_PLUS, COMPOUND_LIST},
{MATH_PLUS, COMPLETE_CONDITION},
{MATH_PLUS, CONDITION},
{MATH_PLUS, TK_PAREN_OPEN},
{MATH_PLUS, TK_LBRACE},
{MATH_PLUS, SEQUENCE},
{MATH_PLUS, COMPLETE_COMMANDS},
{MATH_PLUS, AND_OR_MAJOR},
{MATH_PLUS, TK_BANG},
{MATH_SUP, LINEBREAK},
{MATH_SUP, NEWLINE_LIST},
{MATH_SUP, SEPARATOR},
{MATH_SUP, SEPARATOR_OP},
{MATH_SUP, TK_WHILE},
{MATH_SUP, TK_UNTIL},
{MATH_SUP, TK_DO},
{MATH_SUP, TK_IF},
{MATH_SUP, TK_ELIF},
{MATH_SUP, TK_THEN},
{MATH_SUP, TK_ELSE},
{MATH_SUP, COMPOUND_LIST},
{MATH_SUP, COMPLETE_CONDITION},
{MATH_SUP, CONDITION},
{MATH_SUP, TK_PAREN_OPEN},
{MATH_SUP, TK_LBRACE},
{MATH_SUP, SEQUENCE},
{MATH_SUP, COMPLETE_COMMANDS},
{MATH_SUP, AND_OR_MAJOR},
{MATH_SUP, TK_BANG},
{SIMPLE_COMMAND, TK_WHILE}, {SIMPLE_COMMAND, TK_WHILE},
{SIMPLE_COMMAND, TK_UNTIL}, {SIMPLE_COMMAND, TK_UNTIL},
{SIMPLE_COMMAND, TK_DO}, {SIMPLE_COMMAND, TK_DO},

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */ /* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:03:42 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -80,7 +80,6 @@ t_prodmatch g_prodmatch[] =
{TK_NAME, SEPARATOR_OP, FNAME}, {TK_NAME, SEPARATOR_OP, FNAME},
{TK_NAME, NEWLINE_LIST, FNAME}, {TK_NAME, NEWLINE_LIST, FNAME},
{TK_NAME, TK_FOR, NAME}, {TK_NAME, TK_FOR, NAME},
{TK_NEWLINE, MATH_SUP, NEWLINE_LIST},
{TK_NEWLINE, CASE_LIST_NS, NEWLINE_LIST}, {TK_NEWLINE, CASE_LIST_NS, NEWLINE_LIST},
{TK_NEWLINE, TK_DO, NEWLINE_LIST}, {TK_NEWLINE, TK_DO, NEWLINE_LIST},
{TK_NEWLINE, TK_PAREN_CLOSE, NEWLINE_LIST}, {TK_NEWLINE, TK_PAREN_CLOSE, NEWLINE_LIST},
@ -111,12 +110,10 @@ t_prodmatch g_prodmatch[] =
{TK_NEWLINE, FOR_WORDLIST, NEWLINE_LIST}, {TK_NEWLINE, FOR_WORDLIST, NEWLINE_LIST},
{TK_NEWLINE, SEQUENTIAL_SEP, NEWLINE_LIST}, {TK_NEWLINE, SEQUENTIAL_SEP, NEWLINE_LIST},
{TK_NEWLINE, PROGRAM, NEWLINE_LIST}, {TK_NEWLINE, PROGRAM, NEWLINE_LIST},
{TK_SEMI, MATH_SUP, SEPARATOR_OP},
{TK_SEMI, CMD_SUPERIOR, SEPARATOR_OP}, {TK_SEMI, CMD_SUPERIOR, SEPARATOR_OP},
{TK_SEMI, LIST, SEPARATOR_OP}, {TK_SEMI, LIST, SEPARATOR_OP},
{TK_SEMI, PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, {TK_SEMI, PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
{TK_SEMI, PIPE_CLOSE_SEQUENCE, SEPARATOR_OP}, {TK_SEMI, PIPE_CLOSE_SEQUENCE, SEPARATOR_OP},
{TK_AMP, MATH_SUP, SEPARATOR_OP},
{TK_AMP, CMD_SUPERIOR, SEPARATOR_OP}, {TK_AMP, CMD_SUPERIOR, SEPARATOR_OP},
{TK_AMP, LIST, SEPARATOR_OP}, {TK_AMP, LIST, SEPARATOR_OP},
{TK_AMP, PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, {TK_AMP, PIPE_SEMI_SEQUENCE, SEPARATOR_OP},

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/09 15:32:10 by ariard #+# #+# */ /* Created: 2017/02/09 15:32:10 by ariard #+# #+# */
/* Updated: 2017/03/14 00:50:34 by ariard ### ########.fr */ /* Updated: 2017/03/14 22:11:43 by ariard ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */