blob: af2fc26fe3a2ae6ceaad632dd47e6ace49de7b4c (
plain)
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
|
package lang
type TokenId int
const (
Illegal = iota
Comment
Ident
Int
Float
Imag
Char
String
// Binary operators (except indicated)
// Arithmetic and bitwise binary operators
Add // +
Sub // -
Mul // *
Quo // /
Rem // %
And // &
Or // |
Xor // ^
Shl // <<
Shr // >>
AndNot // &^
Period // .
// Binary operators returning a boolean
Equal // ==
Greater // >
GreaterEqual // >=
Land // &&
Less // <
LessEqual // <=
Lor // ||
NotEqual // !=
// Assigment operators (arithmetic and bitwise)
Define // :=
Assign // =
AddAssign // +=
SubAssign // -=
MulAssign // *=
QuoAssign // /=
RemAssign // %=
AndAssign // &=
OrAssign // |=
XorAssign // ^=
ShlAssign // <<=
ShrAssign // >>=
AndNotAssign // &^=
Inc // ++
Dec // --
// Unary operations
Plus // unary +
Minus // unary -
Address // unary &
Deref // unary *
BitComp // unary ^
Arrow // unary ->
Ellipsis // unary ...
Not // unary !
Tilde // unary ~
// Separators (punctuation)
Comma // ,
Semicolon // ;
Colon // :
// Block tokens
ParenBlock // (..)
BracketBlock // [..]
BraceBlock // {..}
// Reserved keywords
Break
Case
Chan
Const
Continue
Default
Defer
Else
Fallthrough
For
Func
Go
Goto
If
Import
Interface
Map
Package
Range
Return
Select
Struct
Switch
Type
Var
// Internal virtual machine tokens (no corresponding keyword)
Call
CallX
Grow
Label
JumpFalse
JumpSetFalse
JumpSetTrue
EqualSet
)
func (t TokenId) IsKeyword() bool { return t >= Break && t <= Var }
func (t TokenId) IsOperator() bool { return t >= Add && t <= Tilde }
func (t TokenId) IsBlock() bool { return t >= ParenBlock && t <= BraceBlock }
func (t TokenId) IsBoolOp() bool { return t >= Equal && t <= NotEqual || t == Not }
func (t TokenId) IsBinaryOp() bool { return t >= Add && t <= NotEqual }
func (t TokenId) IsUnaryOp() bool { return t >= Plus && t <= Tilde }
func (t TokenId) IsLogicalOp() bool { return t == Land || t == Lor }
|