1// Code generated by goyacc -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y. DO NOT EDIT.
2
3//line promql/parser/generated_parser.y:15
4package parser
5
6import __yyfmt__ "fmt"
7
8//line promql/parser/generated_parser.y:15
9
10import (
11	"math"
12	"sort"
13	"strconv"
14	"time"
15
16	"github.com/prometheus/prometheus/pkg/labels"
17	"github.com/prometheus/prometheus/pkg/value"
18)
19
20//line promql/parser/generated_parser.y:28
21type yySymType struct {
22	yys      int
23	node     Node
24	item     Item
25	matchers []*labels.Matcher
26	matcher  *labels.Matcher
27	label    labels.Label
28	labels   labels.Labels
29	strings  []string
30	series   []SequenceValue
31	uint     uint64
32	float    float64
33	duration time.Duration
34}
35
36const EQL = 57346
37const BLANK = 57347
38const COLON = 57348
39const COMMA = 57349
40const COMMENT = 57350
41const DURATION = 57351
42const EOF = 57352
43const ERROR = 57353
44const IDENTIFIER = 57354
45const LEFT_BRACE = 57355
46const LEFT_BRACKET = 57356
47const LEFT_PAREN = 57357
48const METRIC_IDENTIFIER = 57358
49const NUMBER = 57359
50const RIGHT_BRACE = 57360
51const RIGHT_BRACKET = 57361
52const RIGHT_PAREN = 57362
53const SEMICOLON = 57363
54const SPACE = 57364
55const STRING = 57365
56const TIMES = 57366
57const operatorsStart = 57367
58const ADD = 57368
59const DIV = 57369
60const EQLC = 57370
61const EQL_REGEX = 57371
62const GTE = 57372
63const GTR = 57373
64const LAND = 57374
65const LOR = 57375
66const LSS = 57376
67const LTE = 57377
68const LUNLESS = 57378
69const MOD = 57379
70const MUL = 57380
71const NEQ = 57381
72const NEQ_REGEX = 57382
73const POW = 57383
74const SUB = 57384
75const AT = 57385
76const ATAN2 = 57386
77const operatorsEnd = 57387
78const aggregatorsStart = 57388
79const AVG = 57389
80const BOTTOMK = 57390
81const COUNT = 57391
82const COUNT_VALUES = 57392
83const GROUP = 57393
84const MAX = 57394
85const MIN = 57395
86const QUANTILE = 57396
87const STDDEV = 57397
88const STDVAR = 57398
89const SUM = 57399
90const TOPK = 57400
91const aggregatorsEnd = 57401
92const keywordsStart = 57402
93const BOOL = 57403
94const BY = 57404
95const GROUP_LEFT = 57405
96const GROUP_RIGHT = 57406
97const IGNORING = 57407
98const OFFSET = 57408
99const ON = 57409
100const WITHOUT = 57410
101const keywordsEnd = 57411
102const preprocessorStart = 57412
103const START = 57413
104const END = 57414
105const preprocessorEnd = 57415
106const startSymbolsStart = 57416
107const START_METRIC = 57417
108const START_SERIES_DESCRIPTION = 57418
109const START_EXPRESSION = 57419
110const START_METRIC_SELECTOR = 57420
111const startSymbolsEnd = 57421
112
113var yyToknames = [...]string{
114	"$end",
115	"error",
116	"$unk",
117	"EQL",
118	"BLANK",
119	"COLON",
120	"COMMA",
121	"COMMENT",
122	"DURATION",
123	"EOF",
124	"ERROR",
125	"IDENTIFIER",
126	"LEFT_BRACE",
127	"LEFT_BRACKET",
128	"LEFT_PAREN",
129	"METRIC_IDENTIFIER",
130	"NUMBER",
131	"RIGHT_BRACE",
132	"RIGHT_BRACKET",
133	"RIGHT_PAREN",
134	"SEMICOLON",
135	"SPACE",
136	"STRING",
137	"TIMES",
138	"operatorsStart",
139	"ADD",
140	"DIV",
141	"EQLC",
142	"EQL_REGEX",
143	"GTE",
144	"GTR",
145	"LAND",
146	"LOR",
147	"LSS",
148	"LTE",
149	"LUNLESS",
150	"MOD",
151	"MUL",
152	"NEQ",
153	"NEQ_REGEX",
154	"POW",
155	"SUB",
156	"AT",
157	"ATAN2",
158	"operatorsEnd",
159	"aggregatorsStart",
160	"AVG",
161	"BOTTOMK",
162	"COUNT",
163	"COUNT_VALUES",
164	"GROUP",
165	"MAX",
166	"MIN",
167	"QUANTILE",
168	"STDDEV",
169	"STDVAR",
170	"SUM",
171	"TOPK",
172	"aggregatorsEnd",
173	"keywordsStart",
174	"BOOL",
175	"BY",
176	"GROUP_LEFT",
177	"GROUP_RIGHT",
178	"IGNORING",
179	"OFFSET",
180	"ON",
181	"WITHOUT",
182	"keywordsEnd",
183	"preprocessorStart",
184	"START",
185	"END",
186	"preprocessorEnd",
187	"startSymbolsStart",
188	"START_METRIC",
189	"START_SERIES_DESCRIPTION",
190	"START_EXPRESSION",
191	"START_METRIC_SELECTOR",
192	"startSymbolsEnd",
193}
194
195var yyStatenames = [...]string{}
196
197const yyEofCode = 1
198const yyErrCode = 2
199const yyInitialStackSize = 16
200
201//line promql/parser/generated_parser.y:749
202
203//line yacctab:1
204var yyExca = [...]int{
205	-1, 1,
206	1, -1,
207	-2, 0,
208	-1, 35,
209	1, 131,
210	10, 131,
211	22, 131,
212	-2, 0,
213	-1, 58,
214	2, 143,
215	15, 143,
216	62, 143,
217	68, 143,
218	-2, 97,
219	-1, 59,
220	2, 144,
221	15, 144,
222	62, 144,
223	68, 144,
224	-2, 98,
225	-1, 60,
226	2, 145,
227	15, 145,
228	62, 145,
229	68, 145,
230	-2, 100,
231	-1, 61,
232	2, 146,
233	15, 146,
234	62, 146,
235	68, 146,
236	-2, 101,
237	-1, 62,
238	2, 147,
239	15, 147,
240	62, 147,
241	68, 147,
242	-2, 102,
243	-1, 63,
244	2, 148,
245	15, 148,
246	62, 148,
247	68, 148,
248	-2, 107,
249	-1, 64,
250	2, 149,
251	15, 149,
252	62, 149,
253	68, 149,
254	-2, 109,
255	-1, 65,
256	2, 150,
257	15, 150,
258	62, 150,
259	68, 150,
260	-2, 111,
261	-1, 66,
262	2, 151,
263	15, 151,
264	62, 151,
265	68, 151,
266	-2, 112,
267	-1, 67,
268	2, 152,
269	15, 152,
270	62, 152,
271	68, 152,
272	-2, 113,
273	-1, 68,
274	2, 153,
275	15, 153,
276	62, 153,
277	68, 153,
278	-2, 114,
279	-1, 69,
280	2, 154,
281	15, 154,
282	62, 154,
283	68, 154,
284	-2, 115,
285	-1, 190,
286	12, 199,
287	13, 199,
288	16, 199,
289	17, 199,
290	23, 199,
291	26, 199,
292	32, 199,
293	33, 199,
294	36, 199,
295	42, 199,
296	47, 199,
297	48, 199,
298	49, 199,
299	50, 199,
300	51, 199,
301	52, 199,
302	53, 199,
303	54, 199,
304	55, 199,
305	56, 199,
306	57, 199,
307	58, 199,
308	62, 199,
309	66, 199,
310	68, 199,
311	71, 199,
312	72, 199,
313	-2, 0,
314	-1, 191,
315	12, 199,
316	13, 199,
317	16, 199,
318	17, 199,
319	23, 199,
320	26, 199,
321	32, 199,
322	33, 199,
323	36, 199,
324	42, 199,
325	47, 199,
326	48, 199,
327	49, 199,
328	50, 199,
329	51, 199,
330	52, 199,
331	53, 199,
332	54, 199,
333	55, 199,
334	56, 199,
335	57, 199,
336	58, 199,
337	62, 199,
338	66, 199,
339	68, 199,
340	71, 199,
341	72, 199,
342	-2, 0,
343	-1, 212,
344	19, 197,
345	-2, 0,
346	-1, 262,
347	19, 198,
348	-2, 0,
349}
350
351const yyPrivate = 57344
352
353const yyLast = 659
354
355var yyAct = [...]int{
356	268, 37, 216, 142, 258, 257, 150, 113, 77, 102,
357	101, 104, 188, 271, 189, 190, 191, 105, 6, 126,
358	218, 57, 253, 149, 154, 252, 251, 266, 180, 121,
359	228, 260, 265, 272, 234, 103, 269, 144, 274, 247,
360	155, 72, 213, 162, 145, 264, 212, 250, 106, 179,
361	230, 231, 246, 153, 232, 108, 161, 109, 208, 211,
362	106, 107, 245, 33, 122, 219, 221, 223, 224, 225,
363	233, 235, 238, 239, 240, 241, 242, 143, 110, 220,
364	222, 226, 227, 229, 236, 237, 115, 79, 7, 243,
365	244, 2, 3, 4, 5, 104, 114, 78, 145, 263,
366	170, 105, 248, 177, 156, 169, 145, 118, 166, 160,
367	163, 158, 117, 159, 157, 10, 168, 100, 120, 273,
368	119, 145, 81, 116, 187, 74, 178, 34, 186, 192,
369	193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
370	203, 204, 205, 206, 96, 185, 99, 207, 127, 128,
371	129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
372	139, 140, 141, 182, 56, 1, 115, 9, 9, 98,
373	184, 148, 172, 218, 173, 153, 114, 249, 209, 210,
374	261, 8, 112, 228, 154, 35, 153, 234, 47, 46,
375	254, 215, 79, 255, 256, 154, 45, 259, 44, 175,
376	155, 125, 78, 230, 231, 43, 48, 232, 76, 174,
377	176, 155, 73, 42, 41, 245, 262, 123, 219, 221,
378	223, 224, 225, 233, 235, 238, 239, 240, 241, 242,
379	164, 40, 220, 222, 226, 227, 229, 236, 237, 124,
380	151, 152, 243, 244, 39, 38, 49, 146, 183, 267,
381	80, 181, 214, 75, 270, 51, 72, 147, 53, 22,
382	52, 55, 217, 165, 171, 50, 54, 111, 275, 70,
383	0, 0, 276, 0, 0, 18, 19, 0, 0, 20,
384	0, 0, 0, 0, 0, 71, 0, 0, 0, 0,
385	58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
386	68, 69, 0, 0, 0, 13, 0, 0, 0, 24,
387	0, 30, 0, 0, 31, 32, 36, 100, 51, 72,
388	0, 53, 22, 52, 0, 0, 0, 0, 0, 54,
389	84, 0, 70, 0, 0, 0, 0, 0, 18, 19,
390	93, 94, 20, 0, 96, 0, 99, 83, 71, 0,
391	0, 0, 0, 58, 59, 60, 61, 62, 63, 64,
392	65, 66, 67, 68, 69, 0, 0, 0, 13, 98,
393	0, 0, 24, 0, 30, 0, 0, 31, 32, 51,
394	72, 0, 53, 22, 52, 0, 0, 0, 0, 0,
395	54, 0, 0, 70, 0, 0, 0, 0, 0, 18,
396	19, 0, 0, 20, 0, 0, 17, 72, 0, 71,
397	22, 0, 0, 0, 58, 59, 60, 61, 62, 63,
398	64, 65, 66, 67, 68, 69, 18, 19, 0, 13,
399	20, 0, 0, 24, 0, 30, 0, 0, 31, 32,
400	0, 11, 12, 14, 15, 16, 21, 23, 25, 26,
401	27, 28, 29, 17, 33, 0, 13, 22, 0, 0,
402	24, 0, 30, 0, 0, 31, 32, 0, 0, 0,
403	0, 0, 0, 18, 19, 0, 0, 20, 0, 0,
404	0, 0, 0, 0, 0, 0, 0, 0, 11, 12,
405	14, 15, 16, 21, 23, 25, 26, 27, 28, 29,
406	0, 0, 100, 13, 0, 0, 0, 24, 167, 30,
407	0, 0, 31, 32, 82, 84, 85, 0, 86, 87,
408	88, 89, 90, 91, 92, 93, 94, 95, 100, 96,
409	97, 99, 83, 0, 0, 0, 0, 0, 0, 0,
410	82, 84, 85, 0, 86, 87, 88, 89, 90, 91,
411	92, 93, 94, 95, 98, 96, 97, 99, 83, 0,
412	0, 100, 0, 0, 0, 0, 0, 0, 0, 0,
413	0, 0, 0, 82, 84, 85, 0, 86, 87, 88,
414	98, 90, 91, 92, 93, 94, 95, 100, 96, 97,
415	99, 83, 0, 0, 0, 0, 0, 0, 0, 82,
416	84, 85, 0, 86, 87, 0, 100, 90, 91, 0,
417	93, 94, 95, 98, 96, 97, 99, 83, 82, 84,
418	0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
419	94, 0, 0, 96, 97, 99, 83, 0, 0, 98,
420	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
421	0, 0, 0, 0, 0, 0, 0, 0, 98,
422}
423
424var yyPact = [...]int{
425	16, 78, 441, 441, 306, 394, -1000, -1000, -1000, 50,
426	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
427	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
428	-1000, -1000, -1000, 190, -1000, 120, -1000, 514, -1000, -1000,
429	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
430	33, 45, -1000, 367, -1000, 367, 28, -1000, -1000, -1000,
431	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
432	-1000, -1000, 164, -1000, -1000, 105, -1000, -1000, 116, -1000,
433	7, -1000, -42, -42, -42, -42, -42, -42, -42, -42,
434	-42, -42, -42, -42, -42, -42, -42, -42, 35, 169,
435	112, 45, -51, -1000, 41, 41, 243, -1000, 488, 103,
436	-1000, 98, -1000, -1000, 170, -1000, -1000, 85, -1000, 26,
437	-1000, 158, 367, -1000, -53, -48, -1000, 367, 367, 367,
438	367, 367, 367, 367, 367, 367, 367, 367, 367, 367,
439	367, 367, -1000, 89, -1000, -1000, -1000, 43, -1000, -1000,
440	-1000, -1000, -1000, -1000, 36, 36, 40, -1000, -1000, -1000,
441	-1000, 171, -1000, -1000, 32, -1000, 514, -1000, -1000, 84,
442	-1000, 24, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
443	-1000, -1000, 1, -2, -1000, -1000, -1000, 303, 41, 41,
444	41, 41, 103, 103, 592, 592, 592, 573, 547, 592,
445	592, 573, 103, 103, 592, 103, 303, -1000, 11, -1000,
446	-1000, -1000, 97, -1000, 25, -1000, -1000, -1000, -1000, -1000,
447	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
448	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
449	-1000, -1000, -1000, -1000, -1000, -1000, -1000, 367, -1000, -1000,
450	-1000, -1000, 19, 19, -11, -1000, -1000, -1000, -1000, -1000,
451	-1000, 14, 117, -1000, -1000, 18, -1000, 514, -1000, -1000,
452	-1000, 19, -1000, -1000, -1000, -1000, -1000,
453}
454
455var yyPgo = [...]int{
456	0, 267, 7, 265, 2, 264, 262, 164, 261, 257,
457	115, 253, 181, 8, 252, 4, 5, 251, 250, 0,
458	23, 248, 6, 247, 246, 245, 10, 64, 244, 239,
459	1, 231, 230, 9, 217, 21, 214, 213, 205, 201,
460	198, 196, 189, 188, 206, 3, 180, 165, 127,
461}
462
463var yyR1 = [...]int{
464	0, 47, 47, 47, 47, 47, 47, 47, 30, 30,
465	30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
466	25, 25, 25, 25, 26, 26, 28, 28, 28, 28,
467	28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
468	28, 28, 27, 29, 29, 39, 39, 34, 34, 34,
469	34, 15, 15, 15, 15, 14, 14, 14, 4, 4,
470	31, 33, 33, 32, 32, 32, 40, 38, 38, 38,
471	24, 24, 24, 9, 9, 36, 42, 42, 42, 42,
472	42, 43, 44, 44, 44, 35, 35, 35, 1, 1,
473	1, 2, 2, 2, 2, 12, 12, 7, 7, 7,
474	7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
475	7, 7, 7, 7, 7, 7, 7, 7, 7, 10,
476	10, 10, 10, 11, 11, 11, 13, 13, 13, 13,
477	48, 18, 18, 18, 18, 17, 17, 17, 17, 17,
478	21, 21, 21, 3, 3, 3, 3, 3, 3, 3,
479	3, 3, 3, 3, 3, 6, 6, 6, 6, 6,
480	6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
481	6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
482	6, 6, 8, 8, 5, 5, 5, 5, 37, 20,
483	22, 22, 23, 23, 19, 45, 41, 46, 46, 16,
484	16,
485}
486
487var yyR2 = [...]int{
488	0, 2, 2, 2, 2, 2, 2, 1, 1, 1,
489	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
490	3, 3, 2, 2, 2, 2, 4, 4, 4, 4,
491	4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
492	4, 4, 1, 0, 1, 3, 3, 1, 1, 3,
493	3, 3, 4, 2, 1, 3, 1, 2, 1, 1,
494	2, 3, 2, 3, 1, 2, 3, 3, 4, 3,
495	3, 5, 3, 1, 1, 4, 6, 6, 5, 4,
496	3, 2, 2, 1, 1, 3, 4, 2, 3, 1,
497	2, 3, 3, 2, 1, 2, 1, 1, 1, 1,
498	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
499	1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
500	4, 2, 0, 3, 1, 2, 3, 3, 2, 1,
501	2, 0, 3, 2, 1, 1, 3, 1, 3, 4,
502	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
503	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
504	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
505	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
506	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
507	2, 2, 1, 1, 1, 1, 1, 0, 1, 0,
508	1,
509}
510
511var yyChk = [...]int{
512	-1000, -47, 75, 76, 77, 78, 2, 10, -12, -7,
513	-10, 47, 48, 62, 49, 50, 51, 12, 32, 33,
514	36, 52, 16, 53, 66, 54, 55, 56, 57, 58,
515	68, 71, 72, 13, -48, -12, 10, -30, -25, -28,
516	-31, -36, -37, -38, -40, -41, -42, -43, -44, -24,
517	-3, 12, 17, 15, 23, -8, -7, -35, 47, 48,
518	49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
519	26, 42, 13, -44, -10, -11, 18, -13, 12, 2,
520	-18, 2, 26, 44, 27, 28, 30, 31, 32, 33,
521	34, 35, 36, 37, 38, 39, 41, 42, 66, 43,
522	14, -26, -33, 2, 62, 68, 15, -33, -30, -30,
523	-35, -1, 18, -2, 12, 2, 18, 7, 2, 4,
524	2, 22, -27, -34, -29, -39, 61, -27, -27, -27,
525	-27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
526	-27, -27, -45, 42, 2, 9, -23, -9, 2, -20,
527	-22, 71, 72, 17, 26, 42, -45, 2, -33, -26,
528	-15, 15, 2, -15, -32, 20, -30, 20, 18, 7,
529	2, -5, 2, 4, 39, 29, 40, 18, -13, 23,
530	2, -17, 5, -21, 12, -20, -22, -30, 65, 67,
531	63, 64, -30, -30, -30, -30, -30, -30, -30, -30,
532	-30, -30, -30, -30, -30, -30, -30, -45, 15, -20,
533	-20, 19, 6, 2, -14, 20, -4, -6, 2, 47,
534	61, 48, 62, 49, 50, 51, 63, 64, 12, 65,
535	32, 33, 36, 52, 16, 53, 66, 67, 54, 55,
536	56, 57, 58, 71, 72, 44, 20, 7, 18, -2,
537	23, 2, 24, 24, -22, -15, -15, -16, -15, -16,
538	20, -46, -45, 2, 20, 7, 2, -30, -19, 17,
539	-19, 24, 19, 2, 20, -4, -19,
540}
541
542var yyDef = [...]int{
543	0, -2, 122, 122, 0, 0, 7, 6, 1, 122,
544	96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
545	106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
546	116, 117, 118, 0, 2, -2, 3, 4, 8, 9,
547	10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
548	0, 103, 188, 0, 196, 0, 83, 84, -2, -2,
549	-2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
550	182, 183, 0, 5, 95, 0, 121, 124, 0, 129,
551	130, 134, 43, 43, 43, 43, 43, 43, 43, 43,
552	43, 43, 43, 43, 43, 43, 43, 43, 0, 0,
553	0, 0, 22, 23, 0, 0, 0, 60, 0, 81,
554	82, 0, 87, 89, 0, 94, 119, 0, 125, 0,
555	128, 133, 0, 42, 47, 48, 44, 0, 0, 0,
556	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
557	0, 0, 67, 0, 69, 195, 70, 0, 72, 192,
558	193, 73, 74, 189, 0, 0, 0, 80, 20, 21,
559	24, 0, 54, 25, 0, 62, 64, 66, 85, 0,
560	90, 0, 93, 184, 185, 186, 187, 120, 123, 126,
561	127, 132, 135, 137, 140, 141, 142, 26, 0, 0,
562	-2, -2, 27, 28, 29, 30, 31, 32, 33, 34,
563	35, 36, 37, 38, 39, 40, 41, 68, 0, 190,
564	191, 75, -2, 79, 0, 53, 56, 58, 59, 155,
565	156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
566	166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
567	176, 177, 178, 179, 180, 181, 61, 65, 86, 88,
568	91, 92, 0, 0, 0, 45, 46, 49, 200, 50,
569	71, 0, -2, 78, 51, 0, 57, 63, 136, 194,
570	138, 0, 76, 77, 52, 55, 139,
571}
572
573var yyTok1 = [...]int{
574	1,
575}
576
577var yyTok2 = [...]int{
578	2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
579	12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
580	22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
581	32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
582	42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
583	52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
584	62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
585	72, 73, 74, 75, 76, 77, 78, 79,
586}
587
588var yyTok3 = [...]int{
589	0,
590}
591
592var yyErrorMessages = [...]struct {
593	state int
594	token int
595	msg   string
596}{}
597
598//line yaccpar:1
599
600/*	parser for yacc output	*/
601
602var (
603	yyDebug        = 0
604	yyErrorVerbose = false
605)
606
607type yyLexer interface {
608	Lex(lval *yySymType) int
609	Error(s string)
610}
611
612type yyParser interface {
613	Parse(yyLexer) int
614	Lookahead() int
615}
616
617type yyParserImpl struct {
618	lval  yySymType
619	stack [yyInitialStackSize]yySymType
620	char  int
621}
622
623func (p *yyParserImpl) Lookahead() int {
624	return p.char
625}
626
627func yyNewParser() yyParser {
628	return &yyParserImpl{}
629}
630
631const yyFlag = -1000
632
633func yyTokname(c int) string {
634	if c >= 1 && c-1 < len(yyToknames) {
635		if yyToknames[c-1] != "" {
636			return yyToknames[c-1]
637		}
638	}
639	return __yyfmt__.Sprintf("tok-%v", c)
640}
641
642func yyStatname(s int) string {
643	if s >= 0 && s < len(yyStatenames) {
644		if yyStatenames[s] != "" {
645			return yyStatenames[s]
646		}
647	}
648	return __yyfmt__.Sprintf("state-%v", s)
649}
650
651func yyErrorMessage(state, lookAhead int) string {
652	const TOKSTART = 4
653
654	if !yyErrorVerbose {
655		return "syntax error"
656	}
657
658	for _, e := range yyErrorMessages {
659		if e.state == state && e.token == lookAhead {
660			return "syntax error: " + e.msg
661		}
662	}
663
664	res := "syntax error: unexpected " + yyTokname(lookAhead)
665
666	// To match Bison, suggest at most four expected tokens.
667	expected := make([]int, 0, 4)
668
669	// Look for shiftable tokens.
670	base := yyPact[state]
671	for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
672		if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
673			if len(expected) == cap(expected) {
674				return res
675			}
676			expected = append(expected, tok)
677		}
678	}
679
680	if yyDef[state] == -2 {
681		i := 0
682		for yyExca[i] != -1 || yyExca[i+1] != state {
683			i += 2
684		}
685
686		// Look for tokens that we accept or reduce.
687		for i += 2; yyExca[i] >= 0; i += 2 {
688			tok := yyExca[i]
689			if tok < TOKSTART || yyExca[i+1] == 0 {
690				continue
691			}
692			if len(expected) == cap(expected) {
693				return res
694			}
695			expected = append(expected, tok)
696		}
697
698		// If the default action is to accept or reduce, give up.
699		if yyExca[i+1] != 0 {
700			return res
701		}
702	}
703
704	for i, tok := range expected {
705		if i == 0 {
706			res += ", expecting "
707		} else {
708			res += " or "
709		}
710		res += yyTokname(tok)
711	}
712	return res
713}
714
715func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
716	token = 0
717	char = lex.Lex(lval)
718	if char <= 0 {
719		token = yyTok1[0]
720		goto out
721	}
722	if char < len(yyTok1) {
723		token = yyTok1[char]
724		goto out
725	}
726	if char >= yyPrivate {
727		if char < yyPrivate+len(yyTok2) {
728			token = yyTok2[char-yyPrivate]
729			goto out
730		}
731	}
732	for i := 0; i < len(yyTok3); i += 2 {
733		token = yyTok3[i+0]
734		if token == char {
735			token = yyTok3[i+1]
736			goto out
737		}
738	}
739
740out:
741	if token == 0 {
742		token = yyTok2[1] /* unknown char */
743	}
744	if yyDebug >= 3 {
745		__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
746	}
747	return char, token
748}
749
750func yyParse(yylex yyLexer) int {
751	return yyNewParser().Parse(yylex)
752}
753
754func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
755	var yyn int
756	var yyVAL yySymType
757	var yyDollar []yySymType
758	_ = yyDollar // silence set and not used
759	yyS := yyrcvr.stack[:]
760
761	Nerrs := 0   /* number of errors */
762	Errflag := 0 /* error recovery flag */
763	yystate := 0
764	yyrcvr.char = -1
765	yytoken := -1 // yyrcvr.char translated into internal numbering
766	defer func() {
767		// Make sure we report no lookahead when not parsing.
768		yystate = -1
769		yyrcvr.char = -1
770		yytoken = -1
771	}()
772	yyp := -1
773	goto yystack
774
775ret0:
776	return 0
777
778ret1:
779	return 1
780
781yystack:
782	/* put a state and value onto the stack */
783	if yyDebug >= 4 {
784		__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
785	}
786
787	yyp++
788	if yyp >= len(yyS) {
789		nyys := make([]yySymType, len(yyS)*2)
790		copy(nyys, yyS)
791		yyS = nyys
792	}
793	yyS[yyp] = yyVAL
794	yyS[yyp].yys = yystate
795
796yynewstate:
797	yyn = yyPact[yystate]
798	if yyn <= yyFlag {
799		goto yydefault /* simple state */
800	}
801	if yyrcvr.char < 0 {
802		yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
803	}
804	yyn += yytoken
805	if yyn < 0 || yyn >= yyLast {
806		goto yydefault
807	}
808	yyn = yyAct[yyn]
809	if yyChk[yyn] == yytoken { /* valid shift */
810		yyrcvr.char = -1
811		yytoken = -1
812		yyVAL = yyrcvr.lval
813		yystate = yyn
814		if Errflag > 0 {
815			Errflag--
816		}
817		goto yystack
818	}
819
820yydefault:
821	/* default state action */
822	yyn = yyDef[yystate]
823	if yyn == -2 {
824		if yyrcvr.char < 0 {
825			yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
826		}
827
828		/* look through exception table */
829		xi := 0
830		for {
831			if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
832				break
833			}
834			xi += 2
835		}
836		for xi += 2; ; xi += 2 {
837			yyn = yyExca[xi+0]
838			if yyn < 0 || yyn == yytoken {
839				break
840			}
841		}
842		yyn = yyExca[xi+1]
843		if yyn < 0 {
844			goto ret0
845		}
846	}
847	if yyn == 0 {
848		/* error ... attempt to resume parsing */
849		switch Errflag {
850		case 0: /* brand new error */
851			yylex.Error(yyErrorMessage(yystate, yytoken))
852			Nerrs++
853			if yyDebug >= 1 {
854				__yyfmt__.Printf("%s", yyStatname(yystate))
855				__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
856			}
857			fallthrough
858
859		case 1, 2: /* incompletely recovered error ... try again */
860			Errflag = 3
861
862			/* find a state where "error" is a legal shift action */
863			for yyp >= 0 {
864				yyn = yyPact[yyS[yyp].yys] + yyErrCode
865				if yyn >= 0 && yyn < yyLast {
866					yystate = yyAct[yyn] /* simulate a shift of "error" */
867					if yyChk[yystate] == yyErrCode {
868						goto yystack
869					}
870				}
871
872				/* the current p has no shift on "error", pop stack */
873				if yyDebug >= 2 {
874					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
875				}
876				yyp--
877			}
878			/* there is no state on the stack with an error shift ... abort */
879			goto ret1
880
881		case 3: /* no shift yet; clobber input char */
882			if yyDebug >= 2 {
883				__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
884			}
885			if yytoken == yyEofCode {
886				goto ret1
887			}
888			yyrcvr.char = -1
889			yytoken = -1
890			goto yynewstate /* try again in the same state */
891		}
892	}
893
894	/* reduction by production yyn */
895	if yyDebug >= 2 {
896		__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
897	}
898
899	yynt := yyn
900	yypt := yyp
901	_ = yypt // guard against "declared and not used"
902
903	yyp -= yyR2[yyn]
904	// yyp is now the index of $0. Perform the default action. Iff the
905	// reduced production is ε, $1 is possibly out of range.
906	if yyp+1 >= len(yyS) {
907		nyys := make([]yySymType, len(yyS)*2)
908		copy(nyys, yyS)
909		yyS = nyys
910	}
911	yyVAL = yyS[yyp+1]
912
913	/* consult goto table to find next state */
914	yyn = yyR1[yyn]
915	yyg := yyPgo[yyn]
916	yyj := yyg + yyS[yyp].yys + 1
917
918	if yyj >= yyLast {
919		yystate = yyAct[yyg]
920	} else {
921		yystate = yyAct[yyj]
922		if yyChk[yystate] != -yyn {
923			yystate = yyAct[yyg]
924		}
925	}
926	// dummy call; replaced with literal code
927	switch yynt {
928
929	case 1:
930		yyDollar = yyS[yypt-2 : yypt+1]
931//line promql/parser/generated_parser.y:174
932		{
933			yylex.(*parser).generatedParserResult = yyDollar[2].labels
934		}
935	case 3:
936		yyDollar = yyS[yypt-2 : yypt+1]
937//line promql/parser/generated_parser.y:177
938		{
939			yylex.(*parser).addParseErrf(PositionRange{}, "no expression found in input")
940		}
941	case 4:
942		yyDollar = yyS[yypt-2 : yypt+1]
943//line promql/parser/generated_parser.y:179
944		{
945			yylex.(*parser).generatedParserResult = yyDollar[2].node
946		}
947	case 5:
948		yyDollar = yyS[yypt-2 : yypt+1]
949//line promql/parser/generated_parser.y:181
950		{
951			yylex.(*parser).generatedParserResult = yyDollar[2].node
952		}
953	case 7:
954		yyDollar = yyS[yypt-1 : yypt+1]
955//line promql/parser/generated_parser.y:184
956		{
957			yylex.(*parser).unexpected("", "")
958		}
959	case 20:
960		yyDollar = yyS[yypt-3 : yypt+1]
961//line promql/parser/generated_parser.y:207
962		{
963			yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[2].node, yyDollar[3].node)
964		}
965	case 21:
966		yyDollar = yyS[yypt-3 : yypt+1]
967//line promql/parser/generated_parser.y:209
968		{
969			yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[3].node, yyDollar[2].node)
970		}
971	case 22:
972		yyDollar = yyS[yypt-2 : yypt+1]
973//line promql/parser/generated_parser.y:211
974		{
975			yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, yyDollar[2].node)
976		}
977	case 23:
978		yyDollar = yyS[yypt-2 : yypt+1]
979//line promql/parser/generated_parser.y:213
980		{
981			yylex.(*parser).unexpected("aggregation", "")
982			yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, Expressions{})
983		}
984	case 24:
985		yyDollar = yyS[yypt-2 : yypt+1]
986//line promql/parser/generated_parser.y:221
987		{
988			yyVAL.node = &AggregateExpr{
989				Grouping: yyDollar[2].strings,
990			}
991		}
992	case 25:
993		yyDollar = yyS[yypt-2 : yypt+1]
994//line promql/parser/generated_parser.y:227
995		{
996			yyVAL.node = &AggregateExpr{
997				Grouping: yyDollar[2].strings,
998				Without:  true,
999			}
1000		}
1001	case 26:
1002		yyDollar = yyS[yypt-4 : yypt+1]
1003//line promql/parser/generated_parser.y:240
1004		{
1005			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1006		}
1007	case 27:
1008		yyDollar = yyS[yypt-4 : yypt+1]
1009//line promql/parser/generated_parser.y:241
1010		{
1011			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1012		}
1013	case 28:
1014		yyDollar = yyS[yypt-4 : yypt+1]
1015//line promql/parser/generated_parser.y:242
1016		{
1017			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1018		}
1019	case 29:
1020		yyDollar = yyS[yypt-4 : yypt+1]
1021//line promql/parser/generated_parser.y:243
1022		{
1023			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1024		}
1025	case 30:
1026		yyDollar = yyS[yypt-4 : yypt+1]
1027//line promql/parser/generated_parser.y:244
1028		{
1029			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1030		}
1031	case 31:
1032		yyDollar = yyS[yypt-4 : yypt+1]
1033//line promql/parser/generated_parser.y:245
1034		{
1035			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1036		}
1037	case 32:
1038		yyDollar = yyS[yypt-4 : yypt+1]
1039//line promql/parser/generated_parser.y:246
1040		{
1041			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1042		}
1043	case 33:
1044		yyDollar = yyS[yypt-4 : yypt+1]
1045//line promql/parser/generated_parser.y:247
1046		{
1047			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1048		}
1049	case 34:
1050		yyDollar = yyS[yypt-4 : yypt+1]
1051//line promql/parser/generated_parser.y:248
1052		{
1053			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1054		}
1055	case 35:
1056		yyDollar = yyS[yypt-4 : yypt+1]
1057//line promql/parser/generated_parser.y:249
1058		{
1059			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1060		}
1061	case 36:
1062		yyDollar = yyS[yypt-4 : yypt+1]
1063//line promql/parser/generated_parser.y:250
1064		{
1065			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1066		}
1067	case 37:
1068		yyDollar = yyS[yypt-4 : yypt+1]
1069//line promql/parser/generated_parser.y:251
1070		{
1071			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1072		}
1073	case 38:
1074		yyDollar = yyS[yypt-4 : yypt+1]
1075//line promql/parser/generated_parser.y:252
1076		{
1077			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1078		}
1079	case 39:
1080		yyDollar = yyS[yypt-4 : yypt+1]
1081//line promql/parser/generated_parser.y:253
1082		{
1083			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1084		}
1085	case 40:
1086		yyDollar = yyS[yypt-4 : yypt+1]
1087//line promql/parser/generated_parser.y:254
1088		{
1089			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1090		}
1091	case 41:
1092		yyDollar = yyS[yypt-4 : yypt+1]
1093//line promql/parser/generated_parser.y:255
1094		{
1095			yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
1096		}
1097	case 43:
1098		yyDollar = yyS[yypt-0 : yypt+1]
1099//line promql/parser/generated_parser.y:263
1100		{
1101			yyVAL.node = &BinaryExpr{
1102				VectorMatching: &VectorMatching{Card: CardOneToOne},
1103			}
1104		}
1105	case 44:
1106		yyDollar = yyS[yypt-1 : yypt+1]
1107//line promql/parser/generated_parser.y:268
1108		{
1109			yyVAL.node = &BinaryExpr{
1110				VectorMatching: &VectorMatching{Card: CardOneToOne},
1111				ReturnBool:     true,
1112			}
1113		}
1114	case 45:
1115		yyDollar = yyS[yypt-3 : yypt+1]
1116//line promql/parser/generated_parser.y:276
1117		{
1118			yyVAL.node = yyDollar[1].node
1119			yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
1120		}
1121	case 46:
1122		yyDollar = yyS[yypt-3 : yypt+1]
1123//line promql/parser/generated_parser.y:281
1124		{
1125			yyVAL.node = yyDollar[1].node
1126			yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
1127			yyVAL.node.(*BinaryExpr).VectorMatching.On = true
1128		}
1129	case 49:
1130		yyDollar = yyS[yypt-3 : yypt+1]
1131//line promql/parser/generated_parser.y:291
1132		{
1133			yyVAL.node = yyDollar[1].node
1134			yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardManyToOne
1135			yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
1136		}
1137	case 50:
1138		yyDollar = yyS[yypt-3 : yypt+1]
1139//line promql/parser/generated_parser.y:297
1140		{
1141			yyVAL.node = yyDollar[1].node
1142			yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardOneToMany
1143			yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
1144		}
1145	case 51:
1146		yyDollar = yyS[yypt-3 : yypt+1]
1147//line promql/parser/generated_parser.y:306
1148		{
1149			yyVAL.strings = yyDollar[2].strings
1150		}
1151	case 52:
1152		yyDollar = yyS[yypt-4 : yypt+1]
1153//line promql/parser/generated_parser.y:308
1154		{
1155			yyVAL.strings = yyDollar[2].strings
1156		}
1157	case 53:
1158		yyDollar = yyS[yypt-2 : yypt+1]
1159//line promql/parser/generated_parser.y:310
1160		{
1161			yyVAL.strings = []string{}
1162		}
1163	case 54:
1164		yyDollar = yyS[yypt-1 : yypt+1]
1165//line promql/parser/generated_parser.y:312
1166		{
1167			yylex.(*parser).unexpected("grouping opts", "\"(\"")
1168			yyVAL.strings = nil
1169		}
1170	case 55:
1171		yyDollar = yyS[yypt-3 : yypt+1]
1172//line promql/parser/generated_parser.y:318
1173		{
1174			yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val)
1175		}
1176	case 56:
1177		yyDollar = yyS[yypt-1 : yypt+1]
1178//line promql/parser/generated_parser.y:320
1179		{
1180			yyVAL.strings = []string{yyDollar[1].item.Val}
1181		}
1182	case 57:
1183		yyDollar = yyS[yypt-2 : yypt+1]
1184//line promql/parser/generated_parser.y:322
1185		{
1186			yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"")
1187			yyVAL.strings = yyDollar[1].strings
1188		}
1189	case 58:
1190		yyDollar = yyS[yypt-1 : yypt+1]
1191//line promql/parser/generated_parser.y:326
1192		{
1193			if !isLabel(yyDollar[1].item.Val) {
1194				yylex.(*parser).unexpected("grouping opts", "label")
1195			}
1196			yyVAL.item = yyDollar[1].item
1197		}
1198	case 59:
1199		yyDollar = yyS[yypt-1 : yypt+1]
1200//line promql/parser/generated_parser.y:333
1201		{
1202			yylex.(*parser).unexpected("grouping opts", "label")
1203			yyVAL.item = Item{}
1204		}
1205	case 60:
1206		yyDollar = yyS[yypt-2 : yypt+1]
1207//line promql/parser/generated_parser.y:341
1208		{
1209			fn, exist := getFunction(yyDollar[1].item.Val)
1210			if !exist {
1211				yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "unknown function with name %q", yyDollar[1].item.Val)
1212			}
1213			yyVAL.node = &Call{
1214				Func: fn,
1215				Args: yyDollar[2].node.(Expressions),
1216				PosRange: PositionRange{
1217					Start: yyDollar[1].item.Pos,
1218					End:   yylex.(*parser).lastClosing,
1219				},
1220			}
1221		}
1222	case 61:
1223		yyDollar = yyS[yypt-3 : yypt+1]
1224//line promql/parser/generated_parser.y:358
1225		{
1226			yyVAL.node = yyDollar[2].node
1227		}
1228	case 62:
1229		yyDollar = yyS[yypt-2 : yypt+1]
1230//line promql/parser/generated_parser.y:360
1231		{
1232			yyVAL.node = Expressions{}
1233		}
1234	case 63:
1235		yyDollar = yyS[yypt-3 : yypt+1]
1236//line promql/parser/generated_parser.y:364
1237		{
1238			yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
1239		}
1240	case 64:
1241		yyDollar = yyS[yypt-1 : yypt+1]
1242//line promql/parser/generated_parser.y:366
1243		{
1244			yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
1245		}
1246	case 65:
1247		yyDollar = yyS[yypt-2 : yypt+1]
1248//line promql/parser/generated_parser.y:368
1249		{
1250			yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "trailing commas not allowed in function call args")
1251			yyVAL.node = yyDollar[1].node
1252		}
1253	case 66:
1254		yyDollar = yyS[yypt-3 : yypt+1]
1255//line promql/parser/generated_parser.y:379
1256		{
1257			yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)}
1258		}
1259	case 67:
1260		yyDollar = yyS[yypt-3 : yypt+1]
1261//line promql/parser/generated_parser.y:387
1262		{
1263			yylex.(*parser).addOffset(yyDollar[1].node, yyDollar[3].duration)
1264			yyVAL.node = yyDollar[1].node
1265		}
1266	case 68:
1267		yyDollar = yyS[yypt-4 : yypt+1]
1268//line promql/parser/generated_parser.y:392
1269		{
1270			yylex.(*parser).addOffset(yyDollar[1].node, -yyDollar[4].duration)
1271			yyVAL.node = yyDollar[1].node
1272		}
1273	case 69:
1274		yyDollar = yyS[yypt-3 : yypt+1]
1275//line promql/parser/generated_parser.y:397
1276		{
1277			yylex.(*parser).unexpected("offset", "duration")
1278			yyVAL.node = yyDollar[1].node
1279		}
1280	case 70:
1281		yyDollar = yyS[yypt-3 : yypt+1]
1282//line promql/parser/generated_parser.y:404
1283		{
1284			yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
1285			yyVAL.node = yyDollar[1].node
1286		}
1287	case 71:
1288		yyDollar = yyS[yypt-5 : yypt+1]
1289//line promql/parser/generated_parser.y:409
1290		{
1291			yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
1292			yyVAL.node = yyDollar[1].node
1293		}
1294	case 72:
1295		yyDollar = yyS[yypt-3 : yypt+1]
1296//line promql/parser/generated_parser.y:414
1297		{
1298			yylex.(*parser).unexpected("@", "timestamp")
1299			yyVAL.node = yyDollar[1].node
1300		}
1301	case 75:
1302		yyDollar = yyS[yypt-4 : yypt+1]
1303//line promql/parser/generated_parser.y:424
1304		{
1305			var errMsg string
1306			vs, ok := yyDollar[1].node.(*VectorSelector)
1307			if !ok {
1308				errMsg = "ranges only allowed for vector selectors"
1309			} else if vs.OriginalOffset != 0 {
1310				errMsg = "no offset modifiers allowed before range"
1311			} else if vs.Timestamp != nil {
1312				errMsg = "no @ modifiers allowed before range"
1313			}
1314
1315			if errMsg != "" {
1316				errRange := mergeRanges(&yyDollar[2].item, &yyDollar[4].item)
1317				yylex.(*parser).addParseErrf(errRange, errMsg)
1318			}
1319
1320			yyVAL.node = &MatrixSelector{
1321				VectorSelector: yyDollar[1].node.(Expr),
1322				Range:          yyDollar[3].duration,
1323				EndPos:         yylex.(*parser).lastClosing,
1324			}
1325		}
1326	case 76:
1327		yyDollar = yyS[yypt-6 : yypt+1]
1328//line promql/parser/generated_parser.y:449
1329		{
1330			yyVAL.node = &SubqueryExpr{
1331				Expr:  yyDollar[1].node.(Expr),
1332				Range: yyDollar[3].duration,
1333				Step:  yyDollar[5].duration,
1334
1335				EndPos: yyDollar[6].item.Pos + 1,
1336			}
1337		}
1338	case 77:
1339		yyDollar = yyS[yypt-6 : yypt+1]
1340//line promql/parser/generated_parser.y:459
1341		{
1342			yylex.(*parser).unexpected("subquery selector", "\"]\"")
1343			yyVAL.node = yyDollar[1].node
1344		}
1345	case 78:
1346		yyDollar = yyS[yypt-5 : yypt+1]
1347//line promql/parser/generated_parser.y:461
1348		{
1349			yylex.(*parser).unexpected("subquery selector", "duration or \"]\"")
1350			yyVAL.node = yyDollar[1].node
1351		}
1352	case 79:
1353		yyDollar = yyS[yypt-4 : yypt+1]
1354//line promql/parser/generated_parser.y:463
1355		{
1356			yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
1357			yyVAL.node = yyDollar[1].node
1358		}
1359	case 80:
1360		yyDollar = yyS[yypt-3 : yypt+1]
1361//line promql/parser/generated_parser.y:465
1362		{
1363			yylex.(*parser).unexpected("subquery selector", "duration")
1364			yyVAL.node = yyDollar[1].node
1365		}
1366	case 81:
1367		yyDollar = yyS[yypt-2 : yypt+1]
1368//line promql/parser/generated_parser.y:475
1369		{
1370			if nl, ok := yyDollar[2].node.(*NumberLiteral); ok {
1371				if yyDollar[1].item.Typ == SUB {
1372					nl.Val *= -1
1373				}
1374				nl.PosRange.Start = yyDollar[1].item.Pos
1375				yyVAL.node = nl
1376			} else {
1377				yyVAL.node = &UnaryExpr{Op: yyDollar[1].item.Typ, Expr: yyDollar[2].node.(Expr), StartPos: yyDollar[1].item.Pos}
1378			}
1379		}
1380	case 82:
1381		yyDollar = yyS[yypt-2 : yypt+1]
1382//line promql/parser/generated_parser.y:493
1383		{
1384			vs := yyDollar[2].node.(*VectorSelector)
1385			vs.PosRange = mergeRanges(&yyDollar[1].item, vs)
1386			vs.Name = yyDollar[1].item.Val
1387			yylex.(*parser).assembleVectorSelector(vs)
1388			yyVAL.node = vs
1389		}
1390	case 83:
1391		yyDollar = yyS[yypt-1 : yypt+1]
1392//line promql/parser/generated_parser.y:501
1393		{
1394			vs := &VectorSelector{
1395				Name:          yyDollar[1].item.Val,
1396				LabelMatchers: []*labels.Matcher{},
1397				PosRange:      yyDollar[1].item.PositionRange(),
1398			}
1399			yylex.(*parser).assembleVectorSelector(vs)
1400			yyVAL.node = vs
1401		}
1402	case 84:
1403		yyDollar = yyS[yypt-1 : yypt+1]
1404//line promql/parser/generated_parser.y:511
1405		{
1406			vs := yyDollar[1].node.(*VectorSelector)
1407			yylex.(*parser).assembleVectorSelector(vs)
1408			yyVAL.node = vs
1409		}
1410	case 85:
1411		yyDollar = yyS[yypt-3 : yypt+1]
1412//line promql/parser/generated_parser.y:519
1413		{
1414			yyVAL.node = &VectorSelector{
1415				LabelMatchers: yyDollar[2].matchers,
1416				PosRange:      mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
1417			}
1418		}
1419	case 86:
1420		yyDollar = yyS[yypt-4 : yypt+1]
1421//line promql/parser/generated_parser.y:526
1422		{
1423			yyVAL.node = &VectorSelector{
1424				LabelMatchers: yyDollar[2].matchers,
1425				PosRange:      mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
1426			}
1427		}
1428	case 87:
1429		yyDollar = yyS[yypt-2 : yypt+1]
1430//line promql/parser/generated_parser.y:533
1431		{
1432			yyVAL.node = &VectorSelector{
1433				LabelMatchers: []*labels.Matcher{},
1434				PosRange:      mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
1435			}
1436		}
1437	case 88:
1438		yyDollar = yyS[yypt-3 : yypt+1]
1439//line promql/parser/generated_parser.y:542
1440		{
1441			if yyDollar[1].matchers != nil {
1442				yyVAL.matchers = append(yyDollar[1].matchers, yyDollar[3].matcher)
1443			} else {
1444				yyVAL.matchers = yyDollar[1].matchers
1445			}
1446		}
1447	case 89:
1448		yyDollar = yyS[yypt-1 : yypt+1]
1449//line promql/parser/generated_parser.y:550
1450		{
1451			yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
1452		}
1453	case 90:
1454		yyDollar = yyS[yypt-2 : yypt+1]
1455//line promql/parser/generated_parser.y:552
1456		{
1457			yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
1458			yyVAL.matchers = yyDollar[1].matchers
1459		}
1460	case 91:
1461		yyDollar = yyS[yypt-3 : yypt+1]
1462//line promql/parser/generated_parser.y:556
1463		{
1464			yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
1465		}
1466	case 92:
1467		yyDollar = yyS[yypt-3 : yypt+1]
1468//line promql/parser/generated_parser.y:558
1469		{
1470			yylex.(*parser).unexpected("label matching", "string")
1471			yyVAL.matcher = nil
1472		}
1473	case 93:
1474		yyDollar = yyS[yypt-2 : yypt+1]
1475//line promql/parser/generated_parser.y:560
1476		{
1477			yylex.(*parser).unexpected("label matching", "label matching operator")
1478			yyVAL.matcher = nil
1479		}
1480	case 94:
1481		yyDollar = yyS[yypt-1 : yypt+1]
1482//line promql/parser/generated_parser.y:562
1483		{
1484			yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
1485			yyVAL.matcher = nil
1486		}
1487	case 95:
1488		yyDollar = yyS[yypt-2 : yypt+1]
1489//line promql/parser/generated_parser.y:570
1490		{
1491			yyVAL.labels = append(yyDollar[2].labels, labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val})
1492			sort.Sort(yyVAL.labels)
1493		}
1494	case 96:
1495		yyDollar = yyS[yypt-1 : yypt+1]
1496//line promql/parser/generated_parser.y:572
1497		{
1498			yyVAL.labels = yyDollar[1].labels
1499		}
1500	case 119:
1501		yyDollar = yyS[yypt-3 : yypt+1]
1502//line promql/parser/generated_parser.y:579
1503		{
1504			yyVAL.labels = labels.New(yyDollar[2].labels...)
1505		}
1506	case 120:
1507		yyDollar = yyS[yypt-4 : yypt+1]
1508//line promql/parser/generated_parser.y:581
1509		{
1510			yyVAL.labels = labels.New(yyDollar[2].labels...)
1511		}
1512	case 121:
1513		yyDollar = yyS[yypt-2 : yypt+1]
1514//line promql/parser/generated_parser.y:583
1515		{
1516			yyVAL.labels = labels.New()
1517		}
1518	case 122:
1519		yyDollar = yyS[yypt-0 : yypt+1]
1520//line promql/parser/generated_parser.y:585
1521		{
1522			yyVAL.labels = labels.New()
1523		}
1524	case 123:
1525		yyDollar = yyS[yypt-3 : yypt+1]
1526//line promql/parser/generated_parser.y:589
1527		{
1528			yyVAL.labels = append(yyDollar[1].labels, yyDollar[3].label)
1529		}
1530	case 124:
1531		yyDollar = yyS[yypt-1 : yypt+1]
1532//line promql/parser/generated_parser.y:591
1533		{
1534			yyVAL.labels = []labels.Label{yyDollar[1].label}
1535		}
1536	case 125:
1537		yyDollar = yyS[yypt-2 : yypt+1]
1538//line promql/parser/generated_parser.y:593
1539		{
1540			yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
1541			yyVAL.labels = yyDollar[1].labels
1542		}
1543	case 126:
1544		yyDollar = yyS[yypt-3 : yypt+1]
1545//line promql/parser/generated_parser.y:598
1546		{
1547			yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
1548		}
1549	case 127:
1550		yyDollar = yyS[yypt-3 : yypt+1]
1551//line promql/parser/generated_parser.y:600
1552		{
1553			yylex.(*parser).unexpected("label set", "string")
1554			yyVAL.label = labels.Label{}
1555		}
1556	case 128:
1557		yyDollar = yyS[yypt-2 : yypt+1]
1558//line promql/parser/generated_parser.y:602
1559		{
1560			yylex.(*parser).unexpected("label set", "\"=\"")
1561			yyVAL.label = labels.Label{}
1562		}
1563	case 129:
1564		yyDollar = yyS[yypt-1 : yypt+1]
1565//line promql/parser/generated_parser.y:604
1566		{
1567			yylex.(*parser).unexpected("label set", "identifier or \"}\"")
1568			yyVAL.label = labels.Label{}
1569		}
1570	case 130:
1571		yyDollar = yyS[yypt-2 : yypt+1]
1572//line promql/parser/generated_parser.y:612
1573		{
1574			yylex.(*parser).generatedParserResult = &seriesDescription{
1575				labels: yyDollar[1].labels,
1576				values: yyDollar[2].series,
1577			}
1578		}
1579	case 131:
1580		yyDollar = yyS[yypt-0 : yypt+1]
1581//line promql/parser/generated_parser.y:621
1582		{
1583			yyVAL.series = []SequenceValue{}
1584		}
1585	case 132:
1586		yyDollar = yyS[yypt-3 : yypt+1]
1587//line promql/parser/generated_parser.y:623
1588		{
1589			yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
1590		}
1591	case 133:
1592		yyDollar = yyS[yypt-2 : yypt+1]
1593//line promql/parser/generated_parser.y:625
1594		{
1595			yyVAL.series = yyDollar[1].series
1596		}
1597	case 134:
1598		yyDollar = yyS[yypt-1 : yypt+1]
1599//line promql/parser/generated_parser.y:627
1600		{
1601			yylex.(*parser).unexpected("series values", "")
1602			yyVAL.series = nil
1603		}
1604	case 135:
1605		yyDollar = yyS[yypt-1 : yypt+1]
1606//line promql/parser/generated_parser.y:631
1607		{
1608			yyVAL.series = []SequenceValue{{Omitted: true}}
1609		}
1610	case 136:
1611		yyDollar = yyS[yypt-3 : yypt+1]
1612//line promql/parser/generated_parser.y:633
1613		{
1614			yyVAL.series = []SequenceValue{}
1615			for i := uint64(0); i < yyDollar[3].uint; i++ {
1616				yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true})
1617			}
1618		}
1619	case 137:
1620		yyDollar = yyS[yypt-1 : yypt+1]
1621//line promql/parser/generated_parser.y:640
1622		{
1623			yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
1624		}
1625	case 138:
1626		yyDollar = yyS[yypt-3 : yypt+1]
1627//line promql/parser/generated_parser.y:642
1628		{
1629			yyVAL.series = []SequenceValue{}
1630			for i := uint64(0); i <= yyDollar[3].uint; i++ {
1631				yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
1632			}
1633		}
1634	case 139:
1635		yyDollar = yyS[yypt-4 : yypt+1]
1636//line promql/parser/generated_parser.y:649
1637		{
1638			yyVAL.series = []SequenceValue{}
1639			for i := uint64(0); i <= yyDollar[4].uint; i++ {
1640				yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
1641				yyDollar[1].float += yyDollar[2].float
1642			}
1643		}
1644	case 140:
1645		yyDollar = yyS[yypt-1 : yypt+1]
1646//line promql/parser/generated_parser.y:659
1647		{
1648			if yyDollar[1].item.Val != "stale" {
1649				yylex.(*parser).unexpected("series values", "number or \"stale\"")
1650			}
1651			yyVAL.float = math.Float64frombits(value.StaleNaN)
1652		}
1653	case 188:
1654		yyDollar = yyS[yypt-1 : yypt+1]
1655//line promql/parser/generated_parser.y:690
1656		{
1657			yyVAL.node = &NumberLiteral{
1658				Val:      yylex.(*parser).number(yyDollar[1].item.Val),
1659				PosRange: yyDollar[1].item.PositionRange(),
1660			}
1661		}
1662	case 189:
1663		yyDollar = yyS[yypt-1 : yypt+1]
1664//line promql/parser/generated_parser.y:698
1665		{
1666			yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
1667		}
1668	case 190:
1669		yyDollar = yyS[yypt-2 : yypt+1]
1670//line promql/parser/generated_parser.y:700
1671		{
1672			yyVAL.float = yyDollar[2].float
1673		}
1674	case 191:
1675		yyDollar = yyS[yypt-2 : yypt+1]
1676//line promql/parser/generated_parser.y:701
1677		{
1678			yyVAL.float = -yyDollar[2].float
1679		}
1680	case 194:
1681		yyDollar = yyS[yypt-1 : yypt+1]
1682//line promql/parser/generated_parser.y:707
1683		{
1684			var err error
1685			yyVAL.uint, err = strconv.ParseUint(yyDollar[1].item.Val, 10, 64)
1686			if err != nil {
1687				yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err)
1688			}
1689		}
1690	case 195:
1691		yyDollar = yyS[yypt-1 : yypt+1]
1692//line promql/parser/generated_parser.y:717
1693		{
1694			var err error
1695			yyVAL.duration, err = parseDuration(yyDollar[1].item.Val)
1696			if err != nil {
1697				yylex.(*parser).addParseErr(yyDollar[1].item.PositionRange(), err)
1698			}
1699		}
1700	case 196:
1701		yyDollar = yyS[yypt-1 : yypt+1]
1702//line promql/parser/generated_parser.y:728
1703		{
1704			yyVAL.node = &StringLiteral{
1705				Val:      yylex.(*parser).unquoteString(yyDollar[1].item.Val),
1706				PosRange: yyDollar[1].item.PositionRange(),
1707			}
1708		}
1709	case 197:
1710		yyDollar = yyS[yypt-0 : yypt+1]
1711//line promql/parser/generated_parser.y:741
1712		{
1713			yyVAL.duration = 0
1714		}
1715	case 199:
1716		yyDollar = yyS[yypt-0 : yypt+1]
1717//line promql/parser/generated_parser.y:745
1718		{
1719			yyVAL.strings = nil
1720		}
1721	}
1722	goto yystack /* stack new state and value */
1723}
1724