liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
package syntax
 
type token uint
 
//go:generate stringer -type token -linecomment
 
const (
   _    token = iota
   _EOF       // EOF
 
   // names and literals
   _Name    // name
   _Literal // literal
 
   // operators and operations
   // _Operator is excluding '*' (_Star)
   _Operator // op
   _AssignOp // op=
   _IncOp    // opop
   _Assign   // =
   _Define   // :=
   _Arrow    // <-
   _Star     // *
 
   // delimiters
   _Lparen    // (
   _Lbrack    // [
   _Lbrace    // {
   _Rparen    // )
   _Rbrack    // ]
   _Rbrace    // }
   _Comma     // ,
   _Semi      // ;
   _Colon     // :
   _Dot       // .
   _DotDotDot // ...
 
   // keywords
   _Break       // break
   _Case        // case
   _Chan        // chan
   _Const       // const
   _Continue    // continue
   _Default     // default
   _Defer       // defer
   _Else        // else
   _Fallthrough // fallthrough
   _For         // for
   _Func        // func
   _Go          // go
   _Goto        // goto
   _If          // if
   _Import      // import
   _Interface   // interface
   _Map         // map
   _Package     // package
   _Range       // range
   _Return      // return
   _Select      // select
   _Struct      // struct
   _Switch      // switch
   _Type        // type
   _Var         // var
 
   // empty line comment to exclude it from .String
   tokenCount //
)
 
const (
   // for BranchStmt
   Break       = _Break
   Continue    = _Continue
   Fallthrough = _Fallthrough
   Goto        = _Goto
 
   // for CallStmt
   Go    = _Go
   Defer = _Defer
)
 
// Make sure we have at most 64 tokens so we can use them in a set.
const _ uint64 = 1 << (tokenCount - 1)
 
// contains reports whether tok is in tokset.
func contains(tokset uint64, tok token) bool {
   return tokset&(1<<tok) != 0
}
 
type LitKind uint
 
const (
   IntLit LitKind = iota
   FloatLit
   ImagLit
   RuneLit
   StringLit
)
 
type Operator uint
 
//go:generate stringer -type Operator -linecomment
 
const (
   _ Operator = iota
 
   // Def is the : in :=
   Def  // :
   Not  // !
   Recv // <-
 
   // precOrOr
   OrOr // ||
 
   // precAndAnd
   AndAnd // &&
 
   // precCmp
   Eql // ==
   Neq // !=
   Lss // <
   Leq // <=
   Gtr // >
   Geq // >=
 
   // precAdd
   Add // +
   Sub // -
   Or  // |
   Xor // ^
 
   // precMul
   Mul    // *
   Div    // /
   Rem    // %
   And    // &
   AndNot // &^
   Shl    // <<
   Shr    // >>
)
 
// Operator precedences
const (
   _ = iota
   precOrOr
   precAndAnd
   precCmp
   precAdd
   precMul
)