refactor: lexer
This commit is contained in:
parent
4cdc9c3530
commit
c2f062c671
@ -11,7 +11,6 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "minishell.h"
|
#include "minishell.h"
|
||||||
#include "typedef.h"
|
|
||||||
|
|
||||||
static t_token_type get_word_type(char c)
|
static t_token_type get_word_type(char c)
|
||||||
{
|
{
|
||||||
@ -23,6 +22,21 @@ static t_token_type get_word_type(char c)
|
|||||||
return (T_WORD);
|
return (T_WORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static t_token *process_word(t_minishell *msh, t_lexer *lexer, int pos)
|
||||||
|
{
|
||||||
|
t_token_type word_type;
|
||||||
|
t_token *token;
|
||||||
|
char *word;
|
||||||
|
|
||||||
|
word_type = get_word_type(lexer->current_char);
|
||||||
|
word = lexer_readword(msh, lexer);
|
||||||
|
if (!word)
|
||||||
|
return (token_new(msh, T_ERROR, &(lexer->current_char), pos));
|
||||||
|
token = token_new(msh, word_type, word, pos);
|
||||||
|
free_safe(msh, (void **)&word);
|
||||||
|
return (token);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Retrieves the next token from the lexer.
|
* @brief Retrieves the next token from the lexer.
|
||||||
*
|
*
|
||||||
@ -45,32 +59,23 @@ static t_token_type get_word_type(char c)
|
|||||||
t_token *ft_token_next(t_minishell *msh, t_lexer *lexer)
|
t_token *ft_token_next(t_minishell *msh, t_lexer *lexer)
|
||||||
{
|
{
|
||||||
t_token *token;
|
t_token *token;
|
||||||
t_token_type word_type;
|
|
||||||
char *word;
|
|
||||||
int current_pos;
|
int current_pos;
|
||||||
|
char c;
|
||||||
|
|
||||||
token = NULL;
|
token = NULL;
|
||||||
while (ft_isspace(lexer->current_char))
|
while (ft_isspace(lexer->current_char))
|
||||||
lexer_readchar(lexer);
|
lexer_readchar(lexer);
|
||||||
current_pos = lexer->pos;
|
current_pos = lexer->pos;
|
||||||
if (lexer->current_char == '\0')
|
c = lexer->current_char;
|
||||||
|
if (c == '\0')
|
||||||
token = token_new(msh, T_EOF, NULL, current_pos);
|
token = token_new(msh, T_EOF, NULL, current_pos);
|
||||||
else if (lexer->current_char == '<' || lexer->current_char == '>'
|
else if (c == '<' || c == '>'
|
||||||
|| lexer->current_char == '|')
|
|| c == '|')
|
||||||
token = token_parse(msh, lexer);
|
token = token_parse(msh, lexer);
|
||||||
else if (ft_isprint(lexer->current_char))
|
else if (ft_isprint(lexer->current_char))
|
||||||
{
|
token = process_word(msh, lexer, current_pos);
|
||||||
word_type = get_word_type(lexer->current_char);
|
|
||||||
word = lexer_readword(msh, lexer);
|
|
||||||
if (!word)
|
|
||||||
return (token_new(msh, T_ERROR, &lexer->current_char, current_pos));
|
|
||||||
token = token_new(msh, word_type, word, current_pos);
|
|
||||||
free_safe(msh, (void **)&word);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
token = token_new(msh, T_ERROR, NULL, current_pos);
|
token = token_new(msh, T_ERROR, NULL, current_pos);
|
||||||
printf("token->type: %d\n", token->type);
|
c = lexer->current_char;
|
||||||
}
|
|
||||||
return (token);
|
return (token);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user