From 27ac54c1f7303841b247955894966fe178ff9b23 Mon Sep 17 00:00:00 2001 From: "yu.dongliang" <18588496441@163.com> Date: Thu, 24 Sep 2026 10:14:41 +0800 Subject: [PATCH] let operator priority same to C. --- core/scf_operator.c | 112 ++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/core/scf_operator.c b/core/scf_operator.c index 213f428..a463f19 100644 --- a/core/scf_operator.c +++ b/core/scf_operator.c @@ -33,62 +33,62 @@ static scf_operator_t base_operators[] = {"*", NULL, SCF_OP_DEREFERENCE, 2, 1, SCF_OP_ASSOCIATIVITY_RIGHT}, {"&", NULL, SCF_OP_ADDRESS_OF, 2, 1, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"*", "mul", SCF_OP_MUL, 4, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"/", "div", SCF_OP_DIV, 4, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"%", "mod", SCF_OP_MOD, 4, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"+", "add", SCF_OP_ADD, 5, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"-", "sub", SCF_OP_SUB, 5, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"<<", NULL, SCF_OP_SHL, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {">>", NULL, SCF_OP_SHR, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"&", "band", SCF_OP_BIT_AND, 7, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"|", "bor", SCF_OP_BIT_OR, 7, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"^", "bxor", SCF_OP_BIT_XOR, 7, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"==", "eq", SCF_OP_EQ, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"!=", "ne", SCF_OP_NE, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {">", "gt", SCF_OP_GT, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"<", "lt", SCF_OP_LT, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {">=", "ge", SCF_OP_GE, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"<=", "le", SCF_OP_LE, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"&&", NULL, SCF_OP_LOGIC_AND, 9, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - {"||", NULL, SCF_OP_LOGIC_OR, 9, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"?", NULL, SCF_OP_Q_MASK, 10, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {":", NULL, SCF_OP_COLON, 10, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - - {"=", "a", SCF_OP_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"+=", "add_", SCF_OP_ADD_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"-=", "sub_", SCF_OP_SUB_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"*=", "mul_", SCF_OP_MUL_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"/=", "div_", SCF_OP_DIV_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"%=", "mod_", SCF_OP_MOD_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"<<=", NULL, SCF_OP_SHL_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {">>=", NULL, SCF_OP_SHR_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"&=", "and_", SCF_OP_AND_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"|=", "or_", SCF_OP_OR_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - {"^=", "xor_", SCF_OP_XOR_ASSIGN, 11, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, - - {",", NULL, SCF_OP_COMMA, 12, 2, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"{}", NULL, SCF_OP_BLOCK, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"return", NULL, SCF_OP_RETURN, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"break", NULL, SCF_OP_BREAK, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"continue", NULL, SCF_OP_CONTINUE, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"goto", NULL, SCF_OP_GOTO, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"label", NULL, SCF_LABEL, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"if", NULL, SCF_OP_IF, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"while", NULL, SCF_OP_WHILE, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"do", NULL, SCF_OP_DO, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"for", NULL, SCF_OP_FOR, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - - {"switch", NULL, SCF_OP_SWITCH, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"case", NULL, SCF_OP_CASE, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, - {"default", NULL, SCF_OP_DEFAULT, 15, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"*", "mul", SCF_OP_MUL, 3, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"/", "div", SCF_OP_DIV, 3, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"%", "mod", SCF_OP_MOD, 3, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"+", "add", SCF_OP_ADD, 4, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"-", "sub", SCF_OP_SUB, 4, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"<<", NULL, SCF_OP_SHL, 5, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {">>", NULL, SCF_OP_SHR, 5, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {">", "gt", SCF_OP_GT, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"<", "lt", SCF_OP_LT, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {">=", "ge", SCF_OP_GE, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"<=", "le", SCF_OP_LE, 6, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"==", "eq", SCF_OP_EQ, 7, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"!=", "ne", SCF_OP_NE, 7, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"&", "band", SCF_OP_BIT_AND, 8, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"|", "bor", SCF_OP_BIT_OR, 9, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"^", "bxor", SCF_OP_BIT_XOR, 10, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"&&", NULL, SCF_OP_LOGIC_AND, 11, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + {"||", NULL, SCF_OP_LOGIC_OR, 12, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"?", NULL, SCF_OP_Q_MASK, 13, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {":", NULL, SCF_OP_COLON, 13, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + + {"=", "a", SCF_OP_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"+=", "add_", SCF_OP_ADD_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"-=", "sub_", SCF_OP_SUB_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"*=", "mul_", SCF_OP_MUL_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"/=", "div_", SCF_OP_DIV_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"%=", "mod_", SCF_OP_MOD_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"<<=", NULL, SCF_OP_SHL_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {">>=", NULL, SCF_OP_SHR_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"&=", "and_", SCF_OP_AND_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"|=", "or_", SCF_OP_OR_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"^=", "xor_", SCF_OP_XOR_ASSIGN, 14, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, + + {",", NULL, SCF_OP_COMMA, 15, 2, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"{}", NULL, SCF_OP_BLOCK, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"return", NULL, SCF_OP_RETURN, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"break", NULL, SCF_OP_BREAK, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"continue", NULL, SCF_OP_CONTINUE, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"goto", NULL, SCF_OP_GOTO, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"label", NULL, SCF_LABEL, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"if", NULL, SCF_OP_IF, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"while", NULL, SCF_OP_WHILE, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"do", NULL, SCF_OP_DO, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"for", NULL, SCF_OP_FOR, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + + {"switch", NULL, SCF_OP_SWITCH, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"case", NULL, SCF_OP_CASE, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, + {"default", NULL, SCF_OP_DEFAULT, 16, -1, SCF_OP_ASSOCIATIVITY_LEFT}, }; scf_operator_t* scf_find_base_operator(const char* name, const int nb_operands) -- 2.25.1