tokens.go

  1// Copyright (c) 2016, Daniel MartΓ­ <mvdan@mvdan.cc>
  2// See LICENSE for licensing information
  3
  4package syntax
  5
  6//go:generate stringer -type token -linecomment -trimprefix _
  7
  8type token uint32
  9
 10// The list of all possible tokens.
 11const (
 12	illegalTok token = iota
 13
 14	_EOF
 15	_Newl
 16	_Lit
 17	_LitWord
 18	_LitRedir
 19
 20	sglQuote // '
 21	dblQuote // "
 22	bckQuote // `
 23
 24	and    // &
 25	andAnd // &&
 26	orOr   // ||
 27	or     // |
 28	orAnd  // |&
 29
 30	dollar       // $
 31	dollSglQuote // $'
 32	dollDblQuote // $"
 33	dollBrace    // ${
 34	dollBrack    // $[
 35	dollParen    // $(
 36	dollDblParen // $((
 37	leftBrack    // [
 38	dblLeftBrack // [[
 39	leftParen    // (
 40	dblLeftParen // ((
 41
 42	rightBrace    // }
 43	rightBrack    // ]
 44	rightParen    // )
 45	dblRightParen // ))
 46	semicolon     // ;
 47
 48	dblSemicolon // ;;
 49	semiAnd      // ;&
 50	dblSemiAnd   // ;;&
 51	semiOr       // ;|
 52
 53	exclMark // !
 54	tilde    // ~
 55	addAdd   // ++
 56	subSub   // --
 57	star     // *
 58	power    // **
 59	equal    // ==
 60	nequal   // !=
 61	lequal   // <=
 62	gequal   // >=
 63
 64	addAssgn // +=
 65	subAssgn // -=
 66	mulAssgn // *=
 67	quoAssgn // /=
 68	remAssgn // %=
 69	andAssgn // &=
 70	orAssgn  // |=
 71	xorAssgn // ^=
 72	shlAssgn // <<=
 73	shrAssgn // >>=
 74
 75	rdrOut   // >
 76	appOut   // >>
 77	rdrIn    // <
 78	rdrInOut // <>
 79	dplIn    // <&
 80	dplOut   // >&
 81	clbOut   // >|
 82	hdoc     // <<
 83	dashHdoc // <<-
 84	wordHdoc // <<<
 85	rdrAll   // &>
 86	appAll   // &>>
 87
 88	cmdIn  // <(
 89	cmdOut // >(
 90
 91	plus     // +
 92	colPlus  // :+
 93	minus    // -
 94	colMinus // :-
 95	quest    // ?
 96	colQuest // :?
 97	assgn    // =
 98	colAssgn // :=
 99	perc     // %
100	dblPerc  // %%
101	hash     // #
102	dblHash  // ##
103	caret    // ^
104	dblCaret // ^^
105	comma    // ,
106	dblComma // ,,
107	at       // @
108	slash    // /
109	dblSlash // //
110	colon    // :
111
112	tsExists  // -e
113	tsRegFile // -f
114	tsDirect  // -d
115	tsCharSp  // -c
116	tsBlckSp  // -b
117	tsNmPipe  // -p
118	tsSocket  // -S
119	tsSmbLink // -L
120	tsSticky  // -k
121	tsGIDSet  // -g
122	tsUIDSet  // -u
123	tsGrpOwn  // -G
124	tsUsrOwn  // -O
125	tsModif   // -N
126	tsRead    // -r
127	tsWrite   // -w
128	tsExec    // -x
129	tsNoEmpty // -s
130	tsFdTerm  // -t
131	tsEmpStr  // -z
132	tsNempStr // -n
133	tsOptSet  // -o
134	tsVarSet  // -v
135	tsRefVar  // -R
136
137	tsReMatch // =~
138	tsNewer   // -nt
139	tsOlder   // -ot
140	tsDevIno  // -ef
141	tsEql     // -eq
142	tsNeq     // -ne
143	tsLeq     // -le
144	tsGeq     // -ge
145	tsLss     // -lt
146	tsGtr     // -gt
147
148	globQuest // ?(
149	globStar  // *(
150	globPlus  // +(
151	globAt    // @(
152	globExcl  // !(
153)
154
155type RedirOperator token
156
157const (
158	RdrOut   = RedirOperator(rdrOut) + iota // >
159	AppOut                                  // >>
160	RdrIn                                   // <
161	RdrInOut                                // <>
162	DplIn                                   // <&
163	DplOut                                  // >&
164	ClbOut                                  // >|
165	Hdoc                                    // <<
166	DashHdoc                                // <<-
167	WordHdoc                                // <<<
168	RdrAll                                  // &>
169	AppAll                                  // &>>
170)
171
172type ProcOperator token
173
174const (
175	CmdIn  = ProcOperator(cmdIn) + iota // <(
176	CmdOut                              // >(
177)
178
179type GlobOperator token
180
181const (
182	GlobZeroOrOne  = GlobOperator(globQuest) + iota // ?(
183	GlobZeroOrMore                                  // *(
184	GlobOneOrMore                                   // +(
185	GlobOne                                         // @(
186	GlobExcept                                      // !(
187)
188
189type BinCmdOperator token
190
191const (
192	AndStmt = BinCmdOperator(andAnd) + iota // &&
193	OrStmt                                  // ||
194	Pipe                                    // |
195	PipeAll                                 // |&
196)
197
198type CaseOperator token
199
200const (
201	Break       = CaseOperator(dblSemicolon) + iota // ;;
202	Fallthrough                                     // ;&
203	Resume                                          // ;;&
204	ResumeKorn                                      // ;|
205)
206
207type ParNamesOperator token
208
209const (
210	NamesPrefix      = ParNamesOperator(star) // *
211	NamesPrefixWords = ParNamesOperator(at)   // @
212)
213
214type ParExpOperator token
215
216const (
217	AlternateUnset       = ParExpOperator(plus) + iota // +
218	AlternateUnsetOrNull                               // :+
219	DefaultUnset                                       // -
220	DefaultUnsetOrNull                                 // :-
221	ErrorUnset                                         // ?
222	ErrorUnsetOrNull                                   // :?
223	AssignUnset                                        // =
224	AssignUnsetOrNull                                  // :=
225	RemSmallSuffix                                     // %
226	RemLargeSuffix                                     // %%
227	RemSmallPrefix                                     // #
228	RemLargePrefix                                     // ##
229	UpperFirst                                         // ^
230	UpperAll                                           // ^^
231	LowerFirst                                         // ,
232	LowerAll                                           // ,,
233	OtherParamOps                                      // @
234)
235
236type UnAritOperator token
237
238const (
239	Not         = UnAritOperator(exclMark) + iota // !
240	BitNegation                                   // ~
241	Inc                                           // ++
242	Dec                                           // --
243	Plus        = UnAritOperator(plus)            // +
244	Minus       = UnAritOperator(minus)           // -
245)
246
247type BinAritOperator token
248
249const (
250	Add = BinAritOperator(plus)   // +
251	Sub = BinAritOperator(minus)  // -
252	Mul = BinAritOperator(star)   // *
253	Quo = BinAritOperator(slash)  // /
254	Rem = BinAritOperator(perc)   // %
255	Pow = BinAritOperator(power)  // **
256	Eql = BinAritOperator(equal)  // ==
257	Gtr = BinAritOperator(rdrOut) // >
258	Lss = BinAritOperator(rdrIn)  // <
259	Neq = BinAritOperator(nequal) // !=
260	Leq = BinAritOperator(lequal) // <=
261	Geq = BinAritOperator(gequal) // >=
262	And = BinAritOperator(and)    // &
263	Or  = BinAritOperator(or)     // |
264	Xor = BinAritOperator(caret)  // ^
265	Shr = BinAritOperator(appOut) // >>
266	Shl = BinAritOperator(hdoc)   // <<
267
268	AndArit   = BinAritOperator(andAnd) // &&
269	OrArit    = BinAritOperator(orOr)   // ||
270	Comma     = BinAritOperator(comma)  // ,
271	TernQuest = BinAritOperator(quest)  // ?
272	TernColon = BinAritOperator(colon)  // :
273
274	Assgn    = BinAritOperator(assgn)    // =
275	AddAssgn = BinAritOperator(addAssgn) // +=
276	SubAssgn = BinAritOperator(subAssgn) // -=
277	MulAssgn = BinAritOperator(mulAssgn) // *=
278	QuoAssgn = BinAritOperator(quoAssgn) // /=
279	RemAssgn = BinAritOperator(remAssgn) // %=
280	AndAssgn = BinAritOperator(andAssgn) // &=
281	OrAssgn  = BinAritOperator(orAssgn)  // |=
282	XorAssgn = BinAritOperator(xorAssgn) // ^=
283	ShlAssgn = BinAritOperator(shlAssgn) // <<=
284	ShrAssgn = BinAritOperator(shrAssgn) // >>=
285)
286
287type UnTestOperator token
288
289const (
290	TsExists  = UnTestOperator(tsExists) + iota // -e
291	TsRegFile                                   // -f
292	TsDirect                                    // -d
293	TsCharSp                                    // -c
294	TsBlckSp                                    // -b
295	TsNmPipe                                    // -p
296	TsSocket                                    // -S
297	TsSmbLink                                   // -L
298	TsSticky                                    // -k
299	TsGIDSet                                    // -g
300	TsUIDSet                                    // -u
301	TsGrpOwn                                    // -G
302	TsUsrOwn                                    // -O
303	TsModif                                     // -N
304	TsRead                                      // -r
305	TsWrite                                     // -w
306	TsExec                                      // -x
307	TsNoEmpty                                   // -s
308	TsFdTerm                                    // -t
309	TsEmpStr                                    // -z
310	TsNempStr                                   // -n
311	TsOptSet                                    // -o
312	TsVarSet                                    // -v
313	TsRefVar                                    // -R
314	TsNot     = UnTestOperator(exclMark)        // !
315	TsParen   = UnTestOperator(leftParen)       // (
316)
317
318type BinTestOperator token
319
320const (
321	TsReMatch    = BinTestOperator(tsReMatch) + iota // =~
322	TsNewer                                          // -nt
323	TsOlder                                          // -ot
324	TsDevIno                                         // -ef
325	TsEql                                            // -eq
326	TsNeq                                            // -ne
327	TsLeq                                            // -le
328	TsGeq                                            // -ge
329	TsLss                                            // -lt
330	TsGtr                                            // -gt
331	AndTest      = BinTestOperator(andAnd)           // &&
332	OrTest       = BinTestOperator(orOr)             // ||
333	TsMatchShort = BinTestOperator(assgn)            // =
334	TsMatch      = BinTestOperator(equal)            // ==
335	TsNoMatch    = BinTestOperator(nequal)           // !=
336	TsBefore     = BinTestOperator(rdrIn)            // <
337	TsAfter      = BinTestOperator(rdrOut)           // >
338)
339
340func (o RedirOperator) String() string    { return token(o).String() }
341func (o ProcOperator) String() string     { return token(o).String() }
342func (o GlobOperator) String() string     { return token(o).String() }
343func (o BinCmdOperator) String() string   { return token(o).String() }
344func (o CaseOperator) String() string     { return token(o).String() }
345func (o ParNamesOperator) String() string { return token(o).String() }
346func (o ParExpOperator) String() string   { return token(o).String() }
347func (o UnAritOperator) String() string   { return token(o).String() }
348func (o BinAritOperator) String() string  { return token(o).String() }
349func (o UnTestOperator) String() string   { return token(o).String() }
350func (o BinTestOperator) String() string  { return token(o).String() }