summaryrefslogtreecommitdiff
path: root/lang/token.go
blob: 534750448c9e561dd15c220ab77cbe0a0d1a3fd3 (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
package lang

type TokenId int

const (
	Illegal = iota
	Comment
	Ident
	Int
	Float
	Imag
	Char
	String

	// Operators
	Add
	Sub
	Mul
	Quo
	Rem
	And
	Or
	Xor
	Shl    // <<
	Shr    // >>
	AndNot //

	AddAssign
	SubAssign
	MulAssign
	QuoAssign
	RemAssign
	AndAssign
	OrAssign
	XorAssign
	ShlAssign
	ShrAssign
	AndNotAssign

	Land
	Lor
	Arrow
	Inc
	Dec
	Equal
	Less
	Greater
	Assign
	Not
	Plus    // unitary +
	Minus   // unitary -
	Address // unitary &
	Deref   // unitary *
	NotEqual
	LessEqual
	GreaterEqual
	Define
	Ellipsis
	Period
	Tilde

	// Separators
	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 tokens (no corresponding keyword)
	Call
	CallX
	Label
	JumpFalse
)

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 }