From 2235d8593b5983e4601a172346a7e32de0b4dcd1 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Tue, 12 May 2026 22:54:50 +0100 Subject: [PATCH] parse: lex: add a range of operator tokens --- bshell/parse/token.c | 62 +++++++++++++++++++++------------------- bshell/parse/token.h | 68 +++++++++++++++++++++++--------------------- 2 files changed, 67 insertions(+), 63 deletions(-) diff --git a/bshell/parse/token.c b/bshell/parse/token.c index 8d2c831..ae2b19f 100644 --- a/bshell/parse/token.c +++ b/bshell/parse/token.c @@ -122,6 +122,7 @@ const char *token_keyword_to_string(enum token_keyword keyword) ENUM_STR(KW_NONE); ENUM_STR(KW_FUNC); ENUM_STR(KW_IF); + ENUM_STR(KW_ELSEIF); ENUM_STR(KW_ELSE); default: return ""; @@ -175,36 +176,37 @@ const char *token_symbol_to_string(enum token_symbol sym) const char *token_operator_to_string(enum token_operator op) { switch (op) { - ENUM_STR(OP_BAND); - ENUM_STR(OP_BOR); - ENUM_STR(OP_BXOR); - ENUM_STR(OP_BNOT); - ENUM_STR(OP_SHL); - ENUM_STR(OP_SHR); - ENUM_STR(OP_EQ); - ENUM_STR(OP_NE); - ENUM_STR(OP_GT); - ENUM_STR(OP_LT); - ENUM_STR(OP_GE); - ENUM_STR(OP_LE); - ENUM_STR(OP_MATCH); - ENUM_STR(OP_NOTMATCH); - ENUM_STR(OP_REPLACE); - ENUM_STR(OP_LIKE); - ENUM_STR(OP_NOTLIKE); - ENUM_STR(OP_IN); - ENUM_STR(OP_NOTIN); - ENUM_STR(OP_CONTAINS); - ENUM_STR(OP_NOTCONTAINS); - ENUM_STR(OP_AND); - ENUM_STR(OP_OR); - ENUM_STR(OP_XOR); - ENUM_STR(OP_NOT); - ENUM_STR(OP_SPLIT); - ENUM_STR(OP_JOIN); - ENUM_STR(OP_IS); - ENUM_STR(OP_ISNOT); - ENUM_STR(OP_AS); + ENUM_STR(TKOP_BAND); + ENUM_STR(TKOP_BOR); + ENUM_STR(TKOP_BXOR); + ENUM_STR(TKOP_BNOT); + ENUM_STR(TKOP_SHL); + ENUM_STR(TKOP_SHR); + ENUM_STR(TKOP_EQ); + ENUM_STR(TKOP_NE); + ENUM_STR(TKOP_GT); + ENUM_STR(TKOP_LT); + ENUM_STR(TKOP_GE); + ENUM_STR(TKOP_LE); + ENUM_STR(TKOP_MATCH); + ENUM_STR(TKOP_NOTMATCH); + ENUM_STR(TKOP_REPLACE); + ENUM_STR(TKOP_LIKE); + ENUM_STR(TKOP_NOTLIKE); + ENUM_STR(TKOP_IN); + ENUM_STR(TKOP_F); + ENUM_STR(TKOP_NOTIN); + ENUM_STR(TKOP_CONTAINS); + ENUM_STR(TKOP_NOTCONTAINS); + ENUM_STR(TKOP_AND); + ENUM_STR(TKOP_OR); + ENUM_STR(TKOP_XOR); + ENUM_STR(TKOP_NOT); + ENUM_STR(TKOP_SPLIT); + ENUM_STR(TKOP_JOIN); + ENUM_STR(TKOP_IS); + ENUM_STR(TKOP_ISNOT); + ENUM_STR(TKOP_AS); default: return ""; } diff --git a/bshell/parse/token.h b/bshell/parse/token.h index ca5e28d..3500b7f 100644 --- a/bshell/parse/token.h +++ b/bshell/parse/token.h @@ -34,44 +34,46 @@ enum token_keyword { __KW_INDEX_BASE = 200, KW_FUNC, KW_IF, + KW_ELSEIF, KW_ELSE, __KW_INDEX_LIMIT, }; enum token_operator { - OP_NONE = 0, - __OP_INDEX_BASE = 300, - OP_BAND, - OP_BOR, - OP_BXOR, - OP_BNOT, - OP_SHL, - OP_SHR, - OP_EQ, - OP_NE, - OP_GT, - OP_LT, - OP_GE, - OP_LE, - OP_MATCH, - OP_NOTMATCH, - OP_REPLACE, - OP_LIKE, - OP_NOTLIKE, - OP_IN, - OP_NOTIN, - OP_CONTAINS, - OP_NOTCONTAINS, - OP_AND, - OP_OR, - OP_XOR, - OP_NOT, - OP_SPLIT, - OP_JOIN, - OP_IS, - OP_ISNOT, - OP_AS, - __OP_INDEX_LIMIT, + TKOP_NONE = 0, + __TKOP_INDEX_BASE = 300, + TKOP_F, + TKOP_BAND, + TKOP_BOR, + TKOP_BXOR, + TKOP_BNOT, + TKOP_SHL, + TKOP_SHR, + TKOP_EQ, + TKOP_NE, + TKOP_GT, + TKOP_LT, + TKOP_GE, + TKOP_LE, + TKOP_MATCH, + TKOP_NOTMATCH, + TKOP_REPLACE, + TKOP_LIKE, + TKOP_NOTLIKE, + TKOP_IN, + TKOP_NOTIN, + TKOP_CONTAINS, + TKOP_NOTCONTAINS, + TKOP_AND, + TKOP_OR, + TKOP_XOR, + TKOP_NOT, + TKOP_SPLIT, + TKOP_JOIN, + TKOP_IS, + TKOP_ISNOT, + TKOP_AS, + __TKOP_INDEX_LIMIT, }; enum token_symbol {