mirror of
https://github.com/prometheus/prometheus.git
synced 2025-08-06 14:17:12 +02:00
The position range of nested aggregate expression was wrong, for the expression "(sum(foo))" the position of "sum(foo)" should be 1-9, but the parser could not decide the end of the expression on pos 9, instead it read ahead to pos 10 and then emitted the aggregate. But we only kept the last closing position (10) and wrote that into the aggregate. The reason for this is that the parser cannot know from "(sum(foo)" alone if the aggregate is finished. It could be finished as in "(sum(foo))" but equally it could continue with group modifier as "(sum(foo) by (bar))". The fix is to track ")" tokens in a stack in addition to the lastClosing position, which is overloaded with other things like offset number tracking. Signed-off-by: György Krajcsovits <gyorgy.krajcsovits@grafana.com>
2143 lines
54 KiB
Go
2143 lines
54 KiB
Go
// Code generated by goyacc -l -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y. DO NOT EDIT.
|
|
package parser
|
|
|
|
import __yyfmt__ "fmt"
|
|
|
|
import (
|
|
"math"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/prometheus/prometheus/model/histogram"
|
|
"github.com/prometheus/prometheus/model/labels"
|
|
"github.com/prometheus/prometheus/model/value"
|
|
"github.com/prometheus/prometheus/promql/parser/posrange"
|
|
|
|
"github.com/prometheus/common/model"
|
|
)
|
|
|
|
type yySymType struct {
|
|
yys int
|
|
node Node
|
|
item Item
|
|
matchers []*labels.Matcher
|
|
matcher *labels.Matcher
|
|
label labels.Label
|
|
labels labels.Labels
|
|
lblList []labels.Label
|
|
strings []string
|
|
series []SequenceValue
|
|
histogram *histogram.FloatHistogram
|
|
descriptors map[string]interface{}
|
|
bucket_set []float64
|
|
int int64
|
|
uint uint64
|
|
float float64
|
|
}
|
|
|
|
const EQL = 57346
|
|
const BLANK = 57347
|
|
const COLON = 57348
|
|
const COMMA = 57349
|
|
const COMMENT = 57350
|
|
const DURATION = 57351
|
|
const EOF = 57352
|
|
const ERROR = 57353
|
|
const IDENTIFIER = 57354
|
|
const LEFT_BRACE = 57355
|
|
const LEFT_BRACKET = 57356
|
|
const LEFT_PAREN = 57357
|
|
const OPEN_HIST = 57358
|
|
const CLOSE_HIST = 57359
|
|
const METRIC_IDENTIFIER = 57360
|
|
const NUMBER = 57361
|
|
const RIGHT_BRACE = 57362
|
|
const RIGHT_BRACKET = 57363
|
|
const RIGHT_PAREN = 57364
|
|
const SEMICOLON = 57365
|
|
const SPACE = 57366
|
|
const STRING = 57367
|
|
const TIMES = 57368
|
|
const histogramDescStart = 57369
|
|
const SUM_DESC = 57370
|
|
const COUNT_DESC = 57371
|
|
const SCHEMA_DESC = 57372
|
|
const OFFSET_DESC = 57373
|
|
const NEGATIVE_OFFSET_DESC = 57374
|
|
const BUCKETS_DESC = 57375
|
|
const NEGATIVE_BUCKETS_DESC = 57376
|
|
const ZERO_BUCKET_DESC = 57377
|
|
const ZERO_BUCKET_WIDTH_DESC = 57378
|
|
const CUSTOM_VALUES_DESC = 57379
|
|
const COUNTER_RESET_HINT_DESC = 57380
|
|
const histogramDescEnd = 57381
|
|
const operatorsStart = 57382
|
|
const ADD = 57383
|
|
const DIV = 57384
|
|
const EQLC = 57385
|
|
const EQL_REGEX = 57386
|
|
const GTE = 57387
|
|
const GTR = 57388
|
|
const LAND = 57389
|
|
const LOR = 57390
|
|
const LSS = 57391
|
|
const LTE = 57392
|
|
const LUNLESS = 57393
|
|
const MOD = 57394
|
|
const MUL = 57395
|
|
const NEQ = 57396
|
|
const NEQ_REGEX = 57397
|
|
const POW = 57398
|
|
const SUB = 57399
|
|
const AT = 57400
|
|
const ATAN2 = 57401
|
|
const operatorsEnd = 57402
|
|
const aggregatorsStart = 57403
|
|
const AVG = 57404
|
|
const BOTTOMK = 57405
|
|
const COUNT = 57406
|
|
const COUNT_VALUES = 57407
|
|
const GROUP = 57408
|
|
const MAX = 57409
|
|
const MIN = 57410
|
|
const QUANTILE = 57411
|
|
const STDDEV = 57412
|
|
const STDVAR = 57413
|
|
const SUM = 57414
|
|
const TOPK = 57415
|
|
const LIMITK = 57416
|
|
const LIMIT_RATIO = 57417
|
|
const aggregatorsEnd = 57418
|
|
const keywordsStart = 57419
|
|
const BOOL = 57420
|
|
const BY = 57421
|
|
const GROUP_LEFT = 57422
|
|
const GROUP_RIGHT = 57423
|
|
const IGNORING = 57424
|
|
const OFFSET = 57425
|
|
const ON = 57426
|
|
const WITHOUT = 57427
|
|
const keywordsEnd = 57428
|
|
const preprocessorStart = 57429
|
|
const START = 57430
|
|
const END = 57431
|
|
const preprocessorEnd = 57432
|
|
const counterResetHintsStart = 57433
|
|
const UNKNOWN_COUNTER_RESET = 57434
|
|
const COUNTER_RESET = 57435
|
|
const NOT_COUNTER_RESET = 57436
|
|
const GAUGE_TYPE = 57437
|
|
const counterResetHintsEnd = 57438
|
|
const startSymbolsStart = 57439
|
|
const START_METRIC = 57440
|
|
const START_SERIES_DESCRIPTION = 57441
|
|
const START_EXPRESSION = 57442
|
|
const START_METRIC_SELECTOR = 57443
|
|
const startSymbolsEnd = 57444
|
|
|
|
var yyToknames = [...]string{
|
|
"$end",
|
|
"error",
|
|
"$unk",
|
|
"EQL",
|
|
"BLANK",
|
|
"COLON",
|
|
"COMMA",
|
|
"COMMENT",
|
|
"DURATION",
|
|
"EOF",
|
|
"ERROR",
|
|
"IDENTIFIER",
|
|
"LEFT_BRACE",
|
|
"LEFT_BRACKET",
|
|
"LEFT_PAREN",
|
|
"OPEN_HIST",
|
|
"CLOSE_HIST",
|
|
"METRIC_IDENTIFIER",
|
|
"NUMBER",
|
|
"RIGHT_BRACE",
|
|
"RIGHT_BRACKET",
|
|
"RIGHT_PAREN",
|
|
"SEMICOLON",
|
|
"SPACE",
|
|
"STRING",
|
|
"TIMES",
|
|
"histogramDescStart",
|
|
"SUM_DESC",
|
|
"COUNT_DESC",
|
|
"SCHEMA_DESC",
|
|
"OFFSET_DESC",
|
|
"NEGATIVE_OFFSET_DESC",
|
|
"BUCKETS_DESC",
|
|
"NEGATIVE_BUCKETS_DESC",
|
|
"ZERO_BUCKET_DESC",
|
|
"ZERO_BUCKET_WIDTH_DESC",
|
|
"CUSTOM_VALUES_DESC",
|
|
"COUNTER_RESET_HINT_DESC",
|
|
"histogramDescEnd",
|
|
"operatorsStart",
|
|
"ADD",
|
|
"DIV",
|
|
"EQLC",
|
|
"EQL_REGEX",
|
|
"GTE",
|
|
"GTR",
|
|
"LAND",
|
|
"LOR",
|
|
"LSS",
|
|
"LTE",
|
|
"LUNLESS",
|
|
"MOD",
|
|
"MUL",
|
|
"NEQ",
|
|
"NEQ_REGEX",
|
|
"POW",
|
|
"SUB",
|
|
"AT",
|
|
"ATAN2",
|
|
"operatorsEnd",
|
|
"aggregatorsStart",
|
|
"AVG",
|
|
"BOTTOMK",
|
|
"COUNT",
|
|
"COUNT_VALUES",
|
|
"GROUP",
|
|
"MAX",
|
|
"MIN",
|
|
"QUANTILE",
|
|
"STDDEV",
|
|
"STDVAR",
|
|
"SUM",
|
|
"TOPK",
|
|
"LIMITK",
|
|
"LIMIT_RATIO",
|
|
"aggregatorsEnd",
|
|
"keywordsStart",
|
|
"BOOL",
|
|
"BY",
|
|
"GROUP_LEFT",
|
|
"GROUP_RIGHT",
|
|
"IGNORING",
|
|
"OFFSET",
|
|
"ON",
|
|
"WITHOUT",
|
|
"keywordsEnd",
|
|
"preprocessorStart",
|
|
"START",
|
|
"END",
|
|
"preprocessorEnd",
|
|
"counterResetHintsStart",
|
|
"UNKNOWN_COUNTER_RESET",
|
|
"COUNTER_RESET",
|
|
"NOT_COUNTER_RESET",
|
|
"GAUGE_TYPE",
|
|
"counterResetHintsEnd",
|
|
"startSymbolsStart",
|
|
"START_METRIC",
|
|
"START_SERIES_DESCRIPTION",
|
|
"START_EXPRESSION",
|
|
"START_METRIC_SELECTOR",
|
|
"startSymbolsEnd",
|
|
}
|
|
|
|
var yyStatenames = [...]string{}
|
|
|
|
const yyEofCode = 1
|
|
const yyErrCode = 2
|
|
const yyInitialStackSize = 16
|
|
|
|
var yyExca = [...]int16{
|
|
-1, 1,
|
|
1, -1,
|
|
-2, 0,
|
|
-1, 37,
|
|
1, 142,
|
|
10, 142,
|
|
24, 142,
|
|
-2, 0,
|
|
-1, 63,
|
|
2, 185,
|
|
15, 185,
|
|
79, 185,
|
|
85, 185,
|
|
-2, 103,
|
|
-1, 64,
|
|
2, 186,
|
|
15, 186,
|
|
79, 186,
|
|
85, 186,
|
|
-2, 104,
|
|
-1, 65,
|
|
2, 187,
|
|
15, 187,
|
|
79, 187,
|
|
85, 187,
|
|
-2, 106,
|
|
-1, 66,
|
|
2, 188,
|
|
15, 188,
|
|
79, 188,
|
|
85, 188,
|
|
-2, 107,
|
|
-1, 67,
|
|
2, 189,
|
|
15, 189,
|
|
79, 189,
|
|
85, 189,
|
|
-2, 108,
|
|
-1, 68,
|
|
2, 190,
|
|
15, 190,
|
|
79, 190,
|
|
85, 190,
|
|
-2, 113,
|
|
-1, 69,
|
|
2, 191,
|
|
15, 191,
|
|
79, 191,
|
|
85, 191,
|
|
-2, 115,
|
|
-1, 70,
|
|
2, 192,
|
|
15, 192,
|
|
79, 192,
|
|
85, 192,
|
|
-2, 117,
|
|
-1, 71,
|
|
2, 193,
|
|
15, 193,
|
|
79, 193,
|
|
85, 193,
|
|
-2, 118,
|
|
-1, 72,
|
|
2, 194,
|
|
15, 194,
|
|
79, 194,
|
|
85, 194,
|
|
-2, 119,
|
|
-1, 73,
|
|
2, 195,
|
|
15, 195,
|
|
79, 195,
|
|
85, 195,
|
|
-2, 120,
|
|
-1, 74,
|
|
2, 196,
|
|
15, 196,
|
|
79, 196,
|
|
85, 196,
|
|
-2, 121,
|
|
-1, 75,
|
|
2, 197,
|
|
15, 197,
|
|
79, 197,
|
|
85, 197,
|
|
-2, 125,
|
|
-1, 76,
|
|
2, 198,
|
|
15, 198,
|
|
79, 198,
|
|
85, 198,
|
|
-2, 126,
|
|
-1, 126,
|
|
41, 250,
|
|
42, 250,
|
|
52, 250,
|
|
53, 250,
|
|
57, 250,
|
|
-2, 20,
|
|
-1, 224,
|
|
9, 247,
|
|
12, 247,
|
|
13, 247,
|
|
18, 247,
|
|
19, 247,
|
|
25, 247,
|
|
41, 247,
|
|
47, 247,
|
|
48, 247,
|
|
51, 247,
|
|
57, 247,
|
|
62, 247,
|
|
63, 247,
|
|
64, 247,
|
|
65, 247,
|
|
66, 247,
|
|
67, 247,
|
|
68, 247,
|
|
69, 247,
|
|
70, 247,
|
|
71, 247,
|
|
72, 247,
|
|
73, 247,
|
|
74, 247,
|
|
75, 247,
|
|
79, 247,
|
|
83, 247,
|
|
85, 247,
|
|
88, 247,
|
|
89, 247,
|
|
-2, 0,
|
|
-1, 225,
|
|
9, 247,
|
|
12, 247,
|
|
13, 247,
|
|
18, 247,
|
|
19, 247,
|
|
25, 247,
|
|
41, 247,
|
|
47, 247,
|
|
48, 247,
|
|
51, 247,
|
|
57, 247,
|
|
62, 247,
|
|
63, 247,
|
|
64, 247,
|
|
65, 247,
|
|
66, 247,
|
|
67, 247,
|
|
68, 247,
|
|
69, 247,
|
|
70, 247,
|
|
71, 247,
|
|
72, 247,
|
|
73, 247,
|
|
74, 247,
|
|
75, 247,
|
|
79, 247,
|
|
83, 247,
|
|
85, 247,
|
|
88, 247,
|
|
89, 247,
|
|
-2, 0,
|
|
}
|
|
|
|
const yyPrivate = 57344
|
|
|
|
const yyLast = 892
|
|
|
|
var yyAct = [...]int16{
|
|
166, 359, 357, 169, 364, 251, 39, 216, 301, 52,
|
|
177, 315, 86, 130, 84, 6, 316, 109, 200, 44,
|
|
145, 117, 116, 61, 118, 195, 109, 295, 119, 170,
|
|
371, 372, 373, 374, 120, 109, 222, 121, 223, 224,
|
|
225, 115, 296, 327, 91, 93, 94, 140, 95, 96,
|
|
97, 98, 99, 100, 101, 102, 103, 104, 297, 105,
|
|
106, 108, 92, 93, 123, 202, 125, 124, 105, 126,
|
|
108, 354, 293, 102, 103, 353, 122, 105, 59, 108,
|
|
92, 358, 110, 113, 127, 329, 107, 175, 292, 349,
|
|
318, 285, 132, 114, 112, 107, 327, 115, 111, 174,
|
|
336, 119, 141, 176, 107, 204, 284, 120, 348, 173,
|
|
220, 2, 3, 4, 5, 203, 205, 161, 291, 179,
|
|
180, 181, 182, 183, 184, 185, 190, 163, 194, 163,
|
|
163, 163, 163, 163, 163, 163, 188, 191, 186, 189,
|
|
187, 290, 243, 121, 218, 365, 289, 79, 221, 382,
|
|
208, 206, 35, 226, 227, 228, 229, 230, 231, 232,
|
|
233, 234, 235, 236, 237, 238, 239, 240, 381, 288,
|
|
219, 380, 7, 10, 241, 242, 347, 346, 345, 244,
|
|
245, 344, 343, 81, 163, 163, 164, 109, 164, 164,
|
|
164, 164, 164, 164, 164, 146, 147, 148, 149, 150,
|
|
151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
|
|
342, 132, 287, 212, 91, 93, 94, 139, 95, 96,
|
|
97, 98, 99, 100, 101, 102, 103, 104, 210, 105,
|
|
106, 108, 92, 109, 341, 168, 211, 317, 340, 313,
|
|
314, 339, 174, 164, 164, 294, 178, 338, 337, 50,
|
|
8, 209, 173, 56, 37, 80, 107, 179, 319, 165,
|
|
91, 93, 94, 55, 95, 96, 97, 163, 99, 100,
|
|
101, 102, 103, 104, 175, 105, 106, 108, 92, 248,
|
|
138, 335, 137, 247, 60, 77, 90, 9, 9, 196,
|
|
176, 201, 325, 202, 326, 328, 334, 330, 246, 321,
|
|
113, 78, 107, 333, 331, 332, 56, 36, 110, 113,
|
|
114, 112, 165, 1, 115, 62, 55, 49, 320, 114,
|
|
112, 171, 172, 115, 111, 174, 164, 48, 47, 351,
|
|
46, 352, 144, 204, 45, 173, 43, 383, 77, 360,
|
|
361, 362, 356, 203, 205, 363, 162, 367, 366, 369,
|
|
368, 254, 142, 56, 78, 375, 376, 175, 214, 165,
|
|
377, 264, 174, 55, 192, 217, 379, 270, 133, 220,
|
|
87, 350, 173, 176, 253, 42, 143, 199, 131, 324,
|
|
85, 384, 198, 41, 323, 77, 286, 136, 207, 40,
|
|
51, 88, 135, 88, 175, 197, 266, 267, 215, 322,
|
|
268, 78, 378, 298, 89, 134, 213, 249, 281, 82,
|
|
176, 255, 257, 259, 260, 261, 269, 271, 274, 275,
|
|
276, 277, 278, 282, 283, 254, 370, 256, 258, 262,
|
|
263, 265, 272, 273, 133, 264, 56, 279, 280, 167,
|
|
87, 270, 165, 252, 131, 250, 55, 53, 253, 128,
|
|
85, 174, 129, 0, 0, 0, 0, 88, 83, 0,
|
|
0, 173, 0, 88, 0, 0, 0, 0, 77, 0,
|
|
266, 267, 0, 0, 268, 0, 0, 0, 0, 0,
|
|
0, 0, 281, 175, 78, 255, 257, 259, 260, 261,
|
|
269, 271, 274, 275, 276, 277, 278, 282, 283, 176,
|
|
0, 256, 258, 262, 263, 265, 272, 273, 0, 0,
|
|
56, 279, 280, 54, 79, 0, 57, 300, 0, 22,
|
|
55, 0, 0, 193, 299, 0, 58, 0, 303, 304,
|
|
302, 309, 311, 308, 310, 305, 306, 307, 312, 0,
|
|
0, 0, 77, 0, 0, 0, 0, 0, 18, 19,
|
|
0, 0, 20, 0, 0, 0, 0, 0, 78, 0,
|
|
0, 0, 0, 63, 64, 65, 66, 67, 68, 69,
|
|
70, 71, 72, 73, 74, 75, 76, 0, 0, 0,
|
|
13, 0, 0, 0, 24, 0, 30, 0, 0, 31,
|
|
32, 56, 38, 109, 54, 79, 0, 57, 355, 0,
|
|
22, 55, 0, 0, 0, 0, 0, 58, 0, 303,
|
|
304, 302, 309, 311, 308, 310, 305, 306, 307, 312,
|
|
91, 93, 0, 77, 0, 0, 0, 0, 0, 18,
|
|
19, 102, 103, 20, 0, 105, 106, 108, 92, 78,
|
|
0, 0, 0, 0, 63, 64, 65, 66, 67, 68,
|
|
69, 70, 71, 72, 73, 74, 75, 76, 0, 0,
|
|
0, 13, 107, 0, 0, 24, 0, 30, 0, 56,
|
|
31, 32, 54, 79, 0, 57, 0, 0, 22, 55,
|
|
0, 0, 0, 0, 0, 58, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 77, 0, 0, 0, 0, 0, 18, 19, 0,
|
|
0, 20, 0, 0, 0, 17, 79, 78, 0, 0,
|
|
0, 22, 63, 64, 65, 66, 67, 68, 69, 70,
|
|
71, 72, 73, 74, 75, 76, 0, 0, 0, 13,
|
|
0, 0, 0, 24, 0, 30, 0, 0, 31, 32,
|
|
18, 19, 0, 0, 20, 0, 0, 0, 17, 35,
|
|
0, 0, 0, 0, 22, 11, 12, 14, 15, 16,
|
|
21, 23, 25, 26, 27, 28, 29, 33, 34, 0,
|
|
0, 0, 13, 0, 0, 0, 24, 0, 30, 0,
|
|
0, 31, 32, 18, 19, 0, 0, 20, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 11, 12,
|
|
14, 15, 16, 21, 23, 25, 26, 27, 28, 29,
|
|
33, 34, 109, 0, 0, 13, 0, 0, 0, 24,
|
|
0, 30, 0, 0, 31, 32, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 91,
|
|
93, 94, 0, 95, 96, 0, 0, 99, 100, 0,
|
|
102, 103, 104, 0, 105, 106, 108, 92, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 107,
|
|
}
|
|
|
|
var yyPact = [...]int16{
|
|
13, 162, 746, 746, 582, 703, -1000, -1000, -1000, 139,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, 438, -1000, 284, -1000, 173,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, 41, 22, 128, -1000, -1000, 660, -1000, 660,
|
|
134, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 432,
|
|
-1000, -1000, 385, -1000, -1000, 278, 213, -1000, -1000, 23,
|
|
-1000, -58, -58, -58, -58, -58, -58, -58, -58, -58,
|
|
-58, -58, -58, -58, -58, -58, -58, 344, 233, 244,
|
|
427, 427, 427, 427, 427, 427, 128, -51, -1000, 124,
|
|
124, 501, -1000, 3, 267, 12, -15, -1000, 375, -1000,
|
|
-1000, 289, 61, -1000, -1000, 368, -1000, 226, -1000, 211,
|
|
353, 660, -1000, -46, -41, -1000, 660, 660, 660, 660,
|
|
660, 660, 660, 660, 660, 660, 660, 660, 660, 660,
|
|
660, -1000, -1000, -1000, 427, 427, -1000, 127, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, 90, 90, 277, -1000, 41,
|
|
258, 258, -15, -15, -15, -15, -1000, -1000, -1000, 423,
|
|
-1000, -1000, 84, -1000, 173, -1000, -1000, -1000, 366, -1000,
|
|
144, -1000, -1000, -1000, -1000, -1000, 116, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, 62, 46, 1, -1000, -1000, -1000,
|
|
500, 21, 124, 124, 124, 124, 12, 12, 579, 579,
|
|
579, 808, 219, 579, 579, 808, 12, 12, 579, 12,
|
|
21, -15, 267, 68, -1000, -1000, -1000, 297, -1000, 377,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, 660, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, 77, 77, 59, 77, 94, 94, 279, 83,
|
|
-1000, -1000, 242, 241, 235, 232, 228, 204, 176, 175,
|
|
172, 171, 170, -1000, -1000, -1000, -1000, -1000, -1000, 87,
|
|
-1000, -1000, -1000, 349, -1000, 173, -1000, -1000, -1000, 77,
|
|
-1000, 49, 45, 581, -1000, -1000, -1000, 24, 442, 442,
|
|
442, 90, 131, 131, 24, 131, 24, -62, -1000, -1000,
|
|
-1000, -1000, -1000, 77, 77, -1000, -1000, -1000, 77, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, 442, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 147, -1000,
|
|
316, -1000, -1000, -1000, -1000,
|
|
}
|
|
|
|
var yyPgo = [...]int16{
|
|
0, 449, 13, 447, 5, 18, 443, 284, 78, 439,
|
|
12, 426, 173, 250, 409, 14, 407, 16, 11, 406,
|
|
404, 7, 403, 8, 4, 402, 2, 1, 3, 398,
|
|
29, 0, 390, 389, 22, 102, 383, 376, 6, 375,
|
|
364, 21, 352, 23, 336, 19, 334, 332, 330, 328,
|
|
327, 317, 249, 9, 315, 10, 313, 307,
|
|
}
|
|
|
|
var yyR1 = [...]int8{
|
|
0, 56, 56, 56, 56, 56, 56, 56, 38, 38,
|
|
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
|
38, 33, 33, 33, 33, 34, 34, 36, 36, 36,
|
|
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
|
|
36, 36, 36, 35, 37, 37, 47, 47, 42, 42,
|
|
42, 42, 17, 17, 17, 17, 16, 16, 16, 4,
|
|
4, 4, 39, 41, 41, 40, 40, 40, 48, 55,
|
|
46, 46, 32, 32, 32, 9, 9, 44, 50, 50,
|
|
50, 50, 50, 50, 51, 52, 52, 52, 43, 43,
|
|
43, 1, 1, 1, 2, 2, 2, 2, 2, 2,
|
|
2, 13, 13, 7, 7, 7, 7, 7, 7, 7,
|
|
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
|
7, 7, 7, 7, 7, 7, 7, 12, 12, 12,
|
|
12, 14, 14, 14, 15, 15, 15, 15, 15, 15,
|
|
15, 57, 20, 20, 20, 20, 19, 19, 19, 19,
|
|
19, 19, 19, 19, 19, 29, 29, 29, 21, 21,
|
|
21, 21, 22, 22, 22, 23, 23, 23, 23, 23,
|
|
23, 23, 23, 23, 23, 23, 24, 24, 25, 25,
|
|
25, 11, 11, 11, 11, 3, 3, 3, 3, 3,
|
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 6,
|
|
6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
|
6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
|
6, 6, 6, 6, 6, 6, 6, 6, 8, 8,
|
|
5, 5, 5, 5, 45, 45, 28, 28, 30, 30,
|
|
31, 31, 27, 26, 26, 49, 10, 18, 18, 53,
|
|
53, 53, 53, 53, 53, 53, 53, 53, 54,
|
|
}
|
|
|
|
var yyR2 = [...]int8{
|
|
0, 2, 2, 2, 2, 2, 2, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 3, 3, 2, 2, 2, 2, 4, 4, 4,
|
|
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
|
4, 4, 4, 1, 0, 1, 3, 3, 1, 1,
|
|
3, 3, 3, 4, 2, 1, 3, 1, 2, 1,
|
|
1, 1, 2, 3, 2, 3, 1, 2, 3, 1,
|
|
3, 3, 3, 5, 3, 1, 1, 4, 6, 5,
|
|
6, 5, 4, 3, 2, 2, 1, 1, 3, 4,
|
|
2, 3, 1, 2, 3, 3, 1, 3, 3, 2,
|
|
1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 3, 4, 2,
|
|
0, 3, 1, 2, 3, 3, 1, 3, 3, 2,
|
|
1, 2, 0, 3, 2, 1, 1, 3, 1, 3,
|
|
4, 1, 3, 5, 5, 1, 1, 1, 4, 3,
|
|
3, 2, 3, 1, 2, 3, 3, 3, 3, 3,
|
|
3, 3, 3, 3, 3, 3, 4, 3, 3, 1,
|
|
2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
|
|
1, 1, 1, 2, 1, 1, 1, 0, 1, 1,
|
|
2, 3, 3, 3, 3, 3, 3, 1, 3,
|
|
}
|
|
|
|
var yyChk = [...]int16{
|
|
-1000, -56, 98, 99, 100, 101, 2, 10, -13, -7,
|
|
-12, 62, 63, 79, 64, 65, 66, 12, 47, 48,
|
|
51, 67, 18, 68, 83, 69, 70, 71, 72, 73,
|
|
85, 88, 89, 74, 75, 13, -57, -13, 10, -38,
|
|
-33, -36, -39, -44, -45, -46, -48, -49, -50, -51,
|
|
-52, -32, -53, -3, 12, 19, 9, 15, 25, -8,
|
|
-7, -43, -54, 62, 63, 64, 65, 66, 67, 68,
|
|
69, 70, 71, 72, 73, 74, 75, 41, 57, 13,
|
|
-52, -12, -14, 20, -15, 12, -10, 2, 25, -20,
|
|
2, 41, 59, 42, 43, 45, 46, 47, 48, 49,
|
|
50, 51, 52, 53, 54, 56, 57, 83, 58, 14,
|
|
41, 57, 53, 42, 52, 56, -34, -41, 2, 79,
|
|
85, 15, -41, -38, -53, -38, -53, -43, -1, 20,
|
|
-2, 12, -10, 2, 20, 7, 2, 4, 2, 4,
|
|
24, -35, -42, -37, -47, 78, -35, -35, -35, -35,
|
|
-35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
|
|
-35, -53, 2, -45, -8, 15, -31, -9, 2, -28,
|
|
-30, 88, 89, 19, 9, 41, 57, -55, 2, -53,
|
|
-53, -53, -53, -53, -53, -53, -41, -34, -17, 15,
|
|
2, -17, -40, 22, -38, 22, 22, 20, 7, 2,
|
|
-5, 2, 4, 54, 44, 55, -5, 20, -15, 25,
|
|
2, 25, 2, -19, 5, -29, -21, 12, -28, -30,
|
|
16, -38, 82, 84, 80, 81, -38, -38, -38, -38,
|
|
-38, -38, -38, -38, -38, -38, -38, -38, -38, -38,
|
|
-38, -53, -53, 15, -28, -28, 21, 6, 2, -16,
|
|
22, -4, -6, 25, 2, 62, 78, 63, 79, 64,
|
|
65, 66, 80, 81, 12, 82, 47, 48, 51, 67,
|
|
18, 68, 83, 84, 69, 70, 71, 72, 73, 88,
|
|
89, 59, 74, 75, 22, 7, 20, -2, 25, 2,
|
|
25, 2, 26, 26, -30, 26, 41, 57, -22, 24,
|
|
17, -23, 30, 28, 29, 35, 36, 37, 33, 31,
|
|
34, 32, 38, -17, -17, -18, -17, -18, 22, -55,
|
|
21, 2, 22, 7, 2, -38, -27, 19, -27, 26,
|
|
-27, -21, -21, 24, 17, 2, 17, 6, 6, 6,
|
|
6, 6, 6, 6, 6, 6, 6, 6, 21, 2,
|
|
22, -4, -27, 26, 26, 17, -23, -26, 57, -27,
|
|
-31, -31, -31, -28, -24, 14, -24, -26, -24, -26,
|
|
-11, 92, 93, 94, 95, -27, -27, -27, -25, -31,
|
|
24, 21, 2, 21, -31,
|
|
}
|
|
|
|
var yyDef = [...]int16{
|
|
0, -2, 130, 130, 0, 0, 7, 6, 1, 130,
|
|
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, 0, 2, -2, 3, 4,
|
|
8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
|
18, 19, 20, 0, 109, 234, 235, 0, 245, 0,
|
|
86, 87, 257, -2, -2, -2, -2, -2, -2, -2,
|
|
-2, -2, -2, -2, -2, -2, -2, 228, 229, 0,
|
|
5, 101, 0, 129, 132, 0, 136, 140, 246, 141,
|
|
145, 44, 44, 44, 44, 44, 44, 44, 44, 44,
|
|
44, 44, 44, 44, 44, 44, 44, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 23, 24, 0,
|
|
0, 0, 62, 0, 20, 84, -2, 85, 0, 90,
|
|
92, 0, 96, 100, 127, 0, 133, 0, 139, 0,
|
|
144, 0, 43, 48, 49, 45, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 70, 71, 249, 0, 0, 72, 0, 74, 240,
|
|
241, 75, 76, 236, 237, 0, 0, 0, 83, 69,
|
|
251, 252, 253, 254, 255, 256, 21, 22, 25, 0,
|
|
55, 26, 0, 64, 66, 68, 258, 88, 0, 93,
|
|
0, 99, 230, 231, 232, 233, 0, 128, 131, 134,
|
|
137, 135, 138, 143, 146, 148, 151, 155, 156, 157,
|
|
0, 27, 0, 0, -2, -2, 28, 29, 30, 31,
|
|
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
|
|
42, 250, 0, 0, 238, 239, 77, 0, 82, 0,
|
|
54, 57, 59, 60, 61, 199, 200, 201, 202, 203,
|
|
204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
|
|
214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
|
|
224, 225, 226, 227, 63, 67, 89, 91, 94, 98,
|
|
95, 97, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
161, 163, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 46, 47, 50, 248, 51, 73, 0,
|
|
79, 81, 52, 0, 58, 65, 147, 242, 149, 0,
|
|
152, 0, 0, 0, 159, 164, 160, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 78, 80,
|
|
53, 56, 150, 0, 0, 158, 162, 165, 0, 244,
|
|
166, 167, 168, 169, 170, 0, 171, 172, 173, 174,
|
|
175, 181, 182, 183, 184, 153, 154, 243, 0, 179,
|
|
0, 177, 180, 176, 178,
|
|
}
|
|
|
|
var yyTok1 = [...]int8{
|
|
1,
|
|
}
|
|
|
|
var yyTok2 = [...]int8{
|
|
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,
|
|
}
|
|
|
|
var yyTok3 = [...]int8{
|
|
0,
|
|
}
|
|
|
|
var yyErrorMessages = [...]struct {
|
|
state int
|
|
token int
|
|
msg string
|
|
}{}
|
|
|
|
/* parser for yacc output */
|
|
|
|
var (
|
|
yyDebug = 0
|
|
yyErrorVerbose = false
|
|
)
|
|
|
|
type yyLexer interface {
|
|
Lex(lval *yySymType) int
|
|
Error(s string)
|
|
}
|
|
|
|
type yyParser interface {
|
|
Parse(yyLexer) int
|
|
Lookahead() int
|
|
}
|
|
|
|
type yyParserImpl struct {
|
|
lval yySymType
|
|
stack [yyInitialStackSize]yySymType
|
|
char int
|
|
}
|
|
|
|
func (p *yyParserImpl) Lookahead() int {
|
|
return p.char
|
|
}
|
|
|
|
func yyNewParser() yyParser {
|
|
return &yyParserImpl{}
|
|
}
|
|
|
|
const yyFlag = -1000
|
|
|
|
func yyTokname(c int) string {
|
|
if c >= 1 && c-1 < len(yyToknames) {
|
|
if yyToknames[c-1] != "" {
|
|
return yyToknames[c-1]
|
|
}
|
|
}
|
|
return __yyfmt__.Sprintf("tok-%v", c)
|
|
}
|
|
|
|
func yyStatname(s int) string {
|
|
if s >= 0 && s < len(yyStatenames) {
|
|
if yyStatenames[s] != "" {
|
|
return yyStatenames[s]
|
|
}
|
|
}
|
|
return __yyfmt__.Sprintf("state-%v", s)
|
|
}
|
|
|
|
func yyErrorMessage(state, lookAhead int) string {
|
|
const TOKSTART = 4
|
|
|
|
if !yyErrorVerbose {
|
|
return "syntax error"
|
|
}
|
|
|
|
for _, e := range yyErrorMessages {
|
|
if e.state == state && e.token == lookAhead {
|
|
return "syntax error: " + e.msg
|
|
}
|
|
}
|
|
|
|
res := "syntax error: unexpected " + yyTokname(lookAhead)
|
|
|
|
// To match Bison, suggest at most four expected tokens.
|
|
expected := make([]int, 0, 4)
|
|
|
|
// Look for shiftable tokens.
|
|
base := int(yyPact[state])
|
|
for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
|
|
if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
|
|
if len(expected) == cap(expected) {
|
|
return res
|
|
}
|
|
expected = append(expected, tok)
|
|
}
|
|
}
|
|
|
|
if yyDef[state] == -2 {
|
|
i := 0
|
|
for yyExca[i] != -1 || int(yyExca[i+1]) != state {
|
|
i += 2
|
|
}
|
|
|
|
// Look for tokens that we accept or reduce.
|
|
for i += 2; yyExca[i] >= 0; i += 2 {
|
|
tok := int(yyExca[i])
|
|
if tok < TOKSTART || yyExca[i+1] == 0 {
|
|
continue
|
|
}
|
|
if len(expected) == cap(expected) {
|
|
return res
|
|
}
|
|
expected = append(expected, tok)
|
|
}
|
|
|
|
// If the default action is to accept or reduce, give up.
|
|
if yyExca[i+1] != 0 {
|
|
return res
|
|
}
|
|
}
|
|
|
|
for i, tok := range expected {
|
|
if i == 0 {
|
|
res += ", expecting "
|
|
} else {
|
|
res += " or "
|
|
}
|
|
res += yyTokname(tok)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
|
|
token = 0
|
|
char = lex.Lex(lval)
|
|
if char <= 0 {
|
|
token = int(yyTok1[0])
|
|
goto out
|
|
}
|
|
if char < len(yyTok1) {
|
|
token = int(yyTok1[char])
|
|
goto out
|
|
}
|
|
if char >= yyPrivate {
|
|
if char < yyPrivate+len(yyTok2) {
|
|
token = int(yyTok2[char-yyPrivate])
|
|
goto out
|
|
}
|
|
}
|
|
for i := 0; i < len(yyTok3); i += 2 {
|
|
token = int(yyTok3[i+0])
|
|
if token == char {
|
|
token = int(yyTok3[i+1])
|
|
goto out
|
|
}
|
|
}
|
|
|
|
out:
|
|
if token == 0 {
|
|
token = int(yyTok2[1]) /* unknown char */
|
|
}
|
|
if yyDebug >= 3 {
|
|
__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
|
|
}
|
|
return char, token
|
|
}
|
|
|
|
func yyParse(yylex yyLexer) int {
|
|
return yyNewParser().Parse(yylex)
|
|
}
|
|
|
|
func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
|
|
var yyn int
|
|
var yyVAL yySymType
|
|
var yyDollar []yySymType
|
|
_ = yyDollar // silence set and not used
|
|
yyS := yyrcvr.stack[:]
|
|
|
|
Nerrs := 0 /* number of errors */
|
|
Errflag := 0 /* error recovery flag */
|
|
yystate := 0
|
|
yyrcvr.char = -1
|
|
yytoken := -1 // yyrcvr.char translated into internal numbering
|
|
defer func() {
|
|
// Make sure we report no lookahead when not parsing.
|
|
yystate = -1
|
|
yyrcvr.char = -1
|
|
yytoken = -1
|
|
}()
|
|
yyp := -1
|
|
goto yystack
|
|
|
|
ret0:
|
|
return 0
|
|
|
|
ret1:
|
|
return 1
|
|
|
|
yystack:
|
|
/* put a state and value onto the stack */
|
|
if yyDebug >= 4 {
|
|
__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
|
|
}
|
|
|
|
yyp++
|
|
if yyp >= len(yyS) {
|
|
nyys := make([]yySymType, len(yyS)*2)
|
|
copy(nyys, yyS)
|
|
yyS = nyys
|
|
}
|
|
yyS[yyp] = yyVAL
|
|
yyS[yyp].yys = yystate
|
|
|
|
yynewstate:
|
|
yyn = int(yyPact[yystate])
|
|
if yyn <= yyFlag {
|
|
goto yydefault /* simple state */
|
|
}
|
|
if yyrcvr.char < 0 {
|
|
yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
|
|
}
|
|
yyn += yytoken
|
|
if yyn < 0 || yyn >= yyLast {
|
|
goto yydefault
|
|
}
|
|
yyn = int(yyAct[yyn])
|
|
if int(yyChk[yyn]) == yytoken { /* valid shift */
|
|
yyrcvr.char = -1
|
|
yytoken = -1
|
|
yyVAL = yyrcvr.lval
|
|
yystate = yyn
|
|
if Errflag > 0 {
|
|
Errflag--
|
|
}
|
|
goto yystack
|
|
}
|
|
|
|
yydefault:
|
|
/* default state action */
|
|
yyn = int(yyDef[yystate])
|
|
if yyn == -2 {
|
|
if yyrcvr.char < 0 {
|
|
yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
|
|
}
|
|
|
|
/* look through exception table */
|
|
xi := 0
|
|
for {
|
|
if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
|
|
break
|
|
}
|
|
xi += 2
|
|
}
|
|
for xi += 2; ; xi += 2 {
|
|
yyn = int(yyExca[xi+0])
|
|
if yyn < 0 || yyn == yytoken {
|
|
break
|
|
}
|
|
}
|
|
yyn = int(yyExca[xi+1])
|
|
if yyn < 0 {
|
|
goto ret0
|
|
}
|
|
}
|
|
if yyn == 0 {
|
|
/* error ... attempt to resume parsing */
|
|
switch Errflag {
|
|
case 0: /* brand new error */
|
|
yylex.Error(yyErrorMessage(yystate, yytoken))
|
|
Nerrs++
|
|
if yyDebug >= 1 {
|
|
__yyfmt__.Printf("%s", yyStatname(yystate))
|
|
__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
|
|
}
|
|
fallthrough
|
|
|
|
case 1, 2: /* incompletely recovered error ... try again */
|
|
Errflag = 3
|
|
|
|
/* find a state where "error" is a legal shift action */
|
|
for yyp >= 0 {
|
|
yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
|
|
if yyn >= 0 && yyn < yyLast {
|
|
yystate = int(yyAct[yyn]) /* simulate a shift of "error" */
|
|
if int(yyChk[yystate]) == yyErrCode {
|
|
goto yystack
|
|
}
|
|
}
|
|
|
|
/* the current p has no shift on "error", pop stack */
|
|
if yyDebug >= 2 {
|
|
__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
|
|
}
|
|
yyp--
|
|
}
|
|
/* there is no state on the stack with an error shift ... abort */
|
|
goto ret1
|
|
|
|
case 3: /* no shift yet; clobber input char */
|
|
if yyDebug >= 2 {
|
|
__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
|
|
}
|
|
if yytoken == yyEofCode {
|
|
goto ret1
|
|
}
|
|
yyrcvr.char = -1
|
|
yytoken = -1
|
|
goto yynewstate /* try again in the same state */
|
|
}
|
|
}
|
|
|
|
/* reduction by production yyn */
|
|
if yyDebug >= 2 {
|
|
__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
|
|
}
|
|
|
|
yynt := yyn
|
|
yypt := yyp
|
|
_ = yypt // guard against "declared and not used"
|
|
|
|
yyp -= int(yyR2[yyn])
|
|
// yyp is now the index of $0. Perform the default action. Iff the
|
|
// reduced production is ε, $1 is possibly out of range.
|
|
if yyp+1 >= len(yyS) {
|
|
nyys := make([]yySymType, len(yyS)*2)
|
|
copy(nyys, yyS)
|
|
yyS = nyys
|
|
}
|
|
yyVAL = yyS[yyp+1]
|
|
|
|
/* consult goto table to find next state */
|
|
yyn = int(yyR1[yyn])
|
|
yyg := int(yyPgo[yyn])
|
|
yyj := yyg + yyS[yyp].yys + 1
|
|
|
|
if yyj >= yyLast {
|
|
yystate = int(yyAct[yyg])
|
|
} else {
|
|
yystate = int(yyAct[yyj])
|
|
if int(yyChk[yystate]) != -yyn {
|
|
yystate = int(yyAct[yyg])
|
|
}
|
|
}
|
|
// dummy call; replaced with literal code
|
|
switch yynt {
|
|
|
|
case 1:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).generatedParserResult = yyDollar[2].labels
|
|
}
|
|
case 3:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).addParseErrf(posrange.PositionRange{}, "no expression found in input")
|
|
}
|
|
case 4:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).generatedParserResult = yyDollar[2].node
|
|
}
|
|
case 5:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).generatedParserResult = yyDollar[2].node
|
|
}
|
|
case 7:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("", "")
|
|
}
|
|
case 21:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
// Need to consume the position of the first RIGHT_PAREN. It might not exist on garbage input
|
|
// like 'sum (some_metric) by test'
|
|
if len(yylex.(*parser).closingParens) > 1 {
|
|
yylex.(*parser).closingParens = yylex.(*parser).closingParens[1:]
|
|
}
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[2].node, yyDollar[3].node)
|
|
}
|
|
case 22:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
// Need to consume the position of the first RIGHT_PAREN. It might not exist on garbage input
|
|
// like 'sum by test (some_metric)'
|
|
if len(yylex.(*parser).closingParens) > 1 {
|
|
yylex.(*parser).closingParens = yylex.(*parser).closingParens[1:]
|
|
}
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[3].node, yyDollar[2].node)
|
|
}
|
|
case 23:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, yyDollar[2].node)
|
|
}
|
|
case 24:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("aggregation", "")
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, Expressions{})
|
|
}
|
|
case 25:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &AggregateExpr{
|
|
Grouping: yyDollar[2].strings,
|
|
}
|
|
}
|
|
case 26:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &AggregateExpr{
|
|
Grouping: yyDollar[2].strings,
|
|
Without: true,
|
|
}
|
|
}
|
|
case 27:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 28:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 29:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 30:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 31:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 32:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 33:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 34:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 35:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 36:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 37:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 38:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 39:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 40:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 41:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 42:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 44:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.node = &BinaryExpr{
|
|
VectorMatching: &VectorMatching{Card: CardOneToOne},
|
|
}
|
|
}
|
|
case 45:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &BinaryExpr{
|
|
VectorMatching: &VectorMatching{Card: CardOneToOne},
|
|
ReturnBool: true,
|
|
}
|
|
}
|
|
case 46:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[1].node
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
|
|
}
|
|
case 47:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[1].node
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.On = true
|
|
}
|
|
case 50:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[1].node
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardManyToOne
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
|
|
}
|
|
case 51:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[1].node
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardOneToMany
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
|
|
}
|
|
case 52:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.strings = yyDollar[2].strings
|
|
}
|
|
case 53:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.strings = yyDollar[2].strings
|
|
}
|
|
case 54:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.strings = []string{}
|
|
}
|
|
case 55:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "\"(\"")
|
|
yyVAL.strings = nil
|
|
}
|
|
case 56:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val)
|
|
}
|
|
case 57:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.strings = []string{yyDollar[1].item.Val}
|
|
}
|
|
case 58:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"")
|
|
yyVAL.strings = yyDollar[1].strings
|
|
}
|
|
case 59:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
if !model.LabelName(yyDollar[1].item.Val).IsValid() {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", yyDollar[1].item.Val)
|
|
}
|
|
yyVAL.item = yyDollar[1].item
|
|
}
|
|
case 60:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
unquoted := yylex.(*parser).unquoteString(yyDollar[1].item.Val)
|
|
if !model.LabelName(unquoted).IsValid() {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", unquoted)
|
|
}
|
|
yyVAL.item = yyDollar[1].item
|
|
yyVAL.item.Pos++
|
|
yyVAL.item.Val = unquoted
|
|
}
|
|
case 61:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "label")
|
|
yyVAL.item = Item{}
|
|
}
|
|
case 62:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
fn, exist := getFunction(yyDollar[1].item.Val, yylex.(*parser).functions)
|
|
if !exist {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "unknown function with name %q", yyDollar[1].item.Val)
|
|
}
|
|
if fn != nil && fn.Experimental && !EnableExperimentalFunctions {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "function %q is not enabled", yyDollar[1].item.Val)
|
|
}
|
|
yyVAL.node = &Call{
|
|
Func: fn,
|
|
Args: yyDollar[2].node.(Expressions),
|
|
PosRange: posrange.PositionRange{
|
|
Start: yyDollar[1].item.Pos,
|
|
End: yylex.(*parser).closingParens[0],
|
|
},
|
|
}
|
|
yylex.(*parser).closingParens = yylex.(*parser).closingParens[1:]
|
|
}
|
|
case 63:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
}
|
|
case 64:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = Expressions{}
|
|
}
|
|
case 65:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
|
|
}
|
|
case 66:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
|
|
}
|
|
case 67:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "trailing commas not allowed in function call args")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 68:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)}
|
|
yylex.(*parser).closingParens = yylex.(*parser).closingParens[1:]
|
|
}
|
|
case 69:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
if numLit, ok := yyDollar[1].node.(*NumberLiteral); ok {
|
|
if numLit.Val <= 0 {
|
|
yylex.(*parser).addParseErrf(numLit.PositionRange(), "duration must be greater than 0")
|
|
yyVAL.node = &NumberLiteral{Val: 0} // Return 0 on error.
|
|
break
|
|
}
|
|
yyVAL.node = yyDollar[1].node
|
|
break
|
|
}
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 70:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
yylex.(*parser).addOffset(yyDollar[1].node, time.Duration(numLit.Val*1000)*time.Millisecond)
|
|
yyVAL.node = yyDollar[1].node
|
|
break
|
|
}
|
|
yylex.(*parser).addOffsetExpr(yyDollar[1].node, yyDollar[3].node.(*DurationExpr))
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 71:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("offset", "number or duration")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 72:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 73:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 74:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("@", "timestamp")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 77:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
var errMsg string
|
|
vs, ok := yyDollar[1].node.(*VectorSelector)
|
|
if !ok {
|
|
errMsg = "ranges only allowed for vector selectors"
|
|
} else if vs.OriginalOffset != 0 {
|
|
errMsg = "no offset modifiers allowed before range"
|
|
} else if vs.Timestamp != nil {
|
|
errMsg = "no @ modifiers allowed before range"
|
|
}
|
|
|
|
if errMsg != "" {
|
|
errRange := mergeRanges(&yyDollar[2].item, &yyDollar[4].item)
|
|
yylex.(*parser).addParseErrf(errRange, "%s", errMsg)
|
|
}
|
|
|
|
var rangeNl time.Duration
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
rangeNl = time.Duration(numLit.Val*1000) * time.Millisecond
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
yyVAL.node = &MatrixSelector{
|
|
VectorSelector: yyDollar[1].node.(Expr),
|
|
Range: rangeNl,
|
|
RangeExpr: rangeExpr,
|
|
EndPos: yylex.(*parser).lastClosing,
|
|
}
|
|
}
|
|
case 78:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
{
|
|
var rangeNl time.Duration
|
|
var stepNl time.Duration
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
rangeNl = time.Duration(numLit.Val*1000) * time.Millisecond
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
if numLit, ok := yyDollar[5].node.(*NumberLiteral); ok {
|
|
stepNl = time.Duration(numLit.Val*1000) * time.Millisecond
|
|
}
|
|
stepExpr, _ := yyDollar[5].node.(*DurationExpr)
|
|
yyVAL.node = &SubqueryExpr{
|
|
Expr: yyDollar[1].node.(Expr),
|
|
Range: rangeNl,
|
|
RangeExpr: rangeExpr,
|
|
Step: stepNl,
|
|
StepExpr: stepExpr,
|
|
EndPos: yyDollar[6].item.Pos + 1,
|
|
}
|
|
}
|
|
case 79:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
var rangeNl time.Duration
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
rangeNl = time.Duration(numLit.Val*1000) * time.Millisecond
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
yyVAL.node = &SubqueryExpr{
|
|
Expr: yyDollar[1].node.(Expr),
|
|
Range: rangeNl,
|
|
RangeExpr: rangeExpr,
|
|
EndPos: yyDollar[5].item.Pos + 1,
|
|
}
|
|
}
|
|
case 80:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery selector", "\"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 81:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery selector", "number or duration or \"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 82:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 83:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery selector", "number or duration")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 84:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
if nl, ok := yyDollar[2].node.(*NumberLiteral); ok {
|
|
if yyDollar[1].item.Typ == SUB {
|
|
nl.Val *= -1
|
|
}
|
|
nl.PosRange.Start = yyDollar[1].item.Pos
|
|
yyVAL.node = nl
|
|
} else {
|
|
yyVAL.node = &UnaryExpr{Op: yyDollar[1].item.Typ, Expr: yyDollar[2].node.(Expr), StartPos: yyDollar[1].item.Pos}
|
|
}
|
|
}
|
|
case 85:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
vs := yyDollar[2].node.(*VectorSelector)
|
|
vs.PosRange = mergeRanges(&yyDollar[1].item, vs)
|
|
vs.Name = yyDollar[1].item.Val
|
|
yylex.(*parser).assembleVectorSelector(vs)
|
|
yyVAL.node = vs
|
|
}
|
|
case 86:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
vs := &VectorSelector{
|
|
Name: yyDollar[1].item.Val,
|
|
LabelMatchers: []*labels.Matcher{},
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
}
|
|
yylex.(*parser).assembleVectorSelector(vs)
|
|
yyVAL.node = vs
|
|
}
|
|
case 87:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
vs := yyDollar[1].node.(*VectorSelector)
|
|
yylex.(*parser).assembleVectorSelector(vs)
|
|
yyVAL.node = vs
|
|
}
|
|
case 88:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: yyDollar[2].matchers,
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
|
|
}
|
|
}
|
|
case 89:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: yyDollar[2].matchers,
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
|
|
}
|
|
}
|
|
case 90:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: []*labels.Matcher{},
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
|
|
}
|
|
}
|
|
case 91:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
if yyDollar[1].matchers != nil {
|
|
yyVAL.matchers = append(yyDollar[1].matchers, yyDollar[3].matcher)
|
|
} else {
|
|
yyVAL.matchers = yyDollar[1].matchers
|
|
}
|
|
}
|
|
case 92:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
|
|
}
|
|
case 93:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
|
|
yyVAL.matchers = yyDollar[1].matchers
|
|
}
|
|
case 94:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
|
|
}
|
|
case 95:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
|
|
}
|
|
case 96:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newMetricNameMatcher(yyDollar[1].item)
|
|
}
|
|
case 97:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "string")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 98:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "string")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 99:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "label matching operator")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 100:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 101:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
b := labels.NewBuilder(yyDollar[2].labels)
|
|
b.Set(labels.MetricName, yyDollar[1].item.Val)
|
|
yyVAL.labels = b.Labels()
|
|
}
|
|
case 102:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.labels = yyDollar[1].labels
|
|
}
|
|
case 127:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New(yyDollar[2].lblList...)
|
|
}
|
|
case 128:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New(yyDollar[2].lblList...)
|
|
}
|
|
case 129:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New()
|
|
}
|
|
case 130:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New()
|
|
}
|
|
case 131:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label)
|
|
}
|
|
case 132:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.lblList = []labels.Label{yyDollar[1].label}
|
|
}
|
|
case 133:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
|
|
yyVAL.lblList = yyDollar[1].lblList
|
|
}
|
|
case 134:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
|
|
}
|
|
case 135:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
|
|
}
|
|
case 136:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val}
|
|
}
|
|
case 137:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "string")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 138:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "string")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 139:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "\"=\"")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 140:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "identifier or \"}\"")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 141:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).generatedParserResult = &seriesDescription{
|
|
labels: yyDollar[1].labels,
|
|
values: yyDollar[2].series,
|
|
}
|
|
}
|
|
case 142:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
}
|
|
case 143:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
|
|
}
|
|
case 144:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.series = yyDollar[1].series
|
|
}
|
|
case 145:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("series values", "")
|
|
yyVAL.series = nil
|
|
}
|
|
case 146:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Omitted: true}}
|
|
}
|
|
case 147:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
for i := uint64(0); i < yyDollar[3].uint; i++ {
|
|
yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true})
|
|
}
|
|
}
|
|
case 148:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
|
|
}
|
|
case 149:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
// Add an additional value for time 0, which we ignore in tests.
|
|
for i := uint64(0); i <= yyDollar[3].uint; i++ {
|
|
yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
|
|
}
|
|
}
|
|
case 150:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
// Add an additional value for time 0, which we ignore in tests.
|
|
for i := uint64(0); i <= yyDollar[4].uint; i++ {
|
|
yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
|
|
yyDollar[1].float += yyDollar[2].float
|
|
}
|
|
}
|
|
case 151:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}}
|
|
}
|
|
case 152:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
// Add an additional value for time 0, which we ignore in tests.
|
|
for i := uint64(0); i <= yyDollar[3].uint; i++ {
|
|
yyVAL.series = append(yyVAL.series, SequenceValue{Histogram: yyDollar[1].histogram})
|
|
//$1 += $2
|
|
}
|
|
}
|
|
case 153:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
val, err := yylex.(*parser).histogramsIncreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
|
|
if err != nil {
|
|
yylex.(*parser).addSemanticError(err)
|
|
}
|
|
yyVAL.series = val
|
|
}
|
|
case 154:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
val, err := yylex.(*parser).histogramsDecreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
|
|
if err != nil {
|
|
yylex.(*parser).addSemanticError(err)
|
|
}
|
|
yyVAL.series = val
|
|
}
|
|
case 155:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
if yyDollar[1].item.Val != "stale" {
|
|
yylex.(*parser).unexpected("series values", "number or \"stale\"")
|
|
}
|
|
yyVAL.float = math.Float64frombits(value.StaleNaN)
|
|
}
|
|
case 158:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
|
|
}
|
|
case 159:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
|
|
}
|
|
case 160:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
m := yylex.(*parser).newMap()
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
|
|
}
|
|
case 161:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
m := yylex.(*parser).newMap()
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
|
|
}
|
|
case 162:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
|
|
}
|
|
case 163:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yyDollar[1].descriptors
|
|
}
|
|
case 164:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
|
|
}
|
|
case 165:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["schema"] = yyDollar[3].int
|
|
}
|
|
case 166:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["sum"] = yyDollar[3].float
|
|
}
|
|
case 167:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["count"] = yyDollar[3].float
|
|
}
|
|
case 168:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["z_bucket"] = yyDollar[3].float
|
|
}
|
|
case 169:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
|
|
}
|
|
case 170:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set
|
|
}
|
|
case 171:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
|
|
}
|
|
case 172:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["offset"] = yyDollar[3].int
|
|
}
|
|
case 173:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
|
|
}
|
|
case 174:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["n_offset"] = yyDollar[3].int
|
|
}
|
|
case 175:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item
|
|
}
|
|
case 176:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = yyDollar[2].bucket_set
|
|
}
|
|
case 177:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = yyDollar[2].bucket_set
|
|
}
|
|
case 178:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
|
|
}
|
|
case 179:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = []float64{yyDollar[1].float}
|
|
}
|
|
case 234:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &NumberLiteral{
|
|
Val: yylex.(*parser).number(yyDollar[1].item.Val),
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
}
|
|
}
|
|
case 235:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
var err error
|
|
var dur time.Duration
|
|
dur, err = parseDuration(yyDollar[1].item.Val)
|
|
if err != nil {
|
|
yylex.(*parser).addParseErr(yyDollar[1].item.PositionRange(), err)
|
|
}
|
|
yyVAL.node = &NumberLiteral{
|
|
Val: dur.Seconds(),
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
Duration: true,
|
|
}
|
|
}
|
|
case 236:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
|
|
}
|
|
case 237:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
var err error
|
|
var dur time.Duration
|
|
dur, err = parseDuration(yyDollar[1].item.Val)
|
|
if err != nil {
|
|
yylex.(*parser).addParseErr(yyDollar[1].item.PositionRange(), err)
|
|
}
|
|
yyVAL.float = dur.Seconds()
|
|
}
|
|
case 238:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.float = yyDollar[2].float
|
|
}
|
|
case 239:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.float = -yyDollar[2].float
|
|
}
|
|
case 242:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
var err error
|
|
yyVAL.uint, err = strconv.ParseUint(yyDollar[1].item.Val, 10, 64)
|
|
if err != nil {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err)
|
|
}
|
|
}
|
|
case 243:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.int = -int64(yyDollar[2].uint)
|
|
}
|
|
case 244:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.int = int64(yyDollar[1].uint)
|
|
}
|
|
case 245:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &StringLiteral{
|
|
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
}
|
|
}
|
|
case 246:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.item = Item{
|
|
Typ: METRIC_IDENTIFIER,
|
|
Pos: yyDollar[1].item.PositionRange().Start,
|
|
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
|
|
}
|
|
}
|
|
case 247:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.strings = nil
|
|
}
|
|
case 249:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
nl := yyDollar[1].node.(*NumberLiteral)
|
|
if nl.Val > 1<<63/1e9 || nl.Val < -(1<<63)/1e9 {
|
|
yylex.(*parser).addParseErrf(nl.PosRange, "duration out of range")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
yyVAL.node = nl
|
|
}
|
|
case 250:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
switch expr := yyDollar[2].node.(type) {
|
|
case *NumberLiteral:
|
|
if yyDollar[1].item.Typ == SUB {
|
|
expr.Val *= -1
|
|
}
|
|
if expr.Val > 1<<63/1e9 || expr.Val < -(1<<63)/1e9 {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "duration out of range")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
expr.PosRange.Start = yyDollar[1].item.Pos
|
|
yyVAL.node = expr
|
|
break
|
|
case *DurationExpr:
|
|
if yyDollar[1].item.Typ == SUB {
|
|
yyVAL.node = &DurationExpr{
|
|
Op: SUB,
|
|
RHS: expr,
|
|
StartPos: yyDollar[1].item.Pos,
|
|
}
|
|
break
|
|
}
|
|
yyVAL.node = expr
|
|
break
|
|
default:
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "expected number literal or duration expression")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
}
|
|
case 251:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
yyVAL.node = &DurationExpr{Op: ADD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 252:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
yyVAL.node = &DurationExpr{Op: SUB, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 253:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
yyVAL.node = &DurationExpr{Op: MUL, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 254:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
if nl, ok := yyDollar[3].node.(*NumberLiteral); ok && nl.Val == 0 {
|
|
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "division by zero")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
yyVAL.node = &DurationExpr{Op: DIV, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 255:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
if nl, ok := yyDollar[3].node.(*NumberLiteral); ok && nl.Val == 0 {
|
|
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "modulo by zero")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
yyVAL.node = &DurationExpr{Op: MOD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 256:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
|
|
yyVAL.node = &DurationExpr{Op: POW, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
|
|
}
|
|
case 258:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).experimentalDurationExpr(yyDollar[2].node.(Expr))
|
|
if durationExpr, ok := yyDollar[2].node.(*DurationExpr); ok {
|
|
durationExpr.Wrapped = true
|
|
yyVAL.node = durationExpr
|
|
break
|
|
}
|
|
yyVAL.node = yyDollar[2].node
|
|
}
|
|
}
|
|
goto yystack /* stack new state and value */
|
|
}
|