From 23f681516254350a281ace91fe478d71d23704a3 Mon Sep 17 00:00:00 2001 From: Matteo Flebus Date: Mon, 26 Jan 2026 18:35:48 +0100 Subject: [PATCH] feat(parser): redirections types handled in grammar init --- src/parser/grammar.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/parser/grammar.c b/src/parser/grammar.c index be26dfc..02098e0 100644 --- a/src/parser/grammar.c +++ b/src/parser/grammar.c @@ -73,6 +73,20 @@ static bool init_firsts_map(void) return true; } +/* @brief: add all the redirection token_types to the first of [rule]. + * this also contains IONUMBER + */ +static void add_first_redir(enum rule rule) +{ + add_first(rule, TOKEN_IONUMBER); + add_first(rule, TOKEN_REDIR_LEFT); + add_first(rule, TOKEN_REDIR_RIGHT); + add_first(rule, TOKEN_REDIR_LEFT_RIGHT); + add_first(rule, TOKEN_REDIR_DOUBLE_RIGHT); + add_first(rule, TOKEN_REDIR_LEFT_AMP); + add_first(rule, TOKEN_REDIR_RIGHT_PIPE); +} + // === Functions bool grammar_init(void) @@ -114,14 +128,11 @@ bool grammar_init(void) add_first(RULE_ELSE_CLAUSE, TOKEN_ELIF); add_first(RULE_ELEMENT, TOKEN_WORD); - add_first(RULE_ELEMENT, TOKEN_IONUMBER); - add_first(RULE_ELEMENT, TOKEN_REDIRECTION); + add_first_redir(RULE_ELEMENT); - add_first(RULE_REDIRECTION, TOKEN_IONUMBER); - add_first(RULE_REDIRECTION, TOKEN_REDIRECTION); + add_first_redir(RULE_REDIRECTION); - add_first(RULE_PREFIX, TOKEN_IONUMBER); - add_first(RULE_PREFIX, TOKEN_REDIRECTION); + add_first_redir(RULE_PREFIX); return true; }