tokens.mx raw
1 package token
2
3 type Token uint32
4
5 const (
6 _ Token = iota
7 EOF
8
9 NameType
10 Literal
11
12 OperatorType
13 AssignOp
14 IncOp
15 Assign
16 Define
17 Arrow
18 Star
19
20 Lparen
21 Lbrack
22 Lbrace
23 Rparen
24 Rbrack
25 Rbrace
26 Comma
27 Semi
28 Colon
29 Dot
30 DotDotDot
31
32 Break
33 Case
34 Chan
35 Const
36 Continue
37 Default
38 Defer
39 Else
40 Fallthrough
41 For
42 Func
43 Go
44 Goto
45 If
46 Import
47 Interface
48 Map
49 Package
50 Range
51 Return
52 Select
53 Struct
54 Switch
55 TypeType
56 Var
57
58 tokenCount
59 )
60
61 const _ uint64 = 1 << (tokenCount - 1)
62
63 func Contains(tokset uint64, tok Token) (ok bool) {
64 var bit uint64 = 1
65 bit = bit << tok
66 return tokset&bit != 0
67 }
68
69 type LitKind uint8
70
71 const (
72 IntLit LitKind = iota
73 FloatLit
74 ImagLit
75 RuneLit
76 StringLit
77 )
78
79 type Operator uint32
80
81 const (
82 _ Operator = iota
83
84 Def
85 Not
86 Recv
87 Tilde
88
89 OrOr
90
91 AndAnd
92
93 Eql
94 Neq
95 Lss
96 Leq
97 Gtr
98 Geq
99
100 Add
101 Sub
102 Or
103 Xor
104
105 Mul
106 Div
107 Rem
108 And
109 AndNot
110 Shl
111 Shr
112 )
113
114 const (
115 _ = iota
116 PrecOrOr
117 PrecAndAnd
118 PrecCmp
119 PrecAdd
120 PrecMul
121 )
122
123 type ConstVal interface{ String() string }
124
125 func Itoa(n int32) (s string) { return simpleItoa64(int64(n)) }
126 func Itoa64(n int64) (s string) { return simpleItoa64(n) }
127
128 func simpleItoa64(n int64) (s string) {
129 if n == 0 {
130 return "0"
131 }
132 neg := n < 0
133 if neg {
134 n = -n
135 }
136 buf := []byte{:0:20}
137 for n > 0 {
138 push(buf, byte('0'+n%10))
139 n /= 10
140 }
141 if neg {
142 push(buf, '-')
143 }
144 for i, j := int32(0), int32(len(buf))-1; i < j; i, j = i+1, j-1 {
145 buf[i], buf[j] = buf[j], buf[i]
146 }
147 return string(buf)
148 }
149
150 const Token_name = "EOFnameliteralopop=opop=:=<-*([{)]},;:....breakcasechanconstcontinuedefaultdeferelsefallthroughforfuncgogotoifimportinterfacemappackagerangereturnselectstructswitchtypevar"
151
152 func (t *Token) String() (s string) {
153 idx := [48]uint8{0, 3, 7, 14, 16, 19, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 47, 51, 55, 60, 68, 75, 80, 84, 95, 98, 102, 104, 108, 110, 116, 125, 128, 135, 140, 146, 152, 158, 164, 168, 171, 171}
154 i := *t - 1
155 if i >= Token(len(idx)-1) {
156 return "token(" | simpleItoa64(int64(i+1)) | ")"
157 }
158 return Token_name[idx[i]:idx[i+1]]
159 }
160
161 const _Operator_name = ":!<-~||&&==!=<<=>>=+-|^*/%&&^<<>>"
162
163 func (i *Operator) String() (s string) {
164 idx := [24]uint8{0, 1, 2, 4, 5, 7, 9, 11, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 33}
165 o := *i - 1
166 if o >= Operator(len(idx)-1) {
167 return "Operator(" | simpleItoa64(int64(o+1)) | ")"
168 }
169 return _Operator_name[idx[o]:idx[o+1]]
170 }
171