From 30e30f55e7ab47064e44a0284a993da9f76f8878 Mon Sep 17 00:00:00 2001 From: Matteo Flebus Date: Fri, 30 Jan 2026 17:43:18 +0100 Subject: [PATCH] fix(lexer): ongoing-> recongize OR as PIPE --- src/lexer/lexer_utils.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/lexer/lexer_utils.c b/src/lexer/lexer_utils.c index 3029394..d9a84dc 100644 --- a/src/lexer/lexer_utils.c +++ b/src/lexer/lexer_utils.c @@ -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] == '<') {