parsing math ok
This commit is contained in:
parent
bc1c16a45b
commit
6c8c3ea792
9 changed files with 81 additions and 1 deletions
|
|
@ -240,6 +240,7 @@ parser/add_sep.c\
|
|||
parser/add_subshell.c\
|
||||
parser/add_var.c\
|
||||
parser/add_number.c\
|
||||
parser/add_math.c\
|
||||
parser/aggregate_sym.c\
|
||||
parser/build_tree.c\
|
||||
parser/error_syntax.c\
|
||||
|
|
|
|||
|
|
@ -144,6 +144,8 @@ int isdir_word(t_btree **ast, t_list **list);
|
|||
int isvar(t_btree **ast, t_list **list);
|
||||
int isnull(t_btree **ast, t_list **list);
|
||||
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 join_ast(t_btree **ast, t_btree **new_node);
|
||||
int gen_node(t_btree **ast);
|
||||
|
|
|
|||
|
|
@ -160,6 +160,9 @@ enum e_sym
|
|||
PATTERN_CASE,
|
||||
FUNC_NAME,
|
||||
CLOSE_LIST,
|
||||
MATH,
|
||||
MATH_PLUS,
|
||||
MATH_SUP,
|
||||
REDIR,
|
||||
CMD,
|
||||
ALL = 200,
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ char *ft_putast(void *nodein)
|
|||
t_astnode *node;
|
||||
node = nodein;
|
||||
|
||||
if (node->type == MATH)
|
||||
return ("MATH");
|
||||
if (node->type == TK_DSEMI)
|
||||
return ("TK_DSEMI");
|
||||
if (node->type == WORDLIST)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ t_distrostree g_distrostree[] =
|
|||
{&iscase_pattern, &add_pattern},
|
||||
{&iscase_branch, &add_branch},
|
||||
{&iscase, &add_case_cmd},
|
||||
{&ismath, &add_null},
|
||||
{&ismath_expr, &add_pattern},
|
||||
{&issubshell, &add_subshell_cmd},
|
||||
{&isfunc_name, &add_null},
|
||||
{&isfunc, &add_func_cmd},
|
||||
|
|
|
|||
39
42sh/src/parser/add_math.c
Normal file
39
42sh/src/parser/add_math.c
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#include "parser.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);
|
||||
}
|
||||
|
|
@ -17,12 +17,14 @@ t_aggrematch g_aggrematch[] =
|
|||
{TK_WORD, TK_PIPE, PATTERN, 0},
|
||||
{TK_WORD, TK_IN, FOR_WORDLIST, TK_IN},
|
||||
{TK_WORD, FOR_WORDLIST, FOR_WORDLIST, FOR_WORDLIST},
|
||||
{TK_WORD, MATH, MATH, MATH},
|
||||
{TK_SEMI, FOR_WORDLIST, SEQUENTIAL_SEP, 0},
|
||||
{TK_DSEMI, CMD_SUPERIOR, PIPE_SEQUENCE, CMD_SUPERIOR},
|
||||
{TK_DSEMI, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{TK_PAREN_OPEN, TK_IN, PATTERN_CASE, 0},
|
||||
{TK_PAREN_OPEN, CASE_LIST_NS, PATTERN_CASE, 0},
|
||||
{TK_PAREN_OPEN, CMD_SUPERIOR, FUNC_NAME, CMD_SUPERIOR},
|
||||
{TK_PAREN_OPEN, TK_PAREN_OPEN, MATH, TK_PAREN_OPEN},
|
||||
{TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, 0},
|
||||
{TK_PIPE, CMD_SUPERIOR, SEQUENCE, CMD_SUPERIOR},
|
||||
{TK_PIPE, PIPE_SEMI_SEQUENCE, SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
|
|
@ -38,7 +40,9 @@ t_aggrematch g_aggrematch[] =
|
|||
{TK_ESAC, TK_IN, CASE_CLAUSE, TK_CASE},
|
||||
{TK_ESAC, CASE_LIST_NS, CASE_CLAUSE, TK_CASE},
|
||||
{TK_RBRACE, COMPOUND_LIST, BRACE_GROUP, TK_LBRACE},
|
||||
{TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, TK_PAREN_OPEN},
|
||||
{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, CMD_SUPERIOR, SUBSHELL, TK_PAREN_OPEN},
|
||||
{TK_PAREN_CLOSE, PIPE_SEMI_SEQUENCE, SUBSHELL, TK_PAREN_OPEN},
|
||||
|
||||
|
|
@ -48,14 +52,17 @@ t_aggrematch g_aggrematch[] =
|
|||
{TK_AND_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR},
|
||||
{TK_OR_IF, CMD_SUPERIOR, AND_OR_MINOR, CMD_SUPERIOR},
|
||||
//watch this
|
||||
{SEPARATOR_OP, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
|
||||
{SEPARATOR_OP, CMD_SUPERIOR, SEPARATOR, 0},
|
||||
{SEPARATOR_OP, COMPOUND_LIST, SEPARATOR, 0},
|
||||
{SEPARATOR_OP, CASE_LIST_NS, SEPARATOR, 0},
|
||||
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE, SEPARATOR, 0},
|
||||
{SEPARATOR, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
|
||||
{SEPARATOR, CMD_SUPERIOR, END_COMMAND, CMD_SUPERIOR},
|
||||
{SEPARATOR, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS},
|
||||
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
|
||||
{SEPARATOR, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
|
||||
{LINEBREAK, SEPARATOR_OP, SEPARATOR, SEPARATOR_OP},
|
||||
{LINEBREAK, TK_SEMI, SEQUENTIAL_SEP, TK_SEMI},
|
||||
|
||||
|
|
@ -67,6 +74,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
|
||||
{LINEBREAK, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS},
|
||||
{LINEBREAK, COMPLETE_COMMANDS, PROGRAM, LINEBREAK},
|
||||
{NEWLINE_LIST, MATH_SUP, CMD_SUPERIOR, MATH_SUP},
|
||||
{NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME},
|
||||
{NEWLINE_LIST, SEQUENTIAL_SEP, SEQUENTIAL_SEP, SEQUENTIAL_SEP},
|
||||
{NEWLINE_LIST, TK_DO, TK_DO, TK_DO},
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_WORD, COMPLETE_COMMANDS},
|
||||
{TK_WORD, TK_IN},
|
||||
{TK_WORD, FOR_WORDLIST},
|
||||
{TK_WORD, MATH},
|
||||
{TK_ASSIGNEMENT_WORD, CMD_PREFIX},
|
||||
{TK_IO_NUMBER, REDIRECT_LIST},
|
||||
{TK_IO_NUMBER, CMD_SUFFIX},
|
||||
|
|
@ -430,17 +431,20 @@ t_stackmatch g_stackmatch[] =
|
|||
{END_COMMAND, COMPOUND_LIST},
|
||||
{END_COMMAND, CASE_LIST_NS},
|
||||
{END_COMMAND, COMPLETE_CONDITION},
|
||||
{SEPARATOR, MATH_SUP},
|
||||
{SEPARATOR, CMD_SUPERIOR},
|
||||
{SEPARATOR, TERM},
|
||||
{SEPARATOR, COMPOUND_LIST},
|
||||
{SEPARATOR, CASE_LIST_NS},
|
||||
{SEPARATOR, PIPE_SEMI_SEQUENCE},
|
||||
{SEPARATOR_OP, MATH_SUP},
|
||||
{SEPARATOR_OP, CMD_SUPERIOR},
|
||||
{SEPARATOR_OP, LIST},
|
||||
{SEPARATOR_OP, TERM},
|
||||
{SEPARATOR_OP, CASE_LIST_NS},
|
||||
{SEPARATOR_OP, COMPOUND_LIST},
|
||||
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, MATH_SUP},
|
||||
{LINEBREAK, TK_SEMI},
|
||||
{LINEBREAK, END_COMMAND},
|
||||
{LINEBREAK, SEPARATOR_OP},
|
||||
|
|
@ -459,6 +463,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{LINEBREAK, PROGRAM},
|
||||
{LINEBREAK, TK_PAREN_OPEN},
|
||||
{LINEBREAK, TK_LBRACE},
|
||||
{TK_PAREN_CLOSE, MATH},
|
||||
{TK_PAREN_CLOSE, MATH_PLUS},
|
||||
{TK_PAREN_CLOSE, TK_SEMI},
|
||||
{TK_PAREN_CLOSE, END_COMMAND},
|
||||
{TK_PAREN_CLOSE, SEPARATOR_OP},
|
||||
|
|
@ -478,6 +484,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_PAREN_CLOSE, PATTERN},
|
||||
{TK_PAREN_CLOSE, COMPOUND_LIST},
|
||||
{TK_PAREN_CLOSE, FUNC_NAME},
|
||||
{NEWLINE_LIST, MATH_SUP},
|
||||
{NEWLINE_LIST, TK_DO},
|
||||
{NEWLINE_LIST, CASE_LIST_NS},
|
||||
{NEWLINE_LIST, TK_PAREN_CLOSE},
|
||||
|
|
@ -628,6 +635,19 @@ t_stackmatch g_stackmatch[] =
|
|||
// watch !
|
||||
{CMD_SUPERIOR, AND_OR_MAJOR},
|
||||
|
||||
{MATH, LINEBREAK},
|
||||
{MATH, NEWLINE_LIST},
|
||||
{MATH, SEPARATOR},
|
||||
{MATH, SEPARATOR_OP},
|
||||
{MATH_PLUS, LINEBREAK},
|
||||
{MATH_PLUS, NEWLINE_LIST},
|
||||
{MATH_PLUS, SEPARATOR},
|
||||
{MATH_PLUS, SEPARATOR_OP},
|
||||
{MATH_SUP, LINEBREAK},
|
||||
{MATH_SUP, NEWLINE_LIST},
|
||||
{MATH_SUP, SEPARATOR},
|
||||
{MATH_SUP, SEPARATOR_OP},
|
||||
|
||||
{SIMPLE_COMMAND, TK_WHILE},
|
||||
{SIMPLE_COMMAND, TK_UNTIL},
|
||||
{SIMPLE_COMMAND, TK_DO},
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ t_prodmatch g_prodmatch[] =
|
|||
{TK_NAME, SEPARATOR_OP, FNAME},
|
||||
{TK_NAME, NEWLINE_LIST, FNAME},
|
||||
{TK_NAME, TK_FOR, NAME},
|
||||
{TK_NEWLINE, MATH_SUP, NEWLINE_LIST},
|
||||
{TK_NEWLINE, CASE_LIST_NS, NEWLINE_LIST},
|
||||
{TK_NEWLINE, TK_DO, NEWLINE_LIST},
|
||||
{TK_NEWLINE, TK_PAREN_CLOSE, NEWLINE_LIST},
|
||||
|
|
@ -89,9 +90,11 @@ t_prodmatch g_prodmatch[] =
|
|||
{TK_NEWLINE, CONDITION, NEWLINE_LIST},
|
||||
{TK_NEWLINE, FOR_WORDLIST, NEWLINE_LIST},
|
||||
{TK_NEWLINE, SEQUENTIAL_SEP, NEWLINE_LIST},
|
||||
{TK_SEMI, MATH_SUP, SEPARATOR_OP},
|
||||
{TK_SEMI, CMD_SUPERIOR, SEPARATOR_OP},
|
||||
{TK_SEMI, LIST, SEPARATOR_OP},
|
||||
{TK_SEMI, PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
|
||||
{TK_AMP, MATH_SUP, SEPARATOR_OP},
|
||||
{TK_AMP, CMD_SUPERIOR, SEPARATOR_OP},
|
||||
{TK_AMP, LIST, SEPARATOR_OP},
|
||||
{TK_AMP, PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
|
||||
|
|
|
|||
Loading…
Reference in a new issue