1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package adt
16
17 import "cuelang.org/go/cue/token"
18
19
20
21 type Op int
22
23 func (o Op) String() string {
24 return opToString[o]
25 }
26
27
28 const (
29 NoOp Op = iota
30
31 AndOp
32 OrOp
33
34 SelectorOp
35 IndexOp
36 SliceOp
37 CallOp
38
39 BoolAndOp
40 BoolOrOp
41
42 EqualOp
43 NotOp
44 NotEqualOp
45 LessThanOp
46 LessEqualOp
47 GreaterThanOp
48 GreaterEqualOp
49
50 MatchOp
51 NotMatchOp
52
53 AddOp
54 SubtractOp
55 MultiplyOp
56 FloatQuotientOp
57 IntQuotientOp
58 IntRemainderOp
59 IntDivideOp
60 IntModuloOp
61
62 InterpolationOp
63 )
64
65 var opToString = map[Op]string{
66 AndOp: "&",
67 OrOp: "|",
68 BoolAndOp: "&&",
69 BoolOrOp: "||",
70 EqualOp: "==",
71 NotOp: "!",
72 NotEqualOp: "!=",
73 LessThanOp: "<",
74 LessEqualOp: "<=",
75 GreaterThanOp: ">",
76 GreaterEqualOp: ">=",
77 MatchOp: "=~",
78 NotMatchOp: "!~",
79 AddOp: "+",
80 SubtractOp: "-",
81 MultiplyOp: "*",
82 FloatQuotientOp: "/",
83 IntQuotientOp: "quo",
84 IntRemainderOp: "rem",
85 IntDivideOp: "div",
86 IntModuloOp: "mod",
87
88 SelectorOp: ".",
89 IndexOp: "[]",
90 SliceOp: "[:]",
91 CallOp: "()",
92
93 InterpolationOp: `\()`,
94 }
95
96
97 func OpFromToken(t token.Token) Op {
98 return tokenMap[t]
99 }
100
101
102 func (op Op) Token() token.Token {
103 return opMap[op]
104 }
105
106 var tokenMap = map[token.Token]Op{
107 token.OR: OrOp,
108 token.AND: AndOp,
109
110 token.ADD: AddOp,
111 token.SUB: SubtractOp,
112 token.MUL: MultiplyOp,
113 token.QUO: FloatQuotientOp,
114
115 token.IDIV: IntDivideOp,
116 token.IMOD: IntModuloOp,
117 token.IQUO: IntQuotientOp,
118 token.IREM: IntRemainderOp,
119
120 token.LAND: BoolAndOp,
121 token.LOR: BoolOrOp,
122
123 token.EQL: EqualOp,
124 token.LSS: LessThanOp,
125 token.GTR: GreaterThanOp,
126 token.NOT: NotOp,
127
128 token.NEQ: NotEqualOp,
129 token.LEQ: LessEqualOp,
130 token.GEQ: GreaterEqualOp,
131 token.MAT: MatchOp,
132 token.NMAT: NotMatchOp,
133 }
134
135 var opMap = map[Op]token.Token{}
136
137 func init() {
138 for t, o := range tokenMap {
139 opMap[o] = t
140 }
141 }
142
View as plain text