initial implementation looks ok, parenthesis needs fix
This commit is contained in:
parent
e8cd4f45b0
commit
6ec9f9295e
17 changed files with 150 additions and 189 deletions
|
|
@ -137,7 +137,6 @@ job-control/sigtstp_handler.c\
|
||||||
job-control/sigttin_handler.c\
|
job-control/sigttin_handler.c\
|
||||||
job-control/sigttou_handler.c\
|
job-control/sigttou_handler.c\
|
||||||
lexer/command_getoutput.c\
|
lexer/command_getoutput.c\
|
||||||
lexer/ft_post_tokenize.c\
|
|
||||||
lexer/get_state_global.c\
|
lexer/get_state_global.c\
|
||||||
lexer/get_state_redir.c\
|
lexer/get_state_redir.c\
|
||||||
lexer/lexer_backslash.c\
|
lexer/lexer_backslash.c\
|
||||||
|
|
@ -153,9 +152,9 @@ lexer/lexer_lessand.c\
|
||||||
lexer/lexer_lex.c\
|
lexer/lexer_lex.c\
|
||||||
lexer/lexer_newline.c\
|
lexer/lexer_newline.c\
|
||||||
lexer/lexer_number.c\
|
lexer/lexer_number.c\
|
||||||
|
lexer/lexer_paren.c\
|
||||||
lexer/lexer_quote.c\
|
lexer/lexer_quote.c\
|
||||||
lexer/lexer_sep.c\
|
lexer/lexer_sep.c\
|
||||||
lexer/lexer_subshell.c\
|
|
||||||
lexer/lexer_word.c\
|
lexer/lexer_word.c\
|
||||||
lexer/reduce_bquotes.c\
|
lexer/reduce_bquotes.c\
|
||||||
lexer/reduce_parens.c\
|
lexer/reduce_parens.c\
|
||||||
|
|
|
||||||
|
|
@ -31,14 +31,15 @@
|
||||||
# define TK_PAREN_OPEN (1 << 11)
|
# define TK_PAREN_OPEN (1 << 11)
|
||||||
# define TK_PAREN_CLOSE (1 << 12)
|
# define TK_PAREN_CLOSE (1 << 12)
|
||||||
# define TK_BQUOTE (1 << 13)
|
# define TK_BQUOTE (1 << 13)
|
||||||
# define TK_N_WORD (1 << 14)
|
# define TK_WORD (1 << 14)
|
||||||
# define TK_Q_WORD (1 << 15)
|
/* # define TK_N_WORD (1 << 14) */
|
||||||
# define TK_DQ_WORD (1 << 16)
|
/* # define TK_Q_WORD (1 << 15) */
|
||||||
|
/* # define TK_DQ_WORD (1 << 16) */
|
||||||
# define TK_COMMAND (1 << 17)
|
# define TK_COMMAND (1 << 17)
|
||||||
# define TK_SUBSHELL (1 << 18)
|
# define TK_SUBSHELL (1 << 18)
|
||||||
# define TK_NEWLINE (1 << 19)
|
# define TK_NEWLINE (1 << 19)
|
||||||
|
|
||||||
# define TK_WORD (TK_N_WORD | TK_Q_WORD | TK_DQ_WORD)
|
/* # define TK_WORD (TK_N_WORD | TK_Q_WORD | TK_DQ_WORD) */
|
||||||
# define TK_REDIR (0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20)
|
# define TK_REDIR (0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20)
|
||||||
# define TK_NON_FREEABLE (TK_PAREN_OPEN | TK_PAREN_CLOSE | TK_BQUOTE)
|
# define TK_NON_FREEABLE (TK_PAREN_OPEN | TK_PAREN_CLOSE | TK_BQUOTE)
|
||||||
|
|
||||||
|
|
@ -58,7 +59,7 @@ enum e_lexstate
|
||||||
DQUOTE,
|
DQUOTE,
|
||||||
BQUOTE,
|
BQUOTE,
|
||||||
BACKSLASH,
|
BACKSLASH,
|
||||||
SUBSHELL,
|
PAREN,
|
||||||
COMMENT,
|
COMMENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -116,7 +117,7 @@ int lexer_quote(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_dquote(t_list **alst, t_lexer *lexer);
|
int lexer_dquote(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_bquote(t_list **alst, t_lexer *lexer);
|
int lexer_bquote(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_backslash(t_list **alst, t_lexer *lexer);
|
int lexer_backslash(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_subshell(t_list **alst, t_lexer *lexer);
|
int lexer_paren(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_comment(t_list **alst, t_lexer *lexer);
|
int lexer_comment(t_list **alst, t_lexer *lexer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* ft_post_tokenize.c :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2017/01/11 16:11:11 by jhalford #+# #+# */
|
|
||||||
/* Updated: 2017/02/06 14:33:34 by jhalford ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
#include "lexer.h"
|
|
||||||
|
|
||||||
int ft_post_tokenize(t_list **alst, char **str)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
t_flag tk;
|
|
||||||
|
|
||||||
while ((ret = reduce_parens(alst, *str)))
|
|
||||||
if (ret == -1)
|
|
||||||
{
|
|
||||||
ft_dprintf(2, "{red}%s: parse error near '('{eoc}\n", SHELL_NAME);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
tk = TK_PAREN_CLOSE;
|
|
||||||
if (ft_lst_find(*alst, &tk, token_cmp_type))
|
|
||||||
{
|
|
||||||
ft_dprintf(2, "{red}%s: parse error near ')'{eoc}\n", SHELL_NAME);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
while ((ret = reduce_bquotes(alst, str)))
|
|
||||||
if (ret == -1)
|
|
||||||
{
|
|
||||||
ft_dprintf(2, "{red}%s: parse error near '`'{eoc}\n", SHELL_NAME);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
DG("new command from bquotes: '%s'", *str);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
@ -32,6 +32,6 @@ t_lexstate get_state_global(t_lexer *lexer)
|
||||||
else if (c == '`')
|
else if (c == '`')
|
||||||
return (BQUOTE);
|
return (BQUOTE);
|
||||||
else if (c == '(' || c == ')')
|
else if (c == '(' || c == ')')
|
||||||
return (SUBSHELL);
|
return (PAREN);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,19 +17,21 @@ int lexer_bquote(t_list **alst, t_lexer *lexer)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_Q_WORD;
|
token->type = TK_WORD;
|
||||||
lexer->pos++;
|
|
||||||
push(&lexer->stack, BQUOTE);
|
|
||||||
if (lexer->str[lexer->pos] == '`')
|
if (lexer->str[lexer->pos] == '`')
|
||||||
{
|
{
|
||||||
lexer->state = WORD;
|
|
||||||
lexer->pos++;
|
lexer->pos++;
|
||||||
|
if (!(lexer->stack && *(int*)lexer->stack->content == BQUOTE))
|
||||||
|
{
|
||||||
|
push(&lexer->stack, BQUOTE);
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
|
lexer->state = WORD;
|
||||||
pop(&lexer->stack);
|
pop(&lexer->stack);
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
else if (lexer->str[lexer->pos] == 0)
|
|
||||||
return (0);
|
|
||||||
token_append(token, lexer, 0, 0);
|
token_append(token, lexer, 0, 0);
|
||||||
|
lexer->pos++;
|
||||||
return (lexer_quote(alst, lexer));
|
return (lexer_quote(alst, lexer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,27 +14,16 @@
|
||||||
|
|
||||||
int lexer_default(t_list **alst, t_lexer *lexer)
|
int lexer_default(t_list **alst, t_lexer *lexer)
|
||||||
{
|
{
|
||||||
t_lexstate state;
|
|
||||||
t_token *token;
|
t_token *token;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
c = lexer->str[lexer->pos];
|
c = lexer->str[lexer->pos];
|
||||||
if ((state = get_state_global(lexer)))
|
if ((lexer->state = get_state_global(lexer)))
|
||||||
{
|
|
||||||
lexer->state = state;
|
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
if ((lexer->state = get_state_redir(lexer)))
|
||||||
if ((state = get_state_redir(lexer)))
|
|
||||||
{
|
|
||||||
lexer->state = state;
|
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
lexer->state = ft_isdigit(c) ? NUMBER : WORD;
|
||||||
else if (ft_isdigit(c))
|
|
||||||
lexer->state = NUMBER;
|
|
||||||
else
|
|
||||||
lexer->state = WORD;
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token_append(token, lexer, 0, 0);
|
token->type = TK_WORD;
|
||||||
token->type = TK_N_WORD;
|
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,17 @@ int lexer_delim(t_list **alst, t_lexer *lexer)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
|
DG("DELIM");
|
||||||
while (ft_is_delim(lexer->str[lexer->pos]))
|
while (ft_is_delim(lexer->str[lexer->pos]))
|
||||||
lexer->pos++;
|
lexer->pos++;
|
||||||
|
lexer->state = DEFAULT;
|
||||||
if (token->type)
|
if (token->type)
|
||||||
|
{
|
||||||
return (lexer_lex(&(*alst)->next, lexer));
|
return (lexer_lex(&(*alst)->next, lexer));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!lexer->str[lexer->pos])
|
if (lexer->str[lexer->pos] == 0)
|
||||||
ft_lst_delif(alst, (*alst)->content, &ft_addrcmp, &token_free);
|
ft_lst_delif(alst, (*alst)->content, &ft_addrcmp, &token_free);
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,20 @@ int lexer_dquote(t_list **alst, t_lexer *lexer)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_DQ_WORD;
|
token->type = TK_WORD;
|
||||||
if (*(int*)lexer->stack->content != DQUOTE)
|
|
||||||
push(&lexer->stack, DQUOTE);
|
|
||||||
lexer->pos++;
|
|
||||||
if (lexer->str[lexer->pos] == '"')
|
if (lexer->str[lexer->pos] == '"')
|
||||||
{
|
{
|
||||||
lexer->pos++;
|
lexer->pos++;
|
||||||
|
if (!(lexer->stack && *(int*)lexer->stack->content == DQUOTE))
|
||||||
|
{
|
||||||
|
push(&lexer->stack, DQUOTE);
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
lexer->state = WORD;
|
lexer->state = WORD;
|
||||||
pop(&lexer->stack);
|
pop(&lexer->stack);
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
else if (lexer->str[lexer->pos] == '\\')
|
if (lexer->str[lexer->pos] == '\\')
|
||||||
{
|
{
|
||||||
if (lexer->str[lexer->pos + 1] == '"')
|
if (lexer->str[lexer->pos + 1] == '"')
|
||||||
token_append(token, lexer, 1, 0);
|
token_append(token, lexer, 1, 0);
|
||||||
|
|
@ -42,9 +44,11 @@ int lexer_dquote(t_list **alst, t_lexer *lexer)
|
||||||
return (lexer_dquote(alst,lexer));
|
return (lexer_dquote(alst,lexer));
|
||||||
}
|
}
|
||||||
else if (lexer->str[lexer->pos] == '`')
|
else if (lexer->str[lexer->pos] == '`')
|
||||||
|
{
|
||||||
|
lexer->state = BQUOTE;
|
||||||
lexer_bquote(alst, lexer);
|
lexer_bquote(alst, lexer);
|
||||||
else if (lexer->str[lexer->pos] == 0)
|
}
|
||||||
return (0);
|
token_append(token, lexer, 1, 0);
|
||||||
token_append(token, lexer, 1, 0);
|
lexer->pos++;
|
||||||
return (lexer_dquote(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ int (*g_lexer[])(t_list **alst, t_lexer *lexer) =
|
||||||
&lexer_dquote,
|
&lexer_dquote,
|
||||||
&lexer_bquote,
|
&lexer_bquote,
|
||||||
&lexer_backslash,
|
&lexer_backslash,
|
||||||
&lexer_subshell,
|
&lexer_paren,
|
||||||
&lexer_comment,
|
&lexer_comment,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
31
42sh/src/lexer/lexer_paren.c
Normal file
31
42sh/src/lexer/lexer_paren.c
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
#include "lexer.h"
|
||||||
|
|
||||||
|
int lexer_paren(t_list **alst, t_lexer *lexer)
|
||||||
|
{
|
||||||
|
t_token *token;
|
||||||
|
t_list **lst;
|
||||||
|
|
||||||
|
lst = alst;
|
||||||
|
if (*alst)
|
||||||
|
{
|
||||||
|
token = (*alst)->content;
|
||||||
|
if (token->type)
|
||||||
|
lst = &(*alst)->next;
|
||||||
|
}
|
||||||
|
token = token_init();
|
||||||
|
*lst = ft_lstnew(token, sizeof(*token));
|
||||||
|
token = (*lst)->content;
|
||||||
|
if (lexer->str[lexer->pos] == '(')
|
||||||
|
{
|
||||||
|
token->type = TK_PAREN_OPEN;
|
||||||
|
push(&lexer->stack, PAREN);
|
||||||
|
}
|
||||||
|
else if (lexer->stack && *(int*)lexer->stack->content == PAREN)
|
||||||
|
{
|
||||||
|
token->type = TK_PAREN_CLOSE;
|
||||||
|
pop(&lexer->stack);
|
||||||
|
}
|
||||||
|
lexer->pos++;
|
||||||
|
lexer->state = DEFAULT;
|
||||||
|
return (lexer_lex(&(*lst)->next, lexer));
|
||||||
|
}
|
||||||
|
|
@ -17,18 +17,20 @@ int lexer_quote(t_list **alst, t_lexer *lexer)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_Q_WORD;
|
token->type = TK_WORD;
|
||||||
lexer->pos++;
|
|
||||||
push(&lexer->stack, QUOTE);
|
|
||||||
if (lexer->str[lexer->pos] == '\'')
|
if (lexer->str[lexer->pos] == '\'')
|
||||||
{
|
{
|
||||||
lexer->state = WORD;
|
|
||||||
lexer->pos++;
|
lexer->pos++;
|
||||||
|
if (!(lexer->stack && *(int*)lexer->stack->content == QUOTE))
|
||||||
|
{
|
||||||
|
push(&lexer->stack, QUOTE);
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
|
lexer->state = WORD;
|
||||||
pop(&lexer->stack);
|
pop(&lexer->stack);
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
else if (lexer->str[lexer->pos] == 0)
|
|
||||||
return (0);
|
|
||||||
token_append(token, lexer, 1, 1);
|
token_append(token, lexer, 1, 1);
|
||||||
return (lexer_quote(alst, lexer));
|
lexer->pos++;
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* lexer_special.c :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2017/01/11 15:35:38 by jhalford #+# #+# */
|
|
||||||
/* Updated: 2017/02/09 22:09:07 by jhalford ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
#include "lexer.h"
|
|
||||||
|
|
||||||
int lexer_subshell(t_list **alst, t_lexer *lexer)
|
|
||||||
{
|
|
||||||
t_token *token;
|
|
||||||
t_list **lst;
|
|
||||||
|
|
||||||
lst = alst;
|
|
||||||
if (*alst)
|
|
||||||
{
|
|
||||||
token = (*alst)->content;
|
|
||||||
if (token->type)
|
|
||||||
lst = &(*alst)->next;
|
|
||||||
}
|
|
||||||
token = token_init();
|
|
||||||
*lst = ft_lstnew(token, sizeof(*token));
|
|
||||||
token = (*lst)->content;
|
|
||||||
if (lexer->str[lexer->pos] == '(')
|
|
||||||
token->type = TK_PAREN_OPEN;
|
|
||||||
else if (lexer->str[lexer->pos] == ')')
|
|
||||||
token->type = TK_PAREN_CLOSE;
|
|
||||||
token->data = lexer->str;
|
|
||||||
lexer->pos++;
|
|
||||||
return (lexer_lex(&(*lst)->next, lexer));
|
|
||||||
}
|
|
||||||
|
|
@ -18,9 +18,12 @@ int lexer_word(t_list **alst, t_lexer *lexer)
|
||||||
t_lexstate state;
|
t_lexstate state;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_N_WORD;
|
token->type = TK_WORD;
|
||||||
if ((state = get_state_global(lexer)))
|
if ((state = get_state_global(lexer)))
|
||||||
|
{
|
||||||
|
lexer->state = state;
|
||||||
return (lexer_lex(alst, lexer));
|
return (lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
if ((state = get_state_redir(lexer)))
|
if ((state = get_state_redir(lexer)))
|
||||||
{
|
{
|
||||||
lexer->state = state;
|
lexer->state = state;
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ char *stack_to_prompt(t_list *stack)
|
||||||
return ("dquote> ");
|
return ("dquote> ");
|
||||||
else if (top == BQUOTE)
|
else if (top == BQUOTE)
|
||||||
return ("bquote> ");
|
return ("bquote> ");
|
||||||
else if (top == SUBSHELL)
|
else if (top == PAREN)
|
||||||
return ("subsh> ");
|
return ("subsh> ");
|
||||||
else
|
else
|
||||||
return (" > ");
|
return ("error> ");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ char *ft_read_stdin(void)
|
||||||
ft_print(ret);
|
ft_print(ret);
|
||||||
else if (ret == 10)
|
else if (ret == 10)
|
||||||
return (STR);
|
return (STR);
|
||||||
/* else if (ft_isascii(ret) == 0) */
|
else if (ft_isascii(ret) == 0)
|
||||||
/* ft_read_it(ret, &POS, &STR); */
|
ft_read_it(ret, &POS, &STR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,62 +10,62 @@
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
/* #include "minishell.h" */
|
#include "minishell.h"
|
||||||
|
|
||||||
/* static void ft_read_it_3(char **str, char t[5], size_t *pos, int *j) */
|
static void ft_read_it_3(char **str, char t[5], size_t *pos, int *j)
|
||||||
/* { */
|
{
|
||||||
/* int i; */
|
int i;
|
||||||
|
|
||||||
/* i = 0; */
|
i = 0;
|
||||||
/* while (i < 4 && t[i] == '\0') */
|
while (i < 4 && t[i] == '\0')
|
||||||
/* ++i; */
|
++i;
|
||||||
/* while (i < 4) */
|
while (i < 4)
|
||||||
/* { */
|
{
|
||||||
/* if (t[i] && ft_isprint(t[i])) */
|
if (t[i] && ft_isprint(t[i]))
|
||||||
/* { */
|
{
|
||||||
/* *str = ft_realloc_imput(*str, t[i], *pos); */
|
*str = ft_realloc_imput(*str, t[i], *pos);
|
||||||
/* ++(*pos); */
|
++(*pos);
|
||||||
/* ++(*j); */
|
++(*j);
|
||||||
/* } */
|
}
|
||||||
/* ++i; */
|
++i;
|
||||||
/* } */
|
}
|
||||||
/* } */
|
}
|
||||||
|
|
||||||
/* static void ft_read_it_2(int input, char t[5]) */
|
static void ft_read_it_2(int input, char t[5])
|
||||||
/* { */
|
{
|
||||||
/* t[3] = (input / ft_pow(256, 3)) ? (input / ft_pow(256, 3)) : '\0'; */
|
t[3] = (input / ft_pow(256, 3)) ? (input / ft_pow(256, 3)) : '\0';
|
||||||
/* if (t[3]) */
|
if (t[3])
|
||||||
/* input = input % ft_pow(256, 3); */
|
input = input % ft_pow(256, 3);
|
||||||
/* t[2] = (input / ft_pow(256, 2)) ? (input / ft_pow(256, 2)) : '\0'; */
|
t[2] = (input / ft_pow(256, 2)) ? (input / ft_pow(256, 2)) : '\0';
|
||||||
/* if (t[2]) */
|
if (t[2])
|
||||||
/* input = input % ft_pow(256, 2); */
|
input = input % ft_pow(256, 2);
|
||||||
/* t[1] = (input / ft_pow(256, 1)) ? (input / ft_pow(256, 1)) : '\0'; */
|
t[1] = (input / ft_pow(256, 1)) ? (input / ft_pow(256, 1)) : '\0';
|
||||||
/* if (t[1]) */
|
if (t[1])
|
||||||
/* input = input % ft_pow(256, 1); */
|
input = input % ft_pow(256, 1);
|
||||||
/* t[0] = (input / ft_pow(256, 0)) ? (input / ft_pow(256, 0)) : '\0'; */
|
t[0] = (input / ft_pow(256, 0)) ? (input / ft_pow(256, 0)) : '\0';
|
||||||
/* if (t[0]) */
|
if (t[0])
|
||||||
/* input = input % ft_pow(256, 0); */
|
input = input % ft_pow(256, 0);
|
||||||
/* t[4] = '\0'; */
|
t[4] = '\0';
|
||||||
/* } */
|
}
|
||||||
|
|
||||||
/* void ft_read_it(int input, size_t *pos, char **str) */
|
void ft_read_it(int input, size_t *pos, char **str)
|
||||||
/* { */
|
{
|
||||||
/* int j; */
|
int j;
|
||||||
/* char t[5]; */
|
char t[5];
|
||||||
/* size_t pos_tmp; */
|
size_t pos_tmp;
|
||||||
|
|
||||||
/* j = 0; */
|
j = 0;
|
||||||
/* pos_tmp = *pos; */
|
pos_tmp = *pos;
|
||||||
/* if (input == TOUCHE_DELETE || input < 0 || input == 892427035 || */
|
if (input == TOUCHE_DELETE || input < 0 || input == 892427035 ||
|
||||||
/* input == 126 || input == 993090331 || input == 925981467 || */
|
input == 126 || input == 993090331 || input == 925981467 ||
|
||||||
/* input == 21298 || input == 892427035 || input == 8270395 || input == */
|
input == 21298 || input == 892427035 || input == 8270395 || input ==
|
||||||
/* 942758683 || input == 993090331 || input == 18489 || input == 17977) */
|
942758683 || input == 993090331 || input == 18489 || input == 17977)
|
||||||
/* return ; */
|
return ;
|
||||||
/* ft_read_it_2(input, t); */
|
ft_read_it_2(input, t);
|
||||||
/* ft_read_it_3(str, t, pos, &j); */
|
ft_read_it_3(str, t, pos, &j);
|
||||||
/* *pos = pos_tmp; */
|
*pos = pos_tmp;
|
||||||
/* ft_current_str((*str), *pos); */
|
ft_current_str((*str), *pos);
|
||||||
/* ft_get_next_str((*str), pos); */
|
ft_get_next_str((*str), pos);
|
||||||
/* ft_putnc('\b', *pos - (pos_tmp + j)); */
|
ft_putnc('\b', *pos - (pos_tmp + j));
|
||||||
/* *pos = (pos_tmp + j); */
|
*pos = (pos_tmp + j);
|
||||||
/* } */
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,17 +24,20 @@ int interactive_shell()
|
||||||
lexer.str = NULL;
|
lexer.str = NULL;
|
||||||
token = NULL;
|
token = NULL;
|
||||||
lexer.stack = NULL;
|
lexer.stack = NULL;
|
||||||
|
ast = NULL;
|
||||||
do {
|
do {
|
||||||
if (lexer.stack && *(int*)lexer.stack->content == BACKSLASH)
|
if (lexer.stack && *(int*)lexer.stack->content == BACKSLASH)
|
||||||
pop(&lexer.stack);
|
pop(&lexer.stack);
|
||||||
ft_strappend(&lexer.str, readline(stack_to_prompt(lexer.stack)));
|
ft_strappend(&lexer.str, readline(stack_to_prompt(lexer.stack)));
|
||||||
|
DG("[{mag}%s{eoc}]", lexer.str);
|
||||||
ltoken = ft_lstlast(token);
|
ltoken = ft_lstlast(token);
|
||||||
lexer_lex((token ? <oken : &token), &lexer);
|
lexer_lex((token ? <oken : &token), &lexer);
|
||||||
token_print(token);
|
token_print(token);
|
||||||
} while (lexer.stack->content);
|
} while (lexer.stack);
|
||||||
|
DG("after lexing");
|
||||||
|
token_print(token);
|
||||||
if (ft_parse(&ast, &token))
|
if (ft_parse(&ast, &token))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
btree_print(STDBUG, ast, &ft_putast);
|
btree_print(STDBUG, ast, &ft_putast);
|
||||||
if (ft_exec(&ast))
|
if (ft_exec(&ast))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue