diff --git a/promql/engine.go b/promql/engine.go index eac3b64093..d038df6f1c 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -2824,7 +2824,8 @@ func (ev *evaluator) VectorBinop(op parser.ItemType, lhs, rhs Vector, matching * if matching.Card == parser.CardManyToMany { panic("many-to-many only allowed for set operators") } - if len(lhs) == 0 || len(rhs) == 0 { + if (len(lhs) == 0 && len(rhs) == 0) || + ((len(lhs) == 0 || len(rhs) == 0) && matching.FillValues.Rhs == nil && matching.FillValues.Lhs == nil) { return nil, nil // Short-circuit: nothing is going to match. } @@ -2872,17 +2873,9 @@ func (ev *evaluator) VectorBinop(op parser.ItemType, lhs, rhs Vector, matching * } matchedSigs := enh.matchedSigs - // For all lhs samples find a respective rhs sample and perform - // the binary operation. var lastErr error - for i, ls := range lhs { - sigOrd := lhsh[i].sigOrdinal - - rs, found := rightSigs[sigOrd] // Look for a match in the rhs Vector. - if !found { - continue - } + doBinOp := func(ls Sample, rs Sample, sigOrd int) { // Account for potentially swapped sidedness. fl, fr := ls.F, rs.F hl, hr := ls.H, rs.H @@ -2893,7 +2886,7 @@ func (ev *evaluator) VectorBinop(op parser.ItemType, lhs, rhs Vector, matching * floatValue, histogramValue, keep, info, err := vectorElemBinop(op, fl, fr, hl, hr, pos) if err != nil { lastErr = err - continue + return } if info != nil { lastErr = info @@ -2907,7 +2900,7 @@ func (ev *evaluator) VectorBinop(op parser.ItemType, lhs, rhs Vector, matching * floatValue = 0.0 } case !keep: - continue + return } metric := resultMetric(ls.Metric, rs.Metric, op, matching, enh) if !ev.enableDelayedNameRemoval && returnBool { @@ -2941,6 +2934,44 @@ func (ev *evaluator) VectorBinop(op parser.ItemType, lhs, rhs Vector, matching * DropName: returnBool, }) } + + // For all lhs samples find a respective rhs sample and perform + // the binary operation. + for i, ls := range lhs { + fmt.Println("processing lhs sample:", ls.Metric.String()) + sigOrd := lhsh[i].sigOrdinal + + rs, found := rightSigs[sigOrd] // Look for a match in the rhs Vector. + if !found { + if fill := matching.FillValues.Rhs; fill != nil { + fmt.Println("using fill rhs value") + rs = ls + // TODO: Handle histogram fallback values? + rs.F = *fill + } else { + fmt.Println("no match found, continuing") + continue + } + } + + doBinOp(ls, rs, sigOrd) + } + + // For any rhs samples which have not been matched, check if we need to + // perform the operation with a fill value from the lhs. + if fill := matching.FillValues.Lhs; fill != nil { + for sigOrd, rs := range rightSigs { + if _, matched := matchedSigs[sigOrd]; matched { + continue // Already matched. + } + ls := rs + // TODO: Handle histogram fallback values? + ls.F = *fill + + doBinOp(ls, rs, sigOrd) + } + } + return enh.Out, lastErr } diff --git a/promql/parser/ast.go b/promql/parser/ast.go index 67ecb190fe..e9cb17cc36 100644 --- a/promql/parser/ast.go +++ b/promql/parser/ast.go @@ -318,6 +318,19 @@ type VectorMatching struct { // Include contains additional labels that should be included in // the result from the side with the lower cardinality. Include []string + // Fill-in values to use when a series from one side does not find a match on the other side. + FillValues VectorMatchFillValues +} + +// VectorMatchFillValues contains the fill values to use for Vector matching +// when one side does not find a match on the other side. +// When a fill value is nil, no fill is applied for that side, and there +// is no output for the match group if there is no match. +type VectorMatchFillValues struct { + // Rhs is the fill value to use for the right-hand side. + Rhs *float64 + // Lhs is the fill value to use for the left-hand side. + Lhs *float64 } // Visitor allows visiting a Node and its child nodes. The Visit method is diff --git a/promql/parser/generated_parser.y b/promql/parser/generated_parser.y index d9bbb10b28..081e26af2e 100644 --- a/promql/parser/generated_parser.y +++ b/promql/parser/generated_parser.y @@ -139,6 +139,9 @@ BOOL BY GROUP_LEFT GROUP_RIGHT +FILL +LFILL +RFILL IGNORING OFFSET SMOOTHED @@ -189,7 +192,7 @@ START_METRIC_SELECTOR %type int %type uint %type number series_value signed_number signed_or_unsigned_number -%type step_invariant_expr aggregate_expr aggregate_modifier bin_modifier binary_expr bool_modifier expr function_call function_call_args function_call_body group_modifiers label_matchers matrix_selector number_duration_literal offset_expr anchored_expr smoothed_expr on_or_ignoring paren_expr string_literal subquery_expr unary_expr vector_selector duration_expr paren_duration_expr positive_duration_expr offset_duration_expr +%type step_invariant_expr aggregate_expr aggregate_modifier bin_modifier fallback_modifiers binary_expr bool_modifier expr function_call function_call_args function_call_body group_modifiers label_matchers matrix_selector number_duration_literal offset_expr anchored_expr smoothed_expr on_or_ignoring paren_expr string_literal subquery_expr unary_expr vector_selector duration_expr paren_duration_expr positive_duration_expr offset_duration_expr %start start @@ -301,7 +304,7 @@ binary_expr : expr ADD bin_modifier expr { $$ = yylex.(*parser).newBinar // Using left recursion for the modifier rules, helps to keep the parser stack small and // reduces allocations. -bin_modifier : group_modifiers; +bin_modifier : fallback_modifiers; bool_modifier : /* empty */ { $$ = &BinaryExpr{ @@ -345,6 +348,28 @@ group_modifiers: bool_modifier /* empty */ } ; +fallback_modifiers: group_modifiers /* empty */ + | group_modifiers FILL LEFT_PAREN NUMBER RIGHT_PAREN + { + $$ = $1 + fill := yylex.(*parser).number($4.Val) + $$.(*BinaryExpr).VectorMatching.FillValues.Lhs = &fill + $$.(*BinaryExpr).VectorMatching.FillValues.Rhs = &fill + } + | group_modifiers LFILL LEFT_PAREN NUMBER RIGHT_PAREN + { + $$ = $1 + fill := yylex.(*parser).number($4.Val) + $$.(*BinaryExpr).VectorMatching.FillValues.Lhs = &fill + } + | group_modifiers RFILL LEFT_PAREN NUMBER RIGHT_PAREN + { + $$ = $1 + fill := yylex.(*parser).number($4.Val) + $$.(*BinaryExpr).VectorMatching.FillValues.Rhs = &fill + } + ; + grouping_labels : LEFT_PAREN grouping_label_list RIGHT_PAREN { $$ = $2 } @@ -953,7 +978,7 @@ counter_reset_hint : UNKNOWN_COUNTER_RESET | COUNTER_RESET | NOT_COUNTER_RESET | aggregate_op : AVG | BOTTOMK | COUNT | COUNT_VALUES | GROUP | MAX | MIN | QUANTILE | STDDEV | STDVAR | SUM | TOPK | LIMITK | LIMIT_RATIO; // Inside of grouping options label names can be recognized as keywords by the lexer. This is a list of keywords that could also be a label name. -maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP | ANCHORED | SMOOTHED; +maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | FILL | LFILL | RFILL | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP | ANCHORED | SMOOTHED; unary_op : ADD | SUB; @@ -1141,7 +1166,7 @@ offset_duration_expr : number_duration_literal } | duration_expr ; - + min_max: MIN | MAX ; duration_expr : number_duration_literal @@ -1248,14 +1273,14 @@ duration_expr : number_duration_literal ; paren_duration_expr : LEFT_PAREN duration_expr RIGHT_PAREN - { + { yylex.(*parser).experimentalDurationExpr($2.(Expr)) if durationExpr, ok := $2.(*DurationExpr); ok { durationExpr.Wrapped = true $$ = durationExpr break } - $$ = $2 + $$ = $2 } ; diff --git a/promql/parser/generated_parser.y.go b/promql/parser/generated_parser.y.go index eb4b32129a..d4da57c661 100644 --- a/promql/parser/generated_parser.y.go +++ b/promql/parser/generated_parser.y.go @@ -113,30 +113,33 @@ const BOOL = 57420 const BY = 57421 const GROUP_LEFT = 57422 const GROUP_RIGHT = 57423 -const IGNORING = 57424 -const OFFSET = 57425 -const SMOOTHED = 57426 -const ANCHORED = 57427 -const ON = 57428 -const WITHOUT = 57429 -const keywordsEnd = 57430 -const preprocessorStart = 57431 -const START = 57432 -const END = 57433 -const STEP = 57434 -const preprocessorEnd = 57435 -const counterResetHintsStart = 57436 -const UNKNOWN_COUNTER_RESET = 57437 -const COUNTER_RESET = 57438 -const NOT_COUNTER_RESET = 57439 -const GAUGE_TYPE = 57440 -const counterResetHintsEnd = 57441 -const startSymbolsStart = 57442 -const START_METRIC = 57443 -const START_SERIES_DESCRIPTION = 57444 -const START_EXPRESSION = 57445 -const START_METRIC_SELECTOR = 57446 -const startSymbolsEnd = 57447 +const FILL = 57424 +const LFILL = 57425 +const RFILL = 57426 +const IGNORING = 57427 +const OFFSET = 57428 +const SMOOTHED = 57429 +const ANCHORED = 57430 +const ON = 57431 +const WITHOUT = 57432 +const keywordsEnd = 57433 +const preprocessorStart = 57434 +const START = 57435 +const END = 57436 +const STEP = 57437 +const preprocessorEnd = 57438 +const counterResetHintsStart = 57439 +const UNKNOWN_COUNTER_RESET = 57440 +const COUNTER_RESET = 57441 +const NOT_COUNTER_RESET = 57442 +const GAUGE_TYPE = 57443 +const counterResetHintsEnd = 57444 +const startSymbolsStart = 57445 +const START_METRIC = 57446 +const START_SERIES_DESCRIPTION = 57447 +const START_EXPRESSION = 57448 +const START_METRIC_SELECTOR = 57449 +const startSymbolsEnd = 57450 var yyToknames = [...]string{ "$end", @@ -220,6 +223,9 @@ var yyToknames = [...]string{ "BY", "GROUP_LEFT", "GROUP_RIGHT", + "FILL", + "LFILL", + "RFILL", "IGNORING", "OFFSET", "SMOOTHED", @@ -257,375 +263,385 @@ var yyExca = [...]int16{ 1, -1, -2, 0, -1, 40, - 1, 149, - 10, 149, - 24, 149, + 1, 153, + 10, 153, + 24, 153, -2, 0, -1, 70, - 2, 192, - 15, 192, - 79, 192, - 87, 192, - -2, 107, - -1, 71, - 2, 193, - 15, 193, - 79, 193, - 87, 193, - -2, 108, - -1, 72, - 2, 194, - 15, 194, - 79, 194, - 87, 194, - -2, 110, - -1, 73, - 2, 195, - 15, 195, - 79, 195, - 87, 195, - -2, 111, - -1, 74, 2, 196, 15, 196, 79, 196, - 87, 196, - -2, 112, - -1, 75, + 90, 196, + -2, 111, + -1, 71, 2, 197, 15, 197, 79, 197, - 87, 197, - -2, 117, - -1, 76, + 90, 197, + -2, 112, + -1, 72, 2, 198, 15, 198, 79, 198, - 87, 198, - -2, 119, - -1, 77, + 90, 198, + -2, 114, + -1, 73, 2, 199, 15, 199, 79, 199, - 87, 199, - -2, 121, - -1, 78, + 90, 199, + -2, 115, + -1, 74, 2, 200, 15, 200, 79, 200, - 87, 200, - -2, 122, - -1, 79, + 90, 200, + -2, 116, + -1, 75, 2, 201, 15, 201, 79, 201, - 87, 201, - -2, 123, - -1, 80, + 90, 201, + -2, 121, + -1, 76, 2, 202, 15, 202, 79, 202, - 87, 202, - -2, 124, - -1, 81, + 90, 202, + -2, 123, + -1, 77, 2, 203, 15, 203, 79, 203, - 87, 203, + 90, 203, -2, 125, - -1, 82, + -1, 78, 2, 204, 15, 204, 79, 204, - 87, 204, - -2, 129, - -1, 83, + 90, 204, + -2, 126, + -1, 79, 2, 205, 15, 205, 79, 205, - 87, 205, - -2, 130, + 90, 205, + -2, 127, + -1, 80, + 2, 206, + 15, 206, + 79, 206, + 90, 206, + -2, 128, + -1, 81, + 2, 207, + 15, 207, + 79, 207, + 90, 207, + -2, 129, + -1, 82, + 2, 208, + 15, 208, + 79, 208, + 90, 208, + -2, 133, + -1, 83, + 2, 209, + 15, 209, + 79, 209, + 90, 209, + -2, 134, -1, 135, - 41, 270, - 42, 270, - 52, 270, - 53, 270, - 57, 270, + 41, 277, + 42, 277, + 52, 277, + 53, 277, + 57, 277, -2, 22, - -1, 245, - 9, 257, - 12, 257, - 13, 257, - 18, 257, - 19, 257, - 25, 257, - 41, 257, - 47, 257, - 48, 257, - 51, 257, - 57, 257, - 62, 257, - 63, 257, - 64, 257, - 65, 257, - 66, 257, - 67, 257, - 68, 257, - 69, 257, - 70, 257, - 71, 257, - 72, 257, - 73, 257, - 74, 257, - 75, 257, - 79, 257, - 83, 257, - 84, 257, - 85, 257, - 87, 257, - 90, 257, - 91, 257, - 92, 257, + -1, 249, + 9, 264, + 12, 264, + 13, 264, + 18, 264, + 19, 264, + 25, 264, + 41, 264, + 47, 264, + 48, 264, + 51, 264, + 57, 264, + 62, 264, + 63, 264, + 64, 264, + 65, 264, + 66, 264, + 67, 264, + 68, 264, + 69, 264, + 70, 264, + 71, 264, + 72, 264, + 73, 264, + 74, 264, + 75, 264, + 79, 264, + 82, 264, + 83, 264, + 84, 264, + 86, 264, + 87, 264, + 88, 264, + 90, 264, + 93, 264, + 94, 264, + 95, 264, -2, 0, - -1, 246, - 9, 257, - 12, 257, - 13, 257, - 18, 257, - 19, 257, - 25, 257, - 41, 257, - 47, 257, - 48, 257, - 51, 257, - 57, 257, - 62, 257, - 63, 257, - 64, 257, - 65, 257, - 66, 257, - 67, 257, - 68, 257, - 69, 257, - 70, 257, - 71, 257, - 72, 257, - 73, 257, - 74, 257, - 75, 257, - 79, 257, - 83, 257, - 84, 257, - 85, 257, - 87, 257, - 90, 257, - 91, 257, - 92, 257, + -1, 250, + 9, 264, + 12, 264, + 13, 264, + 18, 264, + 19, 264, + 25, 264, + 41, 264, + 47, 264, + 48, 264, + 51, 264, + 57, 264, + 62, 264, + 63, 264, + 64, 264, + 65, 264, + 66, 264, + 67, 264, + 68, 264, + 69, 264, + 70, 264, + 71, 264, + 72, 264, + 73, 264, + 74, 264, + 75, 264, + 79, 264, + 82, 264, + 83, 264, + 84, 264, + 86, 264, + 87, 264, + 88, 264, + 90, 264, + 93, 264, + 94, 264, + 95, 264, -2, 0, } const yyPrivate = 57344 -const yyLast = 1071 +const yyLast = 1107 var yyAct = [...]int16{ - 57, 182, 401, 399, 185, 406, 278, 237, 193, 332, - 93, 47, 346, 141, 68, 221, 91, 413, 414, 415, - 416, 127, 128, 64, 156, 186, 66, 126, 347, 326, - 129, 243, 122, 125, 130, 244, 245, 246, 119, 122, - 118, 124, 123, 121, 327, 151, 124, 118, 214, 123, - 121, 396, 373, 124, 120, 364, 395, 366, 323, 385, - 328, 354, 352, 133, 216, 135, 6, 98, 100, 101, - 364, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 324, 112, 113, 117, 99, 42, 131, 315, 112, - 144, 117, 136, 400, 241, 350, 191, 143, 128, 349, - 142, 137, 270, 314, 322, 320, 129, 268, 317, 114, - 116, 115, 192, 95, 233, 178, 114, 116, 115, 195, - 199, 200, 201, 202, 203, 204, 174, 321, 319, 177, - 196, 196, 196, 196, 196, 196, 196, 232, 175, 217, - 267, 130, 197, 197, 197, 197, 197, 197, 197, 132, - 196, 134, 138, 205, 390, 407, 239, 207, 210, 227, - 206, 223, 197, 229, 428, 2, 3, 4, 5, 360, - 190, 194, 429, 389, 359, 7, 266, 240, 61, 86, - 189, 231, 269, 427, 181, 150, 426, 262, 60, 358, - 264, 119, 122, 196, 425, 209, 271, 272, 266, 197, - 152, 225, 123, 121, 230, 197, 124, 120, 208, 196, - 84, 224, 226, 119, 122, 38, 384, 213, 222, 383, - 223, 197, 10, 382, 123, 121, 85, 235, 124, 120, - 143, 190, 88, 318, 238, 381, 180, 179, 241, 242, - 380, 189, 379, 378, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 348, - 225, 198, 325, 191, 94, 377, 351, 376, 97, 353, - 224, 226, 344, 345, 92, 195, 375, 196, 374, 192, - 196, 39, 228, 355, 61, 55, 196, 95, 1, 197, - 181, 87, 197, 149, 60, 148, 172, 69, 197, 54, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 417, 84, 362, 65, 53, - 190, 9, 9, 144, 52, 51, 363, 365, 196, 367, - 189, 155, 85, 142, 275, 368, 369, 184, 274, 50, - 197, 140, 180, 179, 190, 49, 95, 48, 372, 119, - 122, 386, 191, 273, 189, 8, 46, 153, 211, 40, - 123, 121, 196, 371, 124, 120, 392, 198, 192, 394, - 370, 388, 94, 45, 197, 154, 191, 402, 403, 404, - 398, 44, 92, 405, 43, 409, 408, 411, 410, 418, - 90, 281, 192, 56, 236, 95, 422, 316, 419, 420, - 196, 291, 361, 421, 393, 119, 122, 297, 329, 423, - 96, 391, 197, 234, 280, 276, 123, 121, 424, 89, - 124, 120, 412, 119, 122, 187, 188, 183, 431, 196, - 279, 119, 122, 58, 123, 121, 293, 294, 124, 120, - 295, 197, 123, 121, 139, 0, 124, 120, 308, 0, - 0, 282, 284, 286, 287, 288, 296, 298, 301, 302, - 303, 304, 305, 309, 310, 0, 281, 283, 285, 289, - 290, 292, 299, 313, 312, 300, 291, 0, 220, 306, - 307, 311, 297, 219, 0, 0, 277, 387, 0, 280, - 147, 0, 190, 61, 0, 146, 218, 0, 0, 265, - 0, 0, 189, 60, 430, 0, 119, 122, 145, 0, - 0, 293, 294, 0, 0, 295, 0, 123, 121, 0, - 0, 124, 120, 308, 191, 84, 282, 284, 286, 287, - 288, 296, 298, 301, 302, 303, 304, 305, 309, 310, - 192, 85, 283, 285, 289, 290, 292, 299, 313, 312, - 300, 180, 179, 0, 306, 307, 311, 61, 0, 118, - 59, 86, 0, 62, 0, 0, 22, 60, 0, 0, - 212, 0, 0, 63, 0, 0, 263, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 100, 0, 84, - 0, 0, 0, 0, 0, 18, 19, 109, 110, 20, - 0, 112, 113, 117, 99, 85, 0, 0, 0, 0, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 0, 0, 0, 13, 114, 116, - 115, 24, 37, 36, 215, 30, 0, 0, 31, 32, - 67, 61, 41, 0, 59, 86, 0, 62, 0, 0, - 22, 60, 0, 119, 122, 0, 0, 63, 0, 0, - 0, 0, 0, 0, 123, 121, 0, 0, 124, 120, - 0, 357, 0, 84, 0, 0, 0, 0, 61, 18, - 19, 0, 0, 20, 181, 0, 0, 0, 60, 85, - 356, 0, 0, 0, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 0, 0, - 84, 13, 0, 0, 0, 24, 37, 36, 0, 30, - 0, 0, 31, 32, 67, 61, 85, 0, 59, 86, - 0, 62, 331, 0, 22, 60, 180, 179, 0, 330, - 0, 63, 0, 334, 335, 333, 340, 342, 339, 341, - 336, 337, 338, 343, 0, 0, 0, 84, 0, 0, - 0, 198, 0, 18, 19, 0, 0, 20, 0, 0, - 0, 0, 0, 85, 0, 0, 0, 0, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 17, 86, 0, 13, 0, 0, 22, 24, - 37, 36, 397, 30, 0, 0, 31, 32, 67, 0, - 0, 0, 0, 334, 335, 333, 340, 342, 339, 341, - 336, 337, 338, 343, 0, 0, 0, 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, 17, 38, 0, 13, - 0, 0, 22, 24, 37, 36, 0, 30, 0, 0, - 31, 32, 35, 0, 0, 0, 0, 0, 0, 0, + 57, 183, 414, 412, 186, 419, 282, 238, 194, 339, + 356, 47, 93, 141, 68, 222, 91, 426, 427, 428, + 429, 127, 187, 64, 128, 125, 247, 126, 357, 157, + 248, 66, 61, 124, 130, 129, 249, 250, 182, 118, + 119, 122, 60, 244, 245, 246, 409, 215, 408, 374, + 374, 123, 121, 376, 333, 124, 120, 432, 433, 330, + 151, 431, 6, 133, 84, 135, 98, 100, 101, 334, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 85, 112, 113, 117, 99, 335, 42, 131, 413, 430, + 181, 180, 119, 122, 398, 444, 370, 136, 128, 143, + 364, 369, 362, 123, 121, 329, 217, 124, 120, 129, + 397, 114, 116, 115, 443, 179, 368, 442, 199, 196, + 200, 201, 202, 203, 204, 205, 175, 396, 328, 178, + 197, 197, 197, 197, 197, 197, 197, 327, 176, 218, + 395, 383, 198, 198, 198, 198, 198, 198, 198, 132, + 197, 134, 207, 206, 322, 234, 240, 208, 211, 228, + 326, 191, 198, 230, 2, 3, 4, 5, 420, 321, + 191, 190, 195, 446, 241, 185, 122, 270, 233, 61, + 190, 331, 191, 273, 232, 182, 123, 121, 266, 60, + 124, 268, 190, 192, 197, 360, 192, 275, 276, 270, + 198, 445, 192, 152, 382, 144, 198, 231, 242, 193, + 197, 84, 193, 359, 192, 142, 353, 214, 193, 381, + 119, 122, 198, 324, 224, 279, 380, 85, 95, 278, + 193, 123, 121, 143, 325, 124, 120, 181, 180, 243, + 352, 351, 137, 403, 277, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 332, 358, 402, 274, 226, 199, 188, 189, 272, 271, + 361, 130, 191, 363, 225, 227, 354, 355, 223, 196, + 224, 197, 190, 118, 197, 210, 138, 365, 86, 10, + 197, 61, 38, 198, 7, 394, 198, 269, 209, 88, + 393, 60, 198, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 150, 401, + 226, 392, 391, 84, 372, 112, 390, 117, 389, 388, + 225, 227, 441, 373, 375, 197, 377, 387, 386, 85, + 406, 385, 378, 379, 384, 97, 149, 198, 148, 181, + 180, 119, 122, 119, 122, 114, 116, 115, 39, 119, + 122, 399, 123, 121, 123, 121, 124, 120, 124, 120, + 123, 121, 197, 221, 124, 120, 405, 267, 220, 407, + 1, 147, 94, 323, 198, 173, 146, 415, 416, 417, + 411, 219, 92, 418, 69, 422, 421, 424, 423, 145, + 229, 55, 434, 54, 285, 95, 8, 87, 53, 371, + 40, 435, 436, 197, 298, 52, 437, 119, 122, 51, + 304, 156, 439, 50, 404, 198, 49, 284, 123, 121, + 48, 46, 124, 120, 440, 154, 212, 144, 65, 367, + 45, 9, 9, 155, 447, 197, 61, 142, 44, 300, + 301, 153, 182, 302, 43, 140, 60, 198, 366, 56, + 95, 315, 237, 438, 286, 288, 290, 291, 292, 303, + 305, 308, 309, 310, 311, 312, 316, 317, 84, 400, + 287, 289, 293, 294, 295, 296, 297, 299, 306, 320, + 319, 307, 285, 94, 85, 313, 314, 318, 119, 122, + 216, 336, 298, 92, 181, 180, 96, 235, 304, 123, + 121, 90, 281, 124, 120, 284, 95, 280, 89, 119, + 122, 425, 184, 283, 58, 139, 0, 0, 0, 0, + 123, 121, 199, 0, 124, 120, 0, 300, 301, 0, + 0, 302, 0, 0, 0, 0, 0, 0, 0, 315, + 0, 0, 286, 288, 290, 291, 292, 303, 305, 308, + 309, 310, 311, 312, 316, 317, 0, 0, 287, 289, + 293, 294, 295, 296, 297, 299, 306, 320, 319, 307, + 0, 0, 0, 313, 314, 318, 61, 0, 0, 59, + 86, 0, 62, 338, 0, 22, 60, 0, 0, 213, + 337, 0, 63, 0, 341, 342, 340, 347, 349, 346, + 348, 343, 344, 345, 350, 0, 0, 0, 84, 0, + 174, 0, 0, 0, 18, 19, 0, 61, 20, 0, + 0, 0, 0, 182, 85, 0, 0, 60, 0, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 0, 0, 0, 13, 0, 0, 84, + 0, 0, 0, 24, 37, 36, 0, 30, 0, 0, + 31, 32, 67, 61, 41, 85, 59, 86, 0, 62, + 0, 0, 22, 60, 0, 181, 180, 0, 236, 63, + 0, 0, 191, 0, 0, 239, 0, 0, 0, 242, + 0, 0, 190, 0, 0, 84, 0, 0, 0, 0, + 0, 18, 19, 177, 0, 20, 0, 0, 0, 0, + 0, 85, 0, 0, 192, 0, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 193, 0, 0, 13, 0, 0, 0, 0, 0, 0, + 24, 37, 36, 0, 30, 0, 0, 31, 32, 67, + 61, 0, 118, 59, 86, 0, 62, 410, 0, 22, + 60, 0, 0, 0, 0, 0, 63, 0, 341, 342, + 340, 347, 349, 346, 348, 343, 344, 345, 350, 98, + 100, 0, 84, 0, 0, 0, 0, 0, 18, 19, + 109, 110, 20, 0, 112, 113, 117, 99, 85, 0, + 0, 0, 0, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 17, 86, 0, + 13, 0, 0, 22, 114, 116, 115, 24, 37, 36, + 0, 30, 0, 0, 31, 32, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, - 118, 0, 0, 13, 0, 0, 0, 24, 37, 36, - 0, 30, 0, 0, 31, 32, 35, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 98, 100, 101, - 0, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 0, 112, 113, 117, 99, 98, 100, 101, 0, - 102, 103, 104, 0, 106, 107, 108, 109, 110, 111, - 173, 112, 113, 117, 99, 118, 0, 61, 0, 114, - 116, 115, 0, 181, 118, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 116, - 115, 0, 98, 100, 101, 0, 102, 103, 0, 84, - 106, 107, 100, 109, 110, 111, 0, 112, 113, 117, - 99, 0, 109, 110, 0, 85, 112, 0, 117, 99, - 0, 0, 0, 0, 0, 180, 179, 0, 0, 0, - 0, 0, 0, 0, 114, 116, 115, 0, 0, 0, - 0, 0, 0, 114, 116, 115, 0, 0, 0, 0, - 176, + 0, 0, 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, 17, 38, 0, 13, 0, 0, 22, 0, 0, + 0, 24, 37, 36, 0, 30, 0, 0, 31, 32, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 118, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 24, 37, 36, 0, 30, + 0, 0, 31, 32, 35, 118, 0, 0, 0, 0, + 0, 0, 98, 100, 101, 0, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 0, 112, 113, 117, + 99, 0, 98, 100, 101, 0, 102, 103, 104, 0, + 106, 107, 108, 109, 110, 111, 0, 112, 113, 117, + 99, 0, 0, 118, 0, 0, 0, 114, 116, 115, + 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 114, 116, 115, + 98, 100, 101, 0, 102, 103, 0, 0, 106, 107, + 100, 109, 110, 111, 0, 112, 113, 117, 99, 0, + 109, 110, 0, 0, 112, 0, 117, 99, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 114, 116, 115, 0, 0, + 0, 0, 0, 0, 114, 116, 115, } var yyPact = [...]int16{ - 64, 165, 844, 844, 632, 780, -1000, -1000, -1000, 202, + 60, 284, 879, 879, 664, 815, -1000, -1000, -1000, 279, -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, 370, -1000, - 266, -1000, 906, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -3, 19, 126, - -1000, -1000, 716, -1000, 716, 166, -1000, 86, 137, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 491, -1000, + 343, -1000, 941, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1, 19, 256, + -1000, -1000, 751, -1000, 751, 275, -1000, 227, 271, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 321, -1000, -1000, 488, - -1000, -1000, 291, 181, -1000, -1000, 21, -1000, -54, -54, - -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, - -54, -54, -54, -54, 978, -1000, -1000, 335, 169, 275, - 275, 275, 275, 275, 275, 126, -57, -1000, 193, 193, - 548, -1000, 26, 612, 33, -15, -1000, 42, 275, 476, - -1000, -1000, 216, 157, -1000, -1000, 262, -1000, 179, -1000, - 112, 222, 716, -1000, -51, -44, -1000, 716, 716, 716, - 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, - 716, 716, -1000, -1000, -1000, 484, 125, 92, -3, -1000, - -1000, 275, -1000, 87, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 161, 161, 332, -1000, -3, -1000, 275, 86, -10, - -10, -15, -15, -15, -15, -1000, -1000, -1000, 464, -1000, - -1000, 81, -1000, 906, -1000, -1000, -1000, 390, -1000, 88, - -1000, 103, -1000, -1000, -1000, -1000, -1000, 102, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 32, 55, 3, -1000, -1000, - -1000, 715, 980, 193, 193, 193, 193, 33, 33, 545, - 545, 545, 971, 925, 545, 545, 971, 33, 33, 545, - 33, 980, -1000, 84, 80, 275, -15, 40, 275, 612, - 39, -1000, -1000, -1000, 669, -1000, 167, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 435, -1000, -1000, 379, + -1000, -1000, 344, 314, -1000, -1000, 36, -1000, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, 618, -1000, -1000, 173, 170, 23, + 23, 23, 23, 23, 23, 256, -55, -1000, 283, 283, + 577, -1000, 25, 478, 269, -23, -1000, 84, 23, 371, + -1000, -1000, 276, 220, -1000, -1000, 380, -1000, 182, -1000, + 153, 683, 751, -1000, -39, -59, -44, -1000, 751, 751, + 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, + 751, 751, 751, -1000, -1000, -1000, 282, 254, 253, -1, + -1000, -1000, 23, -1000, 248, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 263, 263, 223, -1000, -1, -1000, 23, 227, + 134, 134, -23, -23, -23, -23, -1000, -1000, -1000, 490, + -1000, -1000, 147, -1000, 941, -1000, -1000, -1000, 376, -1000, + 203, -1000, 135, -1000, -1000, -1000, -1000, -1000, 103, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 33, 155, 28, -1000, + -1000, -1000, 576, 1018, 226, 225, 201, 283, 283, 283, + 283, 269, 269, 748, 748, 748, 1009, 961, 748, 748, + 1009, 269, 269, 748, 269, 1018, -1000, 198, 180, 23, + -23, 80, 23, 478, 78, -1000, -1000, -1000, 437, -1000, + 94, -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, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 716, 275, -1000, -1000, -1000, - -1000, -1000, -1000, 51, 51, 31, 51, 78, 78, 346, - 35, -1000, -1000, 272, 270, 261, 259, 237, 236, 234, - 229, 217, 213, 210, -1000, -1000, -1000, -1000, -1000, 37, - 275, 465, -1000, 364, -1000, 152, -1000, -1000, -1000, 389, - -1000, 906, 382, -1000, -1000, -1000, 51, -1000, 30, 25, - 785, -1000, -1000, -1000, 36, 311, 311, 311, 161, 141, - 141, 36, 141, 36, -78, -1000, 308, -1000, 275, -1000, - -1000, -1000, -1000, -1000, -1000, 51, 51, -1000, -1000, -1000, - 51, -1000, -1000, -1000, -1000, -1000, -1000, 311, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 275, 172, -1000, - -1000, -1000, 162, -1000, 150, -1000, 483, -1000, -1000, -1000, - -1000, -1000, + -1000, -1000, 751, 23, -1000, -1000, -1000, -1000, -1000, -1000, + 30, 30, 27, 30, 192, 192, 202, 124, -1000, -1000, + 338, 335, 332, 331, 323, 322, 320, 316, 315, 294, + 289, 121, 108, 91, -1000, -1000, -1000, -1000, -1000, 72, + 23, 457, -1000, 312, -1000, 241, -1000, -1000, -1000, 402, + -1000, 941, 318, -1000, -1000, -1000, 30, -1000, 22, 20, + 750, -1000, -1000, -1000, 31, 161, 161, 161, 263, 154, + 154, 31, 154, 31, -81, 67, 39, 35, -1000, 51, + -1000, 23, -1000, -1000, -1000, -1000, -1000, -1000, 30, 30, + -1000, -1000, -1000, 30, -1000, -1000, -1000, -1000, -1000, -1000, + 161, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 23, 310, -1000, -1000, -1000, 93, -1000, + 179, -1000, 152, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int16{ - 0, 444, 13, 433, 6, 15, 430, 318, 23, 427, - 10, 422, 14, 222, 355, 419, 16, 415, 28, 12, - 413, 410, 7, 408, 9, 5, 396, 3, 2, 4, - 394, 25, 1, 393, 384, 33, 200, 381, 375, 86, - 373, 358, 27, 357, 26, 356, 11, 347, 345, 339, - 331, 325, 324, 319, 299, 285, 0, 297, 8, 296, - 288, 281, + 0, 525, 13, 524, 6, 15, 523, 438, 23, 522, + 12, 521, 14, 289, 406, 518, 16, 517, 28, 10, + 507, 506, 7, 501, 9, 5, 463, 3, 2, 4, + 462, 22, 1, 459, 454, 25, 203, 451, 448, 443, + 86, 440, 436, 27, 435, 31, 431, 11, 430, 426, + 423, 421, 419, 415, 408, 403, 401, 0, 394, 8, + 385, 380, 358, } var yyR1 = [...]int8{ - 0, 60, 60, 60, 60, 60, 60, 60, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 34, 34, 34, 34, 35, 35, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 36, 38, 38, 50, 50, - 43, 43, 43, 43, 18, 18, 18, 18, 17, 17, - 17, 4, 4, 4, 40, 42, 42, 41, 41, 41, - 51, 58, 47, 47, 48, 49, 33, 33, 33, 9, - 9, 45, 53, 53, 53, 53, 53, 53, 54, 55, - 55, 55, 44, 44, 44, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 14, 14, 7, 7, 7, + 0, 61, 61, 61, 61, 61, 61, 61, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 34, 34, 34, 34, 35, 35, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 36, 39, 39, 51, 51, + 44, 44, 44, 44, 37, 37, 37, 37, 18, 18, + 18, 18, 17, 17, 17, 4, 4, 4, 41, 43, + 43, 42, 42, 42, 52, 59, 48, 48, 49, 50, + 33, 33, 33, 9, 9, 46, 54, 54, 54, 54, + 54, 54, 55, 56, 56, 56, 45, 45, 45, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 14, + 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 13, 13, 13, 13, 15, 15, - 15, 16, 16, 16, 16, 16, 16, 16, 61, 21, - 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 30, 30, 30, 22, 22, 22, 22, 23, - 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 25, 25, 26, 26, 26, 11, 11, - 11, 11, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, 7, 7, 13, 13, + 13, 13, 15, 15, 15, 16, 16, 16, 16, 16, + 16, 16, 62, 21, 21, 21, 21, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 30, 30, 30, 22, + 22, 22, 22, 23, 23, 23, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 25, 25, 26, + 26, 26, 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, 8, 8, - 5, 5, 5, 5, 46, 46, 29, 29, 31, 31, - 32, 32, 28, 27, 27, 52, 10, 19, 19, 59, - 59, 59, 59, 59, 59, 59, 59, 12, 12, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 57, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 8, 8, 5, 5, 5, + 5, 47, 47, 29, 29, 31, 31, 32, 32, 28, + 27, 27, 53, 10, 19, 19, 60, 60, 60, 60, + 60, 60, 60, 60, 12, 12, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 58, } var yyR2 = [...]int8{ @@ -634,124 +650,126 @@ var yyR2 = [...]int8{ 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, 2, 2, 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, 3, 3, 1, 5, 5, 5, 3, 4, + 2, 1, 3, 1, 2, 1, 1, 1, 2, 3, + 2, 3, 1, 2, 3, 1, 3, 3, 2, 2, + 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, 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, 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, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, - 2, 3, 4, 6, 7, 4, 1, 1, 1, 1, - 2, 3, 3, 3, 3, 3, 3, 3, 6, 1, - 3, + 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, + 2, 1, 1, 1, 0, 1, 1, 2, 3, 4, + 6, 7, 4, 1, 1, 1, 1, 2, 3, 3, + 3, 3, 3, 3, 3, 6, 1, 3, } var yyChk = [...]int16{ - -1000, -60, 101, 102, 103, 104, 2, 10, -14, -7, + -1000, -61, 104, 105, 106, 107, 2, 10, -14, -7, -13, 62, 63, 79, 64, 65, 66, 12, 47, 48, - 51, 67, 18, 68, 83, 69, 70, 71, 72, 73, - 87, 90, 91, 74, 75, 92, 85, 84, 13, -61, - -14, 10, -39, -34, -37, -40, -45, -46, -47, -48, - -49, -51, -52, -53, -54, -55, -33, -56, -3, 12, - 19, 9, 15, 25, -8, -7, -44, 92, -12, -57, + 51, 67, 18, 68, 86, 69, 70, 71, 72, 73, + 90, 93, 94, 74, 75, 95, 88, 87, 13, -62, + -14, 10, -40, -34, -38, -41, -46, -47, -48, -49, + -50, -52, -53, -54, -55, -56, -33, -57, -3, 12, + 19, 9, 15, 25, -8, -7, -45, 95, -12, -58, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 41, 57, 13, -55, -13, -15, + 72, 73, 74, 75, 41, 57, 13, -56, -13, -15, 20, -16, 12, -10, 2, 25, -21, 2, 41, 59, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 56, 57, 83, 85, 84, 58, 14, 41, - 57, 53, 42, 52, 56, -35, -42, 2, 79, 87, - 15, -42, -39, -56, -39, -56, -44, 15, 15, -1, + 53, 54, 56, 57, 86, 88, 87, 58, 14, 41, + 57, 53, 42, 52, 56, -35, -43, 2, 79, 90, + 15, -43, -40, -57, -40, -57, -45, 15, 15, -1, 20, -2, 12, -10, 2, 20, 7, 2, 4, 2, - 4, 24, -36, -43, -38, -50, 78, -36, -36, -36, + 4, 24, -36, -37, -44, -39, -51, 78, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, - -36, -36, -59, 2, -46, -8, 92, -12, -56, 68, - 67, 15, -32, -9, 2, -29, -31, 90, 91, 19, - 9, 41, 57, -58, 2, -56, -46, -8, 92, -56, - -56, -56, -56, -56, -56, -42, -35, -18, 15, 2, - -18, -41, 22, -39, 22, 22, 22, -56, 20, 7, - 2, -5, 2, 4, 54, 44, 55, -5, 20, -16, - 25, 2, 25, 2, -20, 5, -30, -22, 12, -29, - -31, 16, -39, 82, 86, 80, 81, -39, -39, -39, - -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, - -39, -39, -46, 92, -12, 15, -56, 15, 15, -56, - 15, -29, -29, 21, 6, 2, -17, 22, -4, -6, - 25, 2, 62, 78, 63, 79, 64, 65, 66, 80, - 81, 12, 82, 47, 48, 51, 67, 18, 68, 83, - 86, 69, 70, 71, 72, 73, 90, 91, 59, 74, - 75, 92, 85, 84, 22, 7, 7, 20, -2, 25, - 2, 25, 2, 26, 26, -31, 26, 41, 57, -23, - 24, 17, -24, 30, 28, 29, 35, 36, 37, 33, - 31, 34, 32, 38, -18, -18, -19, -18, -19, 15, - 15, -56, 22, -56, 22, -58, 21, 2, 22, 7, - 2, -39, -56, -28, 19, -28, 26, -28, -22, -22, + -36, -36, -36, -60, 2, -47, -8, 95, -12, -57, + 68, 67, 15, -32, -9, 2, -29, -31, 93, 94, + 19, 9, 41, 57, -59, 2, -57, -47, -8, 95, + -57, -57, -57, -57, -57, -57, -43, -35, -18, 15, + 2, -18, -42, 22, -40, 22, 22, 22, -57, 20, + 7, 2, -5, 2, 4, 54, 44, 55, -5, 20, + -16, 25, 2, 25, 2, -20, 5, -30, -22, 12, + -29, -31, 16, -40, 82, 83, 84, 85, 89, 80, + 81, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -47, 95, -12, 15, + -57, 15, 15, -57, 15, -29, -29, 21, 6, 2, + -17, 22, -4, -6, 25, 2, 62, 78, 63, 79, + 64, 65, 66, 80, 81, 82, 83, 84, 12, 85, + 47, 48, 51, 67, 18, 68, 86, 89, 69, 70, + 71, 72, 73, 93, 94, 59, 74, 75, 95, 88, + 87, 22, 7, 7, 20, -2, 25, 2, 25, 2, + 26, 26, -31, 26, 41, 57, -23, 24, 17, -24, + 30, 28, 29, 35, 36, 37, 33, 31, 34, 32, + 38, 15, 15, 15, -18, -18, -19, -18, -19, 15, + 15, -57, 22, -57, 22, -59, 21, 2, 22, 7, + 2, -40, -57, -28, 19, -28, 26, -28, -22, -22, 24, 17, 2, 17, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 22, -56, 22, 7, 21, - 2, 22, -4, 22, -28, 26, 26, 17, -24, -27, - 57, -28, -32, -32, -32, -29, -25, 14, -25, -27, - -25, -27, -11, 95, 96, 97, 98, 7, -56, -28, - -28, -28, -26, -32, -56, 22, 24, 21, 2, 22, - 21, -32, + 6, 6, 6, 6, 6, 19, 19, 19, 22, -57, + 22, 7, 21, 2, 22, -4, 22, -28, 26, 26, + 17, -24, -27, 57, -28, -32, -32, -32, -29, -25, + 14, -25, -27, -25, -27, -11, 98, 99, 100, 101, + 22, 22, 22, 7, -57, -28, -28, -28, -26, -32, + -57, 22, 24, 21, 2, 22, 21, -32, } var yyDef = [...]int16{ - 0, -2, 137, 137, 0, 0, 7, 6, 1, 137, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 0, 2, + 0, -2, 141, 141, 0, 0, 7, 6, 1, 141, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 0, 2, -2, 3, 4, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 0, 113, - 244, 245, 0, 255, 0, 90, 91, 131, 0, 279, + 15, 16, 17, 18, 19, 20, 21, 22, 0, 117, + 251, 252, 0, 262, 0, 94, 95, 135, 0, 286, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, - -2, -2, -2, -2, 238, 239, 0, 5, 105, 0, - 136, 139, 0, 143, 147, 256, 148, 152, 46, 46, + -2, -2, -2, -2, 245, 246, 0, 5, 109, 0, + 140, 143, 0, 147, 151, 263, 152, 156, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 0, 74, 75, 0, 0, 0, + 46, 46, 46, 46, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, - 0, 64, 0, 22, 88, -2, 89, 0, 0, 0, - 94, 96, 0, 100, 104, 134, 0, 140, 0, 146, - 0, 151, 0, 45, 50, 51, 47, 0, 0, 0, + 0, 68, 0, 22, 92, -2, 93, 0, 0, 0, + 98, 100, 0, 104, 108, 138, 0, 144, 0, 150, + 0, 155, 0, 45, 54, 50, 51, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 73, 259, 0, 0, 0, 266, 267, - 268, 0, 76, 0, 78, 250, 251, 79, 80, 246, - 247, 0, 0, 0, 87, 71, 269, 0, 0, 271, - 272, 273, 274, 275, 276, 23, 24, 27, 0, 57, - 28, 0, 66, 68, 70, 280, 277, 0, 92, 0, - 97, 0, 103, 240, 241, 242, 243, 0, 135, 138, - 141, 144, 142, 145, 150, 153, 155, 158, 162, 163, - 164, 0, 29, 0, 0, -2, -2, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 260, 0, 0, 0, 270, 0, 0, 0, - 0, 248, 249, 81, 0, 86, 0, 56, 59, 61, - 62, 63, 206, 207, 208, 209, 210, 211, 212, 213, + 0, 0, 0, 76, 77, 266, 0, 0, 0, 273, + 274, 275, 0, 80, 0, 82, 257, 258, 83, 84, + 253, 254, 0, 0, 0, 91, 75, 276, 0, 0, + 278, 279, 280, 281, 282, 283, 23, 24, 27, 0, + 61, 28, 0, 70, 72, 74, 287, 284, 0, 96, + 0, 101, 0, 107, 247, 248, 249, 250, 0, 139, + 142, 145, 148, 146, 149, 154, 157, 159, 162, 166, + 167, 168, 0, 29, 0, 0, 0, 0, 0, -2, + -2, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 267, 0, 0, 0, + 277, 0, 0, 0, 0, 255, 256, 85, 0, 90, + 0, 60, 63, 65, 66, 67, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 65, 69, 0, 93, 95, 98, - 102, 99, 101, 0, 0, 0, 0, 0, 0, 0, - 0, 168, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 49, 52, 258, 53, 0, - 0, 0, 261, 0, 77, 0, 83, 85, 54, 0, - 60, 67, 0, 154, 252, 156, 0, 159, 0, 0, - 0, 166, 171, 167, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 262, 0, 265, 0, 82, - 84, 55, 58, 278, 157, 0, 0, 165, 169, 172, - 0, 254, 173, 174, 175, 176, 177, 0, 178, 179, - 180, 181, 182, 188, 189, 190, 191, 0, 0, 160, - 161, 253, 0, 186, 0, 263, 0, 184, 187, 264, - 183, 185, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 69, 73, 0, 97, 99, 102, 106, 103, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 172, 174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 52, 265, 53, 0, + 0, 0, 268, 0, 81, 0, 87, 89, 58, 0, + 64, 71, 0, 158, 259, 160, 0, 163, 0, 0, + 0, 170, 175, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 272, 0, 86, 88, 59, 62, 285, 161, 0, 0, + 169, 173, 176, 0, 261, 177, 178, 179, 180, 181, + 0, 182, 183, 184, 185, 186, 192, 193, 194, 195, + 55, 56, 57, 0, 0, 164, 165, 260, 0, 190, + 0, 270, 0, 188, 191, 271, 187, 189, } var yyTok1 = [...]int8{ @@ -769,7 +787,7 @@ var yyTok2 = [...]int8{ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, + 102, 103, 104, 105, 106, 107, 108, } var yyTok3 = [...]int8{ @@ -1294,44 +1312,66 @@ yydefault: yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardOneToMany yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings } - case 54: + case 55: + yyDollar = yyS[yypt-5 : yypt+1] + { + yyVAL.node = yyDollar[1].node + fill := yylex.(*parser).number(yyDollar[4].item.Val) + yyVAL.node.(*BinaryExpr).VectorMatching.FillValues.Lhs = &fill + yyVAL.node.(*BinaryExpr).VectorMatching.FillValues.Rhs = &fill + } + case 56: + yyDollar = yyS[yypt-5 : yypt+1] + { + yyVAL.node = yyDollar[1].node + fill := yylex.(*parser).number(yyDollar[4].item.Val) + yyVAL.node.(*BinaryExpr).VectorMatching.FillValues.Lhs = &fill + } + case 57: + yyDollar = yyS[yypt-5 : yypt+1] + { + yyVAL.node = yyDollar[1].node + fill := yylex.(*parser).number(yyDollar[4].item.Val) + yyVAL.node.(*BinaryExpr).VectorMatching.FillValues.Rhs = &fill + } + case 58: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.strings = yyDollar[2].strings } - case 55: + case 59: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.strings = yyDollar[2].strings } - case 56: + case 60: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.strings = []string{} } - case 57: + case 61: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("grouping opts", "\"(\"") yyVAL.strings = nil } - case 58: + case 62: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val) } - case 59: + case 63: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.strings = []string{yyDollar[1].item.Val} } - case 60: + case 64: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"") yyVAL.strings = yyDollar[1].strings } - case 61: + case 65: yyDollar = yyS[yypt-1 : yypt+1] { if !model.UTF8Validation.IsValidLabelName(yyDollar[1].item.Val) { @@ -1339,7 +1379,7 @@ yydefault: } yyVAL.item = yyDollar[1].item } - case 62: + case 66: yyDollar = yyS[yypt-1 : yypt+1] { unquoted := yylex.(*parser).unquoteString(yyDollar[1].item.Val) @@ -1350,13 +1390,13 @@ yydefault: yyVAL.item.Pos++ yyVAL.item.Val = unquoted } - case 63: + case 67: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("grouping opts", "label") yyVAL.item = Item{} } - case 64: + case 68: yyDollar = yyS[yypt-2 : yypt+1] { fn, exist := getFunction(yyDollar[1].item.Val, yylex.(*parser).functions) @@ -1375,38 +1415,38 @@ yydefault: }, } } - case 65: + case 69: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = yyDollar[2].node } - case 66: + case 70: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.node = Expressions{} } - case 67: + case 71: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr)) } - case 68: + case 72: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.node = Expressions{yyDollar[1].node.(Expr)} } - case 69: + case 73: 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 70: + case 74: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)} } - case 71: + case 75: yyDollar = yyS[yypt-1 : yypt+1] { if numLit, ok := yyDollar[1].node.(*NumberLiteral); ok { @@ -1420,7 +1460,7 @@ yydefault: } yyVAL.node = yyDollar[1].node } - case 72: + case 76: yyDollar = yyS[yypt-3 : yypt+1] { if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok { @@ -1431,41 +1471,41 @@ yydefault: yylex.(*parser).addOffsetExpr(yyDollar[1].node, yyDollar[3].node.(*DurationExpr)) yyVAL.node = yyDollar[1].node } - case 73: + case 77: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("offset", "number, duration, or step()") yyVAL.node = yyDollar[1].node } - case 74: + case 78: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).setAnchored(yyDollar[1].node) } - case 75: + case 79: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).setSmoothed(yyDollar[1].node) } - case 76: + case 80: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float) yyVAL.node = yyDollar[1].node } - case 77: + case 81: yyDollar = yyS[yypt-5 : yypt+1] { yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item) yyVAL.node = yyDollar[1].node } - case 78: + case 82: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("@", "timestamp") yyVAL.node = yyDollar[1].node } - case 81: + case 85: yyDollar = yyS[yypt-4 : yypt+1] { var errMsg string @@ -1495,7 +1535,7 @@ yydefault: EndPos: yylex.(*parser).lastClosing, } } - case 82: + case 86: yyDollar = yyS[yypt-6 : yypt+1] { var rangeNl time.Duration @@ -1517,7 +1557,7 @@ yydefault: EndPos: yyDollar[6].item.Pos + 1, } } - case 83: + case 87: yyDollar = yyS[yypt-5 : yypt+1] { var rangeNl time.Duration @@ -1532,31 +1572,31 @@ yydefault: EndPos: yyDollar[5].item.Pos + 1, } } - case 84: + case 88: yyDollar = yyS[yypt-6 : yypt+1] { yylex.(*parser).unexpected("subquery selector", "\"]\"") yyVAL.node = yyDollar[1].node } - case 85: + case 89: yyDollar = yyS[yypt-5 : yypt+1] { yylex.(*parser).unexpected("subquery selector", "number, duration, or step() or \"]\"") yyVAL.node = yyDollar[1].node } - case 86: + case 90: yyDollar = yyS[yypt-4 : yypt+1] { yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"") yyVAL.node = yyDollar[1].node } - case 87: + case 91: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("subquery or range selector", "number, duration, or step()") yyVAL.node = yyDollar[1].node } - case 88: + case 92: yyDollar = yyS[yypt-2 : yypt+1] { if nl, ok := yyDollar[2].node.(*NumberLiteral); ok { @@ -1569,7 +1609,7 @@ yydefault: yyVAL.node = &UnaryExpr{Op: yyDollar[1].item.Typ, Expr: yyDollar[2].node.(Expr), StartPos: yyDollar[1].item.Pos} } } - case 89: + case 93: yyDollar = yyS[yypt-2 : yypt+1] { vs := yyDollar[2].node.(*VectorSelector) @@ -1578,7 +1618,7 @@ yydefault: yylex.(*parser).assembleVectorSelector(vs) yyVAL.node = vs } - case 90: + case 94: yyDollar = yyS[yypt-1 : yypt+1] { vs := &VectorSelector{ @@ -1589,14 +1629,14 @@ yydefault: yylex.(*parser).assembleVectorSelector(vs) yyVAL.node = vs } - case 91: + case 95: yyDollar = yyS[yypt-1 : yypt+1] { vs := yyDollar[1].node.(*VectorSelector) yylex.(*parser).assembleVectorSelector(vs) yyVAL.node = vs } - case 92: + case 96: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &VectorSelector{ @@ -1604,7 +1644,7 @@ yydefault: PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item), } } - case 93: + case 97: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.node = &VectorSelector{ @@ -1612,7 +1652,7 @@ yydefault: PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item), } } - case 94: + case 98: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.node = &VectorSelector{ @@ -1620,7 +1660,7 @@ yydefault: PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item), } } - case 95: + case 99: yyDollar = yyS[yypt-3 : yypt+1] { if yyDollar[1].matchers != nil { @@ -1629,144 +1669,144 @@ yydefault: yyVAL.matchers = yyDollar[1].matchers } } - case 96: + case 100: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher} } - case 97: + case 101: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label matching", "\",\" or \"}\"") yyVAL.matchers = yyDollar[1].matchers } - case 98: + case 102: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item) } - case 99: + case 103: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item) } - case 100: + case 104: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.matcher = yylex.(*parser).newMetricNameMatcher(yyDollar[1].item) } - case 101: + case 105: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("label matching", "string") yyVAL.matcher = nil } - case 102: + case 106: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("label matching", "string") yyVAL.matcher = nil } - case 103: + case 107: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label matching", "label matching operator") yyVAL.matcher = nil } - case 104: + case 108: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("label matching", "identifier or \"}\"") yyVAL.matcher = nil } - case 105: + case 109: 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 106: + case 110: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.labels = yyDollar[1].labels } - case 134: + case 138: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.labels = labels.New(yyDollar[2].lblList...) } - case 135: + case 139: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.labels = labels.New(yyDollar[2].lblList...) } - case 136: + case 140: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.labels = labels.New() } - case 137: + case 141: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.labels = labels.New() } - case 138: + case 142: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label) } - case 139: + case 143: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.lblList = []labels.Label{yyDollar[1].label} } - case 140: + case 144: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label set", "\",\" or \"}\"") yyVAL.lblList = yyDollar[1].lblList } - case 141: + case 145: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} } - case 142: + case 146: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} } - case 143: + case 147: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val} } - case 144: + case 148: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("label set", "string") yyVAL.label = labels.Label{} } - case 145: + case 149: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("label set", "string") yyVAL.label = labels.Label{} } - case 146: + case 150: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label set", "\"=\"") yyVAL.label = labels.Label{} } - case 147: + case 151: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("label set", "identifier or \"}\"") yyVAL.label = labels.Label{} } - case 148: + case 152: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).generatedParserResult = &seriesDescription{ @@ -1774,33 +1814,33 @@ yydefault: values: yyDollar[2].series, } } - case 149: + case 153: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.series = []SequenceValue{} } - case 150: + case 154: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...) } - case 151: + case 155: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.series = yyDollar[1].series } - case 152: + case 156: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("series values", "") yyVAL.series = nil } - case 153: + case 157: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Omitted: true}} } - case 154: + case 158: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1808,12 +1848,12 @@ yydefault: yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true}) } } - case 155: + case 159: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}} } - case 156: + case 160: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1822,7 +1862,7 @@ yydefault: yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float}) } } - case 157: + case 161: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1832,12 +1872,12 @@ yydefault: yyDollar[1].float += yyDollar[2].float } } - case 158: + case 162: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}} } - case 159: + case 163: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1847,7 +1887,7 @@ yydefault: //$1 += $2 } } - case 160: + case 164: yyDollar = yyS[yypt-5 : yypt+1] { val, err := yylex.(*parser).histogramsIncreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint) @@ -1856,7 +1896,7 @@ yydefault: } yyVAL.series = val } - case 161: + case 165: yyDollar = yyS[yypt-5 : yypt+1] { val, err := yylex.(*parser).histogramsDecreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint) @@ -1865,7 +1905,7 @@ yydefault: } yyVAL.series = val } - case 162: + case 166: yyDollar = yyS[yypt-1 : yypt+1] { if yyDollar[1].item.Val != "stale" { @@ -1873,130 +1913,130 @@ yydefault: } yyVAL.float = math.Float64frombits(value.StaleNaN) } - case 165: + case 169: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors) } - case 166: + case 170: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors) } - case 167: - yyDollar = yyS[yypt-3 : yypt+1] - { - m := yylex.(*parser).newMap() - yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) - } - case 168: - yyDollar = yyS[yypt-2 : yypt+1] - { - m := yylex.(*parser).newMap() - yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) - } - case 169: - yyDollar = yyS[yypt-3 : yypt+1] - { - yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors)) - } - case 170: - yyDollar = yyS[yypt-1 : yypt+1] - { - yyVAL.descriptors = yyDollar[1].descriptors - } case 171: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] { - yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]") + m := yylex.(*parser).newMap() + yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) } case 172: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["schema"] = yyDollar[3].int + m := yylex.(*parser).newMap() + yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) } case 173: yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["sum"] = yyDollar[3].float + yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors)) } case 174: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["count"] = yyDollar[3].float + yyVAL.descriptors = yyDollar[1].descriptors } case 175: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["z_bucket"] = yyDollar[3].float + yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]") } case 176: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float + yyVAL.descriptors["schema"] = yyDollar[3].int } case 177: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set + yyVAL.descriptors["sum"] = yyDollar[3].float } case 178: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set + yyVAL.descriptors["count"] = yyDollar[3].float } case 179: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["offset"] = yyDollar[3].int + yyVAL.descriptors["z_bucket"] = yyDollar[3].float } case 180: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set + yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float } case 181: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["n_offset"] = yyDollar[3].int + yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set } case 182: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item + yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set } case 183: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.bucket_set = yyDollar[2].bucket_set + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["offset"] = yyDollar[3].int } case 184: yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.bucket_set = yyDollar[2].bucket_set + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set } case 185: yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float) + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["n_offset"] = yyDollar[3].int } case 186: + yyDollar = yyS[yypt-3 : yypt+1] + { + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item + } + case 187: + yyDollar = yyS[yypt-4 : yypt+1] + { + yyVAL.bucket_set = yyDollar[2].bucket_set + } + case 188: + yyDollar = yyS[yypt-3 : yypt+1] + { + yyVAL.bucket_set = yyDollar[2].bucket_set + } + case 189: + yyDollar = yyS[yypt-3 : yypt+1] + { + yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float) + } + case 190: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.bucket_set = []float64{yyDollar[1].float} } - case 244: + case 251: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.node = &NumberLiteral{ @@ -2004,7 +2044,7 @@ yydefault: PosRange: yyDollar[1].item.PositionRange(), } } - case 245: + case 252: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2019,12 +2059,12 @@ yydefault: Duration: true, } } - case 246: + case 253: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val) } - case 247: + case 254: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2035,17 +2075,17 @@ yydefault: } yyVAL.float = dur.Seconds() } - case 248: + case 255: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.float = yyDollar[2].float } - case 249: + case 256: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.float = -yyDollar[2].float } - case 252: + case 259: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2054,17 +2094,17 @@ yydefault: yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err) } } - case 253: + case 260: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.int = -int64(yyDollar[2].uint) } - case 254: + case 261: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.int = int64(yyDollar[1].uint) } - case 255: + case 262: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.node = &StringLiteral{ @@ -2072,7 +2112,7 @@ yydefault: PosRange: yyDollar[1].item.PositionRange(), } } - case 256: + case 263: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.item = Item{ @@ -2081,12 +2121,12 @@ yydefault: Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val), } } - case 257: + case 264: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.strings = nil } - case 259: + case 266: yyDollar = yyS[yypt-1 : yypt+1] { nl := yyDollar[1].node.(*NumberLiteral) @@ -2097,7 +2137,7 @@ yydefault: } yyVAL.node = nl } - case 260: + case 267: yyDollar = yyS[yypt-2 : yypt+1] { nl := yyDollar[2].node.(*NumberLiteral) @@ -2112,7 +2152,7 @@ yydefault: nl.PosRange.Start = yyDollar[1].item.Pos yyVAL.node = nl } - case 261: + case 268: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2121,7 +2161,7 @@ yydefault: EndPos: yyDollar[3].item.PositionRange().End, } } - case 262: + case 269: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2134,7 +2174,7 @@ yydefault: StartPos: yyDollar[1].item.Pos, } } - case 263: + case 270: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2145,7 +2185,7 @@ yydefault: RHS: yyDollar[5].node.(Expr), } } - case 264: + case 271: yyDollar = yyS[yypt-7 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2161,7 +2201,7 @@ yydefault: }, } } - case 265: + case 272: yyDollar = yyS[yypt-4 : yypt+1] { de := yyDollar[3].node.(*DurationExpr) @@ -2176,7 +2216,7 @@ yydefault: } yyVAL.node = yyDollar[3].node } - case 269: + case 276: yyDollar = yyS[yypt-1 : yypt+1] { nl := yyDollar[1].node.(*NumberLiteral) @@ -2187,7 +2227,7 @@ yydefault: } yyVAL.node = nl } - case 270: + case 277: yyDollar = yyS[yypt-2 : yypt+1] { switch expr := yyDollar[2].node.(type) { @@ -2220,25 +2260,25 @@ yydefault: break } } - case 271: + case 278: 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 272: + case 279: 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 273: + case 280: 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 274: + case 281: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) @@ -2249,7 +2289,7 @@ yydefault: } yyVAL.node = &DurationExpr{Op: DIV, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 275: + case 282: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) @@ -2260,13 +2300,13 @@ yydefault: } yyVAL.node = &DurationExpr{Op: MOD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 276: + case 283: 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 277: + case 284: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2275,7 +2315,7 @@ yydefault: EndPos: yyDollar[3].item.PositionRange().End, } } - case 278: + case 285: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2286,7 +2326,7 @@ yydefault: RHS: yyDollar[5].node.(Expr), } } - case 280: + case 287: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[2].node.(Expr)) diff --git a/promql/parser/lex.go b/promql/parser/lex.go index 296b91d1ae..44e6cdf9f5 100644 --- a/promql/parser/lex.go +++ b/promql/parser/lex.go @@ -137,6 +137,9 @@ var key = map[string]ItemType{ "ignoring": IGNORING, "group_left": GROUP_LEFT, "group_right": GROUP_RIGHT, + "fill": FILL, + "lfill": LFILL, + "rfill": RFILL, "bool": BOOL, // Preprocessors.