-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.go
95 lines (90 loc) · 3.91 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
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
package djson
type TokenType int
const (
TokenBraceOpen = TokenType(iota) // {
TokenBraceClose // }
TokenBracketsOpen // [
TokenBracketsClose // ]
TokenParenthesesOpen // (
TokenParenthesesClose // )
TokenAssignation // =
TokenEqual // ==
TokenNotEqual // !=
TokenGreateThan // >
TokenLessThan // <
TokenGreateThanEqual // >=
TokenLessThanEqual // <=
TokenOr // ||
TokenAnd // &&
TokenSemicolon // ;
TokenAddition // +
TokenMinus // -
TokenMultiplication // *
TokenDevision // /
TokenColon // :
TokenComma // ,
TokenDot // .
TokenEOF // eof
TokenExclamation // !
TokenComment // comment
TokenNull // null
TokenTrue // true
TokenFalse // false
TokenReduction // => ->
TokenNumber // number
TokenString // string
TokenRange // ... // [1 ... 10].map({"key": "" + v + "_x"})
TokenIdentifier // identifier
TokenWhitespace // whitespace
TokenMod // %
TokenExit // exit
TokenReturn // return
)
type Token struct {
Type TokenType
Raw []byte
Row, Col int
}
func (t Token) Skip() bool {
return t.Type == TokenWhitespace
}
func (t Token) Name() string {
return map[TokenType]string{
TokenBraceOpen: "BraceOpen",
TokenBraceClose: "BraceClose",
TokenBracketsOpen: "BracketsOpen", // [
TokenBracketsClose: "BracketsClose", // ]
TokenParenthesesOpen: "ParenthesesOpen", // (
TokenParenthesesClose: "ParenthesesClose", // )
TokenAssignation: "Assignation", // =
TokenEqual: "Equal", // ==
TokenNotEqual: "NotEqual", // !=
TokenGreateThan: "GreateThan", // >
TokenLessThan: "LessThan", // <
TokenGreateThanEqual: "GreateThanEqual", // >=
TokenLessThanEqual: "LessThanEqual", // <=
TokenOr: "Or", // ||
TokenAnd: "And", // &&
TokenSemicolon: "Semicolon", // ;
TokenAddition: "Addition", // +
TokenMinus: "Minus", // -
TokenMultiplication: "Multiplication", // *
TokenDevision: "Devision", // /
TokenColon: "Colon", // :
TokenComma: "Comma", // ,
TokenDot: "Dot", // .
TokenEOF: "EOF", // eof
TokenExclamation: "Exclamation", // !
TokenComment: "Comment", // comment
TokenNull: "Null", // null
TokenTrue: "True", // true
TokenFalse: "False", // false
TokenReduction: "Reduction", // =>
TokenNumber: "Number", // number
TokenMod: "Mod", // mod
TokenString: "String", // string
TokenRange: "Range", // ... // [1 ... 10].map({"key": "" + v + "_x"})
TokenIdentifier: "Identifier", // identifier
TokenWhitespace: "Whitespace", // whitespace
}[t.Type]
}