fix(lexer): ongoing-> recongize OR as PIPE

This commit is contained in:
Matteo Flebus 2026-01-30 17:43:18 +01:00
parent 52d35cf355
commit 30e30f55e7

View file

@ -72,10 +72,6 @@ static void set_token_keyword(struct token *tok, char *begin, ssize_t size)
tok->type = TOKEN_ELSE;
else if (strncmp(begin, "elif", size) == 0 && size == 4)
tok->type = TOKEN_ELIF;
else if (strncmp(begin, "&&", size) == 0 && size == 2)
tok->type = TOKEN_AND;
else if (strncmp(begin, "||", size) == 0 && size == 2)
tok->type = TOKEN_OR;
// no keywords found.
if (tok->type == TOKEN_NULL)
@ -97,7 +93,12 @@ static void set_token_operator(struct token *tok, char *begin, ssize_t size)
{
if (tok->type != TOKEN_NULL)
return;
if (strncmp(begin, ">", size) == 0)
if (strncmp(begin, "&&", size) == 0 && size == 2)
tok->type = TOKEN_AND;
else if (strncmp(begin, "||", size) == 0 && size == 2)
tok->type = TOKEN_OR;
else if (strncmp(begin, ">", size) == 0)
{
tok->type = TOKEN_REDIR_RIGHT;
}
@ -231,9 +232,9 @@ struct token *new_token(char *begin, ssize_t size, struct token_info *info)
set_token_assignment(tok, begin, size);
else
{
set_token_keyword(tok, begin, size);
set_token_operator(tok, begin, size);
set_token_spechar(tok, begin, size);
set_token_keyword(tok, begin, size);
set_token_word(tok, begin, size);
}
@ -286,10 +287,19 @@ ssize_t len_op_sepchar(char *stream, ssize_t i)
if (!is_special_char(stream, i))
return -1; // should never happen
if (stream[i] != '>' && stream[i] != '<')
return 1; // special character (cannot be operator)
// OR
if (stream[i] == '|' && stream[i + 1] == '|')
return 2;
// operator
// AND
if (stream[i] == '|' && stream[i + 1] == '|')
return 2;
// special chars
if (stream[i] != '>' && stream[i] != '<')
return 1;
// REDIRS
if (stream[i] == '<')
{