mirror of
https://github.com/hanzoai/expr.git
synced 2026-09-24 16:58:58 +00:00
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package operator
|
|
|
|
type Associativity int
|
|
|
|
const (
|
|
Left Associativity = iota + 1
|
|
Right
|
|
)
|
|
|
|
type Operator struct {
|
|
Precedence int
|
|
Associativity Associativity
|
|
}
|
|
|
|
func Less(a, b string) bool {
|
|
return Binary[a].Precedence < Binary[b].Precedence
|
|
}
|
|
|
|
func IsBoolean(op string) bool {
|
|
return op == "and" || op == "or" || op == "&&" || op == "||"
|
|
}
|
|
|
|
var Unary = map[string]Operator{
|
|
"not": {50, Left},
|
|
"!": {50, Left},
|
|
"-": {90, Left},
|
|
"+": {90, Left},
|
|
}
|
|
|
|
var Binary = map[string]Operator{
|
|
"|": {0, Left},
|
|
"or": {10, Left},
|
|
"||": {10, Left},
|
|
"and": {15, Left},
|
|
"&&": {15, Left},
|
|
"==": {20, Left},
|
|
"!=": {20, Left},
|
|
"<": {20, Left},
|
|
">": {20, Left},
|
|
">=": {20, Left},
|
|
"<=": {20, Left},
|
|
"in": {20, Left},
|
|
"matches": {20, Left},
|
|
"contains": {20, Left},
|
|
"startsWith": {20, Left},
|
|
"endsWith": {20, Left},
|
|
"..": {25, Left},
|
|
"+": {30, Left},
|
|
"-": {30, Left},
|
|
"*": {60, Left},
|
|
"/": {60, Left},
|
|
"%": {60, Left},
|
|
"**": {100, Right},
|
|
"^": {100, Right},
|
|
"??": {500, Left},
|
|
}
|