blob: b1e2dd8b4f1f4d1c13e338902e12273144bc5d4e (
plain) (
blame)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
package main
type tokenKind int
func (k tokenKind) String() string {
switch k {
case plusEquals:
return "+="
case plus:
return "+"
case minusEquals:
return "-="
case minus:
return "-"
case starEquals:
return "*="
case star:
return "*"
case slashEquals:
return "/="
case slash:
return "/"
case percentageEquals:
return "%="
case percentage:
return "%"
case lparen:
return "("
case rparen:
return ")"
case lbracket:
return "["
case rbracket:
return "]"
case lbrace:
return "{"
case rbrace:
return "}"
case comma:
return ","
case dot:
return "."
case colon:
return ":"
case semicolon:
return ";"
case doubleEquals:
return "=="
case equals:
return "="
case bangEquals:
return "!="
case bang:
return "!"
case tildeEquals:
return "~="
case tilde:
return "~"
case caretEquals:
return "^="
case caret:
return "^"
case doubleAmpersand:
return "&&"
case ampersandEquals:
return "&="
case ampersand:
return "&"
case doublePipe:
return "||"
case pipeEquals:
return "|="
case pipe:
return "|"
case doubleLangleEquals:
return "<<="
case doubleLangle:
return "<<"
case langleEquals:
return "<="
case langle:
return "<"
case doubleRangleEquals:
return ">>="
case doubleRangle:
return ">>"
case rangleEquals:
return ">="
case rangle:
return ">"
case identifier:
return "identifier"
case str:
return "string"
case number:
return "number"
case export:
return "export"
case extern:
return "extern"
case function:
return "func"
case ret:
return "return"
case constKeyword:
return "const"
case mut:
return "mut"
}
return "invalid token"
}
const (
none tokenKind = iota
plusEquals
plus
minusEquals
minus
starEquals
star
slashEquals
slash
percentageEquals
percentage
lparen
rparen
lbracket
rbracket
lbrace
rbrace
comma
dot
colon
semicolon
doubleEquals
equals
bangEquals
bang
tildeEquals
tilde
caretEquals
caret
doubleAmpersand
ampersandEquals
ampersand
doublePipe
pipeEquals
pipe
doubleLangleEquals
doubleLangle
langleEquals
langle
doubleRangleEquals
doubleRangle
rangleEquals
rangle
identifier
str
number
export
extern
function
ret
constKeyword
mut
)
type token struct {
kind tokenKind
value string
line int
}
func (t token) String() string {
if t.value != "" {
return t.kind.String() + " " + t.value
} else {
return t.kind.String()
}
}
type tokens struct {
src <-chan token
toks []token
index int
}
|