-
Notifications
You must be signed in to change notification settings - Fork 20
/
token.go
117 lines (107 loc) · 1.78 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package scanner
// Token represents a lexical token.
type Token int
// The result of Scan is one of these tokens.
const (
// Special tokens
TILLEGAL Token = iota
TEOF
// Identifiers
TIDENT
// Literals
TINTLIT
TFLOATLIT
TBOOLLIT
TSTRLIT
// Comment
TCOMMENT
// Misc characters
TSEMICOLON // ;
TCOLON // :
TEQUALS // =
TQUOTE // " or '
TLEFTPAREN // (
TRIGHTPAREN // )
TLEFTCURLY // {
TRIGHTCURLY // }
TLEFTSQUARE // [
TRIGHTSQUARE // ]
TLESS // <
TGREATER // >
TCOMMA // ,
TDOT // .
// Keywords
TSYNTAX
TSERVICE
TRPC
TRETURNS
TMESSAGE
TEXTEND
TIMPORT
TPACKAGE
TOPTION
TREPEATED
TREQUIRED
TOPTIONAL
TWEAK
TPUBLIC
TONEOF
TMAP
TRESERVED
TEXTENSIONS
TENUM
TSTREAM
TGROUP
)
func asMiscToken(ch rune) Token {
m := map[rune]Token{
';': TSEMICOLON,
':': TCOLON,
'=': TEQUALS,
'"': TQUOTE,
'\'': TQUOTE,
'(': TLEFTPAREN,
')': TRIGHTPAREN,
'{': TLEFTCURLY,
'}': TRIGHTCURLY,
'[': TLEFTSQUARE,
']': TRIGHTSQUARE,
'<': TLESS,
'>': TGREATER,
',': TCOMMA,
'.': TDOT,
}
if t, ok := m[ch]; ok {
return t
}
return TILLEGAL
}
func asKeywordToken(st string) Token {
m := map[string]Token{
"syntax": TSYNTAX,
"service": TSERVICE,
"rpc": TRPC,
"returns": TRETURNS,
"message": TMESSAGE,
"extend": TEXTEND,
"import": TIMPORT,
"package": TPACKAGE,
"option": TOPTION,
"repeated": TREPEATED,
"required": TREQUIRED,
"optional": TOPTIONAL,
"weak": TWEAK,
"public": TPUBLIC,
"oneof": TONEOF,
"map": TMAP,
"reserved": TRESERVED,
"extensions": TEXTENSIONS,
"enum": TENUM,
"stream": TSTREAM,
"group": TGROUP,
}
if t, ok := m[st]; ok {
return t
}
return TILLEGAL
}