-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtoken.go
65 lines (58 loc) · 1.07 KB
/
token.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
package parse
// Token represents a single token in the parser
type Token struct {
Char string
}
func (t Token) IsDigit() bool {
r := t.Char
return r == "0" ||
r == "1" ||
r == "2" ||
r == "3" ||
r == "4" ||
r == "5" ||
r == "6" ||
r == "7" ||
r == "8" ||
r == "9"
}
func CommaToken() Token {
return Token{Char: `,`}
}
func QuoteToken() Token {
return Token{Char: `"`}
}
func ArrayStartToken() Token {
return Token{Char: `[`}
}
func ArrayEndToken() Token {
return Token{Char: `]`}
}
func ObjectStartToken() Token {
return Token{Char: `{`}
}
func ObjectEndToken() Token {
return Token{Char: `}`}
}
func Tokenize(str string, ch chan<- Token) {
for _, char := range str {
var tkn Token
if char == ',' {
tkn = CommaToken()
} else if char == '"' {
tkn = QuoteToken()
} else if char == '[' {
tkn = ArrayStartToken()
} else if char == ']' {
tkn = ArrayEndToken()
} else if char == '{' {
tkn = ObjectStartToken()
} else if char == '}' {
tkn = ObjectEndToken()
} else {
tkn = Token{Char: string(char)}
}
ch <- tkn
}
close(ch)
}