let operator priority same to C.
authoryu.dongliang <18588496441@163.com>
Thu, 24 Sep 2026 02:14:41 +0000 (10:14 +0800)
committeryu.dongliang <18588496441@163.com>
Thu, 24 Sep 2026 02:14:41 +0000 (10:14 +0800)
core/scf_operator.c

index 213f42852f5c2cf1ec960705f7d50f5da25b54e7..a463f1990f90b20ad5e881c0cd95203f7b00660b 100644 (file)
@@ -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)