-
Notifications
You must be signed in to change notification settings - Fork 0
/
operator.go
92 lines (86 loc) · 1.04 KB
/
operator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package parser
import "errors"
type Operator int
const (
OpAdd Operator = iota
OpSub
OpMul
OpDiv
OpIntDiv
OpMod
OpEq
OpNeq
OpGt
OpLt
OpGtEq
OpLtEq
OpNot
OpAnd
OpScAnd
OpOr
OpScOr
OpXor
OpBinEq
)
func (a *Operator) Capture(values []string) error {
switch values[0] {
case "+":
*a = OpAdd
return nil
case "-":
*a = OpSub
return nil
case "*":
*a = OpMul
return nil
case "/":
*a = OpDiv
return nil
case "//":
*a = OpIntDiv
return nil
case "%":
*a = OpMod
return nil
case "==":
*a = OpEq
return nil
case "!=":
*a = OpNeq
return nil
case ">":
*a = OpGt
return nil
case "<":
*a = OpLt
return nil
case ">=":
*a = OpGtEq
return nil
case "<=":
*a = OpLtEq
return nil
case "!":
*a = OpNot
return nil
case "&":
*a = OpAnd
return nil
case "&&":
*a = OpScAnd
return nil
case "|":
*a = OpOr
return nil
case "||":
*a = OpScOr
return nil
case "|||":
*a = OpXor
return nil
case "===":
*a = OpBinEq
return nil
}
return errors.New("operator was an invalid value")
}