gestion error ok + moar grammar pipe
This commit is contained in:
parent
0f684e6189
commit
3dc47431ba
8 changed files with 16 additions and 9 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
/* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/02 17:15:12 by jhalford ### ########.fr */
|
/* Updated: 2017/03/04 16:46:52 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -42,6 +42,7 @@
|
||||||
# define SH_MODE_MASK (SH_MODE_INPUT | SH_MODE_EXEC)
|
# define SH_MODE_MASK (SH_MODE_INPUT | SH_MODE_EXEC)
|
||||||
# define SH_HAS_JOBC(b) (b & SH_OPTS_JOBC)
|
# define SH_HAS_JOBC(b) (b & SH_OPTS_JOBC)
|
||||||
# define SH_IS_INTERACTIVE(b) (b & SH_INTERACTIVE)
|
# define SH_IS_INTERACTIVE(b) (b & SH_INTERACTIVE)
|
||||||
|
# define SH_NO_INTERACTIVE(b) !(b & SH_INTERACTIVE)
|
||||||
|
|
||||||
# define SH_MSG_NOJOBC "no job-control"
|
# define SH_MSG_NOJOBC "no job-control"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/21 16:14:08 by ariard #+# #+# */
|
/* Created: 2017/02/21 16:14:08 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/21 16:19:34 by ariard ### ########.fr */
|
/* Updated: 2017/03/04 16:32:15 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
|
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
|
||||||
/* Updated: 2017/03/03 18:29:03 by wescande ### ########.fr */
|
/* Updated: 2017/03/04 16:50:05 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
int instruction_free(t_list **token, t_parser *parser, t_btree **ast)
|
int instruction_free(t_list **token, t_parser *parser, t_btree **ast)
|
||||||
{
|
{
|
||||||
ft_lstdel(token, &token_free);
|
ft_lstdel(token, &token_free);
|
||||||
|
token = NULL;
|
||||||
ft_lstdel(&parser->stack, NULL);
|
ft_lstdel(&parser->stack, NULL);
|
||||||
btree_del(ast, &ast_free);
|
btree_del(ast, &ast_free);
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
|
|
@ -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/03 20:05:06 by ariard ### ########.fr */
|
/* Updated: 2017/03/04 16:49:23 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -36,11 +36,14 @@ int handle_instruction(int fd)
|
||||||
return (parser.state == UNDEFINED ? error_EOF(&token,
|
return (parser.state == UNDEFINED ? error_EOF(&token,
|
||||||
&parser, &ast) : 1);
|
&parser, &ast) : 1);
|
||||||
}
|
}
|
||||||
|
DG("after readline %s", str);
|
||||||
|
DG("in lexer %s", lexer.str);
|
||||||
ft_strappend(&lexer.str, str);
|
ft_strappend(&lexer.str, str);
|
||||||
if (get_lexer_stack(lexer) == BACKSLASH)
|
if (get_lexer_stack(lexer) == BACKSLASH)
|
||||||
pop(&lexer.stack);
|
pop(&lexer.stack);
|
||||||
else if (get_lexer_stack(lexer) == DLESS)
|
else if (get_lexer_stack(lexer) == DLESS)
|
||||||
lexer.state = DLESS;
|
lexer.state = DLESS;
|
||||||
|
DG("after readline %s", lexer.str);
|
||||||
ltoken = ft_lstlast(token);
|
ltoken = ft_lstlast(token);
|
||||||
if (lexer_lex(token ? <oken : &token, &lexer))
|
if (lexer_lex(token ? <oken : &token, &lexer))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
@ -56,7 +59,7 @@ int handle_instruction(int fd)
|
||||||
continue ;
|
continue ;
|
||||||
if (parser.state == SUCCESS)
|
if (parser.state == SUCCESS)
|
||||||
break ;
|
break ;
|
||||||
else if (parser.state == ERROR && !SH_IS_INTERACTIVE(data_singleton()->opts))
|
else if (parser.state == ERROR && SH_IS_INTERACTIVE(data_singleton()->opts))
|
||||||
return (error_syntax(&token, &parser, &ast));
|
return (error_syntax(&token, &parser, &ast));
|
||||||
else if (parser.state == ERROR)
|
else if (parser.state == ERROR)
|
||||||
error_syntax(&token, &parser, &ast);
|
error_syntax(&token, &parser, &ast);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
|
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
|
||||||
/* Updated: 2017/03/03 16:35:04 by ariard ### ########.fr */
|
/* Updated: 2017/03/04 16:16:23 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -127,6 +127,7 @@ t_aggrematch g_aggrematch[] =
|
||||||
{CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, CMD_PREFIX},
|
{CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, CMD_PREFIX},
|
||||||
{CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, CMD_NAME},
|
{CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, CMD_NAME},
|
||||||
{CMD_SUFFIX, CMD_SUPERIOR, CMD_SUPERIOR, CMD_SUPERIOR},
|
{CMD_SUFFIX, CMD_SUPERIOR, CMD_SUPERIOR, CMD_SUPERIOR},
|
||||||
|
{CMD_SUFFIX, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||||
//to abstract
|
//to abstract
|
||||||
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0},
|
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0},
|
||||||
{CMD_PREFIX, TK_PAREN_OPEN, SIMPLE_COMMAND, 0},
|
{CMD_PREFIX, TK_PAREN_OPEN, SIMPLE_COMMAND, 0},
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 20:15:35 by ariard #+# #+# */
|
/* Created: 2017/02/09 20:15:35 by ariard #+# #+# */
|
||||||
/* Updated: 2017/03/03 14:27:52 by ariard ### ########.fr */
|
/* Updated: 2017/03/04 16:50:44 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -75,12 +75,12 @@ int error_syntax(t_list **lst, t_parser *parser,
|
||||||
instruction_free(lst, parser, ast);
|
instruction_free(lst, parser, ast);
|
||||||
if (temp == 0)
|
if (temp == 0)
|
||||||
ft_putstr_fd("grammar error, notify ariard", 2);
|
ft_putstr_fd("grammar error, notify ariard", 2);
|
||||||
return (1);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int error_EOF(t_list **lst, t_parser *parser, t_btree **ast)
|
int error_EOF(t_list **lst, t_parser *parser, t_btree **ast)
|
||||||
{
|
{
|
||||||
ft_putstr_fd("syntax error near unexpected EOF", 2);
|
ft_putstr_fd("syntax error near unexpected EOF", 2);
|
||||||
instruction_free(lst, parser, ast);
|
instruction_free(lst, parser, ast);
|
||||||
return (1);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -569,6 +569,7 @@ t_stackmatch g_stackmatch[] =
|
||||||
{CMD_SUFFIX, CMD_WORD},
|
{CMD_SUFFIX, CMD_WORD},
|
||||||
{CMD_SUFFIX, CMD_NAME},
|
{CMD_SUFFIX, CMD_NAME},
|
||||||
{CMD_SUFFIX, CMD_SUPERIOR},
|
{CMD_SUFFIX, CMD_SUPERIOR},
|
||||||
|
{CMD_SUFFIX, PIPE_SEMI_SEQUENCE},
|
||||||
{CMD_PREFIX, LINEBREAK},
|
{CMD_PREFIX, LINEBREAK},
|
||||||
{CMD_PREFIX, TK_PAREN_OPEN},
|
{CMD_PREFIX, TK_PAREN_OPEN},
|
||||||
{CMD_PREFIX, TK_LBRACE},
|
{CMD_PREFIX, TK_LBRACE},
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue