summaryrefslogtreecommitdiff
path: root/lang/token.go
blob: 880f4743e7d5a888b99e3e2b7f556ef31dfa18e4 (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
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
	Label
	JumpFalse
	JumpSetFalse
	JumpSetTrue
)

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 }