blob: 5205efc1be4325bb5704c0b80f8043f1b53ad4dd (
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
package lang
type TokenId int
const (
Illegal = iota
Comment
Ident
// Literal values
Char
Float
Imag
Int
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 -
Addr // unary &
Deref // unary *
BitComp // unary ^
Arrow // unary ->
Ellipsis // unary ...
Not // unary !
Tilde // unary ~ (underlying type)
// 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
EqualSet
Grow
Index
JumpFalse
JumpSetFalse
JumpSetTrue
Label
New
)
// TODO: define UnaryOp per language
var UnaryOp = map[TokenId]TokenId{
Add: Plus, // +
And: Addr, // &
Not: Not, // !
Mul: Deref, // *
Sub: Minus, // -
Tilde: Tilde, // ~
Xor: BitComp, // ^
}
func (t TokenId) IsKeyword() bool { return t >= Break && t <= Var }
func (t TokenId) IsLiteral() bool { return t >= Char && t <= String }
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 }
|