summaryrefslogtreecommitdiff
path: root/lang/token.go
blob: 37ac5573e7bd093185507c98c19b39ac42cf99a2 (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
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 -
	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) 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 }