mirror of
https://github.com/prometheus/prometheus.git
synced 2025-08-07 06:37:17 +02:00
**This "PoC" is not finished not optimized. It currently also returns data when there is only one point in the selector. It is not ready for use and just there to play around** This adds "anchored" and "smoothed" keywords that can be used following a matrix selector. "Anchored" selects the last point before the range (or the first one after the range) and adds it at the boundary of the matrix selector. "Smoothed" applies linear interpolation at the edges using the points around the edges. In the absence of a point before or after the edge, the first or the last point is added to the edge, without interpolation. A complete design doc will follow. *Exemple usage* * `increase(caddy_http_requests_total[5m] anchored)` (equivalent of *caddy_http_requests_total - caddy_http_requests_total offset 5m* but takes counter reset into consideration) * `rate(caddy_http_requests_total[5m] smoothed)` Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com>
2304 lines
59 KiB
Go
2304 lines
59 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 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
|
|
|
|
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",
|
|
"SMOOTHED",
|
|
"ANCHORED",
|
|
"ON",
|
|
"WITHOUT",
|
|
"keywordsEnd",
|
|
"preprocessorStart",
|
|
"START",
|
|
"END",
|
|
"STEP",
|
|
"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, 38,
|
|
1, 147,
|
|
10, 147,
|
|
24, 147,
|
|
-2, 0,
|
|
-1, 68,
|
|
2, 190,
|
|
15, 190,
|
|
79, 190,
|
|
87, 190,
|
|
-2, 107,
|
|
-1, 69,
|
|
2, 191,
|
|
15, 191,
|
|
79, 191,
|
|
87, 191,
|
|
-2, 108,
|
|
-1, 70,
|
|
2, 192,
|
|
15, 192,
|
|
79, 192,
|
|
87, 192,
|
|
-2, 110,
|
|
-1, 71,
|
|
2, 193,
|
|
15, 193,
|
|
79, 193,
|
|
87, 193,
|
|
-2, 111,
|
|
-1, 72,
|
|
2, 194,
|
|
15, 194,
|
|
79, 194,
|
|
87, 194,
|
|
-2, 112,
|
|
-1, 73,
|
|
2, 195,
|
|
15, 195,
|
|
79, 195,
|
|
87, 195,
|
|
-2, 117,
|
|
-1, 74,
|
|
2, 196,
|
|
15, 196,
|
|
79, 196,
|
|
87, 196,
|
|
-2, 119,
|
|
-1, 75,
|
|
2, 197,
|
|
15, 197,
|
|
79, 197,
|
|
87, 197,
|
|
-2, 121,
|
|
-1, 76,
|
|
2, 198,
|
|
15, 198,
|
|
79, 198,
|
|
87, 198,
|
|
-2, 122,
|
|
-1, 77,
|
|
2, 199,
|
|
15, 199,
|
|
79, 199,
|
|
87, 199,
|
|
-2, 123,
|
|
-1, 78,
|
|
2, 200,
|
|
15, 200,
|
|
79, 200,
|
|
87, 200,
|
|
-2, 124,
|
|
-1, 79,
|
|
2, 201,
|
|
15, 201,
|
|
79, 201,
|
|
87, 201,
|
|
-2, 125,
|
|
-1, 80,
|
|
2, 202,
|
|
15, 202,
|
|
79, 202,
|
|
87, 202,
|
|
-2, 129,
|
|
-1, 81,
|
|
2, 203,
|
|
15, 203,
|
|
79, 203,
|
|
87, 203,
|
|
-2, 130,
|
|
-1, 133,
|
|
41, 266,
|
|
42, 266,
|
|
52, 266,
|
|
53, 266,
|
|
57, 266,
|
|
-2, 22,
|
|
-1, 243,
|
|
9, 253,
|
|
12, 253,
|
|
13, 253,
|
|
18, 253,
|
|
19, 253,
|
|
25, 253,
|
|
41, 253,
|
|
47, 253,
|
|
48, 253,
|
|
51, 253,
|
|
57, 253,
|
|
62, 253,
|
|
63, 253,
|
|
64, 253,
|
|
65, 253,
|
|
66, 253,
|
|
67, 253,
|
|
68, 253,
|
|
69, 253,
|
|
70, 253,
|
|
71, 253,
|
|
72, 253,
|
|
73, 253,
|
|
74, 253,
|
|
75, 253,
|
|
79, 253,
|
|
83, 253,
|
|
87, 253,
|
|
90, 253,
|
|
91, 253,
|
|
92, 253,
|
|
-2, 0,
|
|
-1, 244,
|
|
9, 253,
|
|
12, 253,
|
|
13, 253,
|
|
18, 253,
|
|
19, 253,
|
|
25, 253,
|
|
41, 253,
|
|
47, 253,
|
|
48, 253,
|
|
51, 253,
|
|
57, 253,
|
|
62, 253,
|
|
63, 253,
|
|
64, 253,
|
|
65, 253,
|
|
66, 253,
|
|
67, 253,
|
|
68, 253,
|
|
69, 253,
|
|
70, 253,
|
|
71, 253,
|
|
72, 253,
|
|
73, 253,
|
|
74, 253,
|
|
75, 253,
|
|
79, 253,
|
|
83, 253,
|
|
87, 253,
|
|
90, 253,
|
|
91, 253,
|
|
92, 253,
|
|
-2, 0,
|
|
}
|
|
|
|
const yyPrivate = 57344
|
|
|
|
const yyLast = 1052
|
|
|
|
var yyAct = [...]int16{
|
|
55, 180, 397, 395, 183, 402, 276, 235, 191, 328,
|
|
91, 45, 342, 139, 66, 219, 89, 241, 17, 84,
|
|
154, 242, 125, 62, 22, 184, 124, 123, 343, 409,
|
|
410, 411, 412, 126, 120, 128, 243, 244, 64, 122,
|
|
392, 127, 391, 362, 121, 119, 149, 319, 122, 192,
|
|
381, 350, 360, 18, 19, 188, 59, 20, 220, 318,
|
|
221, 131, 179, 133, 6, 187, 58, 426, 11, 12,
|
|
14, 15, 16, 21, 23, 25, 26, 27, 28, 29,
|
|
33, 34, 317, 316, 129, 13, 40, 189, 82, 24,
|
|
396, 348, 214, 30, 322, 141, 31, 32, 35, 126,
|
|
223, 360, 134, 190, 83, 369, 315, 127, 239, 323,
|
|
222, 224, 346, 176, 178, 177, 424, 193, 197, 198,
|
|
199, 200, 201, 202, 172, 324, 345, 175, 194, 194,
|
|
194, 194, 194, 194, 194, 423, 173, 215, 422, 196,
|
|
195, 195, 195, 195, 195, 195, 195, 130, 194, 132,
|
|
203, 182, 204, 386, 237, 205, 208, 225, 188, 135,
|
|
195, 227, 320, 2, 3, 4, 5, 268, 187, 171,
|
|
266, 207, 385, 188, 264, 238, 59, 189, 231, 403,
|
|
267, 229, 179, 187, 206, 260, 58, 368, 262, 265,
|
|
189, 194, 425, 190, 269, 270, 264, 195, 311, 150,
|
|
84, 230, 367, 195, 228, 189, 190, 194, 82, 366,
|
|
273, 117, 120, 310, 272, 211, 128, 136, 221, 195,
|
|
218, 190, 121, 119, 83, 217, 122, 118, 141, 271,
|
|
36, 314, 7, 380, 178, 177, 379, 240, 216, 185,
|
|
186, 378, 245, 246, 247, 248, 249, 250, 251, 252,
|
|
253, 254, 255, 256, 257, 258, 259, 344, 223, 174,
|
|
321, 145, 188, 377, 347, 148, 144, 349, 222, 224,
|
|
340, 341, 187, 193, 376, 194, 375, 374, 194, 143,
|
|
373, 351, 95, 10, 194, 59, 116, 195, 372, 371,
|
|
195, 179, 413, 86, 370, 58, 195, 155, 156, 157,
|
|
158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
|
|
168, 169, 53, 358, 147, 421, 146, 82, 85, 37,
|
|
1, 170, 359, 361, 194, 363, 117, 120, 110, 67,
|
|
115, 364, 365, 83, 117, 120, 195, 121, 119, 52,
|
|
51, 122, 118, 178, 177, 121, 119, 382, 63, 122,
|
|
118, 9, 9, 50, 142, 112, 114, 113, 194, 8,
|
|
49, 153, 388, 38, 140, 390, 356, 48, 196, 47,
|
|
195, 355, 313, 398, 399, 400, 394, 93, 46, 401,
|
|
44, 405, 404, 407, 406, 414, 354, 279, 151, 209,
|
|
43, 152, 389, 42, 415, 416, 194, 289, 357, 417,
|
|
383, 41, 54, 295, 234, 419, 418, 387, 195, 325,
|
|
278, 117, 120, 94, 420, 232, 274, 87, 408, 117,
|
|
120, 181, 121, 119, 427, 194, 122, 118, 277, 56,
|
|
121, 119, 291, 292, 122, 118, 293, 195, 137, 0,
|
|
0, 0, 0, 0, 306, 0, 0, 280, 282, 284,
|
|
285, 286, 294, 296, 299, 300, 301, 302, 303, 307,
|
|
308, 0, 279, 281, 283, 287, 288, 290, 297, 92,
|
|
142, 298, 289, 0, 0, 304, 305, 309, 295, 90,
|
|
140, 0, 275, 213, 0, 278, 92, 226, 138, 59,
|
|
0, 0, 93, 93, 0, 263, 90, 0, 0, 58,
|
|
0, 0, 117, 120, 88, 0, 0, 291, 292, 93,
|
|
0, 293, 0, 121, 119, 0, 0, 122, 118, 306,
|
|
0, 82, 280, 282, 284, 285, 286, 294, 296, 299,
|
|
300, 301, 302, 303, 307, 308, 0, 83, 281, 283,
|
|
287, 288, 290, 297, 0, 0, 298, 178, 177, 0,
|
|
304, 305, 309, 59, 0, 116, 57, 84, 0, 60,
|
|
0, 0, 22, 58, 117, 120, 210, 0, 0, 61,
|
|
0, 0, 261, 0, 0, 121, 119, 0, 0, 122,
|
|
118, 0, 96, 98, 0, 82, 0, 0, 0, 0,
|
|
0, 18, 19, 107, 108, 20, 0, 110, 111, 115,
|
|
97, 83, 0, 0, 0, 0, 68, 69, 70, 71,
|
|
72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
|
|
0, 0, 0, 13, 112, 114, 113, 24, 0, 0,
|
|
0, 30, 0, 0, 31, 32, 65, 59, 39, 0,
|
|
57, 84, 0, 60, 0, 0, 22, 58, 0, 0,
|
|
0, 0, 233, 61, 0, 0, 188, 0, 0, 236,
|
|
0, 0, 0, 239, 0, 0, 187, 353, 0, 82,
|
|
0, 0, 0, 0, 59, 18, 19, 0, 0, 20,
|
|
179, 0, 0, 0, 58, 83, 352, 0, 189, 0,
|
|
68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
|
|
78, 79, 80, 81, 190, 384, 82, 13, 0, 0,
|
|
0, 24, 0, 0, 0, 30, 0, 0, 31, 32,
|
|
65, 59, 83, 0, 57, 84, 0, 60, 0, 0,
|
|
22, 58, 178, 177, 0, 0, 0, 61, 0, 117,
|
|
120, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
121, 119, 0, 82, 122, 118, 0, 196, 0, 18,
|
|
19, 17, 36, 20, 0, 0, 0, 22, 0, 83,
|
|
0, 0, 0, 0, 68, 69, 70, 71, 72, 73,
|
|
74, 75, 76, 77, 78, 79, 80, 81, 0, 0,
|
|
0, 13, 0, 0, 0, 24, 18, 19, 0, 30,
|
|
20, 0, 31, 32, 65, 0, 0, 0, 0, 0,
|
|
0, 11, 12, 14, 15, 16, 21, 23, 25, 26,
|
|
27, 28, 29, 33, 34, 116, 0, 0, 13, 0,
|
|
0, 0, 24, 212, 0, 0, 30, 0, 0, 31,
|
|
32, 35, 0, 0, 116, 0, 0, 0, 0, 0,
|
|
0, 0, 96, 98, 99, 0, 100, 101, 102, 103,
|
|
104, 105, 106, 107, 108, 109, 0, 110, 111, 115,
|
|
97, 96, 98, 99, 0, 100, 101, 102, 103, 104,
|
|
105, 106, 107, 108, 109, 0, 110, 111, 115, 97,
|
|
116, 0, 0, 0, 112, 114, 113, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 116,
|
|
0, 0, 0, 112, 114, 113, 0, 96, 98, 99,
|
|
0, 100, 101, 102, 0, 104, 105, 106, 107, 108,
|
|
109, 0, 110, 111, 115, 97, 96, 98, 99, 0,
|
|
100, 101, 0, 116, 104, 105, 0, 107, 108, 109,
|
|
0, 110, 111, 115, 97, 312, 0, 0, 0, 112,
|
|
114, 113, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 98, 0, 0, 0, 0, 0, 0, 112, 114,
|
|
113, 107, 108, 0, 0, 110, 0, 115, 97, 117,
|
|
120, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
121, 119, 0, 0, 122, 118, 0, 0, 327, 0,
|
|
0, 0, 112, 114, 113, 326, 0, 0, 0, 330,
|
|
331, 329, 336, 338, 335, 337, 332, 333, 334, 339,
|
|
393, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 330, 331, 329, 336, 338, 335, 337, 332, 333,
|
|
334, 339,
|
|
}
|
|
|
|
var yyPact = [...]int16{
|
|
62, 222, 749, 749, 628, 6, -1000, -1000, -1000, 217,
|
|
-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, 484, -1000, 280, -1000,
|
|
830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, 523, 20, 201, -1000, -1000,
|
|
712, -1000, 712, 187, -1000, 144, 202, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, -1000, 468, -1000, -1000, 259, -1000, -1000,
|
|
312, 261, -1000, -1000, 22, -1000, -58, -58, -58, -58,
|
|
-58, -58, -58, -58, -58, -58, -58, -58, -58, -58,
|
|
-58, -58, 167, -1000, -1000, 149, 47, 276, 276, 276,
|
|
276, 276, 276, 201, -46, -1000, 169, 169, 544, -1000,
|
|
811, 461, 272, -17, -1000, 70, 276, 218, -1000, -1000,
|
|
56, 214, -1000, -1000, 467, -1000, 179, -1000, 176, 647,
|
|
712, -1000, -65, -44, -1000, 712, 712, 712, 712, 712,
|
|
712, 712, 712, 712, 712, 712, 712, 712, 712, 712,
|
|
-1000, -1000, -1000, 480, 174, 155, 523, -1000, -1000, 276,
|
|
-1000, 152, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 253,
|
|
253, 208, -1000, 523, -1000, 276, 144, -8, -8, -17,
|
|
-17, -17, -17, -1000, -1000, -1000, 460, -1000, -1000, 191,
|
|
-1000, 830, -1000, -1000, -1000, 948, -1000, 352, -1000, 81,
|
|
-1000, -1000, -1000, -1000, -1000, 57, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, 21, 136, 68, -1000, -1000, -1000, 991,
|
|
929, 169, 169, 169, 169, 272, 272, 541, 541, 541,
|
|
895, 876, 541, 541, 895, 272, 272, 541, 272, 929,
|
|
-1000, 111, 97, 276, -17, 69, 276, 461, 29, -1000,
|
|
-1000, -1000, 665, -1000, 364, -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, 712, 276, -1000, -1000, -1000, -1000, -1000, -1000, 82,
|
|
82, 17, 82, 92, 92, 185, 88, -1000, -1000, 288,
|
|
283, 282, 274, 271, 270, 268, 257, 235, 230, 227,
|
|
-1000, -1000, -1000, -1000, -1000, 28, 276, 378, -1000, 698,
|
|
-1000, 151, -1000, -1000, -1000, 385, -1000, 830, 370, -1000,
|
|
-1000, -1000, 82, -1000, 16, 14, 1013, -1000, -1000, -1000,
|
|
33, 164, 164, 164, 253, 165, 165, 33, 165, 33,
|
|
-66, -1000, 285, -1000, 276, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, 82, 82, -1000, -1000, -1000, 82, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, 164, -1000, -1000, -1000, -1000, -1000, -1000,
|
|
-1000, -1000, -1000, 276, 293, -1000, -1000, -1000, 114, -1000,
|
|
170, -1000, 46, -1000, -1000, -1000, -1000, -1000,
|
|
}
|
|
|
|
var yyPgo = [...]int16{
|
|
0, 438, 13, 429, 6, 15, 428, 348, 23, 421,
|
|
10, 418, 14, 283, 359, 417, 16, 416, 28, 12,
|
|
415, 413, 7, 409, 9, 5, 406, 3, 2, 4,
|
|
404, 25, 1, 402, 401, 27, 199, 393, 391, 86,
|
|
390, 389, 26, 388, 38, 380, 11, 378, 369, 367,
|
|
361, 360, 353, 340, 339, 312, 0, 329, 8, 321,
|
|
320, 319,
|
|
}
|
|
|
|
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,
|
|
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, 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,
|
|
}
|
|
|
|
var yyR2 = [...]int8{
|
|
0, 2, 2, 2, 2, 2, 2, 1, 1, 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, 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,
|
|
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, 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,
|
|
-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, 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, 62, 63,
|
|
64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
|
|
74, 75, 41, 57, 13, -55, -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, 20, -2,
|
|
12, -10, 2, 20, 7, 2, 4, 2, 4, 24,
|
|
-36, -43, -38, -50, 78, -36, -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,
|
|
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, 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,
|
|
}
|
|
|
|
var yyDef = [...]int16{
|
|
0, -2, 135, 135, 0, 0, 7, 6, 1, 135,
|
|
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, 0, 2, -2, 3,
|
|
4, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
|
17, 18, 19, 20, 21, 22, 0, 113, 240, 241,
|
|
0, 251, 0, 90, 91, 131, 0, 275, -2, -2,
|
|
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
|
|
-2, -2, 234, 235, 0, 5, 105, 0, 134, 137,
|
|
0, 141, 145, 252, 146, 150, 46, 46, 46, 46,
|
|
46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
|
|
46, 46, 0, 74, 75, 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, 132, 0, 138, 0, 144, 0, 149,
|
|
0, 45, 50, 51, 47, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
72, 73, 255, 0, 0, 0, 262, 263, 264, 0,
|
|
76, 0, 78, 246, 247, 79, 80, 242, 243, 0,
|
|
0, 0, 87, 71, 265, 0, 0, 267, 268, 269,
|
|
270, 271, 272, 23, 24, 27, 0, 57, 28, 0,
|
|
66, 68, 70, 276, 273, 0, 92, 0, 97, 0,
|
|
103, 236, 237, 238, 239, 0, 133, 136, 139, 142,
|
|
140, 143, 148, 151, 153, 156, 160, 161, 162, 0,
|
|
29, 0, 0, -2, -2, 30, 31, 32, 33, 34,
|
|
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
|
|
256, 0, 0, 0, 266, 0, 0, 0, 0, 244,
|
|
245, 81, 0, 86, 0, 56, 59, 61, 62, 63,
|
|
204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
|
|
214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
|
|
224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
|
|
65, 69, 0, 93, 95, 98, 102, 99, 101, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 166, 168, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
48, 49, 52, 254, 53, 0, 0, 0, 257, 0,
|
|
77, 0, 83, 85, 54, 0, 60, 67, 0, 152,
|
|
248, 154, 0, 157, 0, 0, 0, 164, 169, 165,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 258, 0, 261, 0, 82, 84, 55, 58, 274,
|
|
155, 0, 0, 163, 167, 170, 0, 250, 171, 172,
|
|
173, 174, 175, 0, 176, 177, 178, 179, 180, 186,
|
|
187, 188, 189, 0, 0, 158, 159, 249, 0, 184,
|
|
0, 259, 0, 182, 185, 260, 181, 183,
|
|
}
|
|
|
|
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, 103, 104, 105,
|
|
}
|
|
|
|
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 23:
|
|
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 24:
|
|
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 25:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, yyDollar[2].node)
|
|
}
|
|
case 26:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("aggregation", "")
|
|
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, Expressions{})
|
|
}
|
|
case 27:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &AggregateExpr{
|
|
Grouping: yyDollar[2].strings,
|
|
}
|
|
}
|
|
case 28:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &AggregateExpr{
|
|
Grouping: yyDollar[2].strings,
|
|
Without: true,
|
|
}
|
|
}
|
|
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 43:
|
|
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-4 : yypt+1]
|
|
{
|
|
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
|
|
}
|
|
case 46:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.node = &BinaryExpr{
|
|
VectorMatching: &VectorMatching{Card: CardOneToOne},
|
|
}
|
|
}
|
|
case 47:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &BinaryExpr{
|
|
VectorMatching: &VectorMatching{Card: CardOneToOne},
|
|
ReturnBool: true,
|
|
}
|
|
}
|
|
case 48:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[1].node
|
|
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
|
|
}
|
|
case 49:
|
|
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 52:
|
|
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 53:
|
|
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 54:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.strings = yyDollar[2].strings
|
|
}
|
|
case 55:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.strings = yyDollar[2].strings
|
|
}
|
|
case 56:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.strings = []string{}
|
|
}
|
|
case 57:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "\"(\"")
|
|
yyVAL.strings = nil
|
|
}
|
|
case 58:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val)
|
|
}
|
|
case 59:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.strings = []string{yyDollar[1].item.Val}
|
|
}
|
|
case 60:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"")
|
|
yyVAL.strings = yyDollar[1].strings
|
|
}
|
|
case 61:
|
|
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 62:
|
|
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 63:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("grouping opts", "label")
|
|
yyVAL.item = Item{}
|
|
}
|
|
case 64:
|
|
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 65:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
}
|
|
case 66:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = Expressions{}
|
|
}
|
|
case 67:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
|
|
}
|
|
case 68:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
|
|
}
|
|
case 69:
|
|
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:
|
|
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 71:
|
|
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 72:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
yylex.(*parser).addOffset(yyDollar[1].node, time.Duration(math.Round(numLit.Val*float64(time.Second))))
|
|
yyVAL.node = yyDollar[1].node
|
|
break
|
|
}
|
|
yylex.(*parser).addOffsetExpr(yyDollar[1].node, yyDollar[3].node.(*DurationExpr))
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 73:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("offset", "number, duration, or step()")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 74:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).setAnchored(yyDollar[1].node)
|
|
}
|
|
case 75:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).setSmoothed(yyDollar[1].node)
|
|
}
|
|
case 76:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 77:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 78:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("@", "timestamp")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 81:
|
|
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(math.Round(numLit.Val * float64(time.Second)))
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
yyVAL.node = &MatrixSelector{
|
|
VectorSelector: yyDollar[1].node.(Expr),
|
|
Range: rangeNl,
|
|
RangeExpr: rangeExpr,
|
|
EndPos: yylex.(*parser).lastClosing,
|
|
}
|
|
}
|
|
case 82:
|
|
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(math.Round(numLit.Val * float64(time.Second)))
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
if numLit, ok := yyDollar[5].node.(*NumberLiteral); ok {
|
|
stepNl = time.Duration(math.Round(numLit.Val * float64(time.Second)))
|
|
}
|
|
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 83:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
var rangeNl time.Duration
|
|
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
|
|
rangeNl = time.Duration(math.Round(numLit.Val * float64(time.Second)))
|
|
}
|
|
rangeExpr, _ := yyDollar[3].node.(*DurationExpr)
|
|
yyVAL.node = &SubqueryExpr{
|
|
Expr: yyDollar[1].node.(Expr),
|
|
Range: rangeNl,
|
|
RangeExpr: rangeExpr,
|
|
EndPos: yyDollar[5].item.Pos + 1,
|
|
}
|
|
}
|
|
case 84:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery selector", "\"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 85:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery selector", "number, duration, or step() or \"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 86:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 87:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("subquery or range selector", "number, duration, or step()")
|
|
yyVAL.node = yyDollar[1].node
|
|
}
|
|
case 88:
|
|
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 89:
|
|
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 90:
|
|
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 91:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
vs := yyDollar[1].node.(*VectorSelector)
|
|
yylex.(*parser).assembleVectorSelector(vs)
|
|
yyVAL.node = vs
|
|
}
|
|
case 92:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: yyDollar[2].matchers,
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
|
|
}
|
|
}
|
|
case 93:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: yyDollar[2].matchers,
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
|
|
}
|
|
}
|
|
case 94:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.node = &VectorSelector{
|
|
LabelMatchers: []*labels.Matcher{},
|
|
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
|
|
}
|
|
}
|
|
case 95:
|
|
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 96:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
|
|
}
|
|
case 97:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
|
|
yyVAL.matchers = yyDollar[1].matchers
|
|
}
|
|
case 98:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
|
|
}
|
|
case 99:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
|
|
}
|
|
case 100:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.matcher = yylex.(*parser).newMetricNameMatcher(yyDollar[1].item)
|
|
}
|
|
case 101:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "string")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 102:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "string")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 103:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "label matching operator")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 104:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
|
|
yyVAL.matcher = nil
|
|
}
|
|
case 105:
|
|
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:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.labels = yyDollar[1].labels
|
|
}
|
|
case 132:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New(yyDollar[2].lblList...)
|
|
}
|
|
case 133:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New(yyDollar[2].lblList...)
|
|
}
|
|
case 134:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New()
|
|
}
|
|
case 135:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.labels = labels.New()
|
|
}
|
|
case 136:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label)
|
|
}
|
|
case 137:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.lblList = []labels.Label{yyDollar[1].label}
|
|
}
|
|
case 138:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
|
|
yyVAL.lblList = yyDollar[1].lblList
|
|
}
|
|
case 139:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
|
|
}
|
|
case 140:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
|
|
}
|
|
case 141:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val}
|
|
}
|
|
case 142:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "string")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 143:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "string")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 144:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "\"=\"")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 145:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("label set", "identifier or \"}\"")
|
|
yyVAL.label = labels.Label{}
|
|
}
|
|
case 146:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).generatedParserResult = &seriesDescription{
|
|
labels: yyDollar[1].labels,
|
|
values: yyDollar[2].series,
|
|
}
|
|
}
|
|
case 147:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{}
|
|
}
|
|
case 148:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
|
|
}
|
|
case 149:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.series = yyDollar[1].series
|
|
}
|
|
case 150:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("series values", "")
|
|
yyVAL.series = nil
|
|
}
|
|
case 151:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Omitted: true}}
|
|
}
|
|
case 152:
|
|
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 153:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
|
|
}
|
|
case 154:
|
|
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 155:
|
|
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 156:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}}
|
|
}
|
|
case 157:
|
|
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 158:
|
|
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 159:
|
|
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 160:
|
|
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 163:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
|
|
}
|
|
case 164:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
|
|
}
|
|
case 165:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
m := yylex.(*parser).newMap()
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
|
|
}
|
|
case 166:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
m := yylex.(*parser).newMap()
|
|
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
|
|
}
|
|
case 167:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
|
|
}
|
|
case 168:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yyDollar[1].descriptors
|
|
}
|
|
case 169:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
|
|
}
|
|
case 170:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["schema"] = yyDollar[3].int
|
|
}
|
|
case 171:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["sum"] = yyDollar[3].float
|
|
}
|
|
case 172:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["count"] = yyDollar[3].float
|
|
}
|
|
case 173:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["z_bucket"] = yyDollar[3].float
|
|
}
|
|
case 174:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
|
|
}
|
|
case 175:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set
|
|
}
|
|
case 176:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
|
|
}
|
|
case 177:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["offset"] = yyDollar[3].int
|
|
}
|
|
case 178:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
|
|
}
|
|
case 179:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["n_offset"] = yyDollar[3].int
|
|
}
|
|
case 180:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.descriptors = yylex.(*parser).newMap()
|
|
yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item
|
|
}
|
|
case 181:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = yyDollar[2].bucket_set
|
|
}
|
|
case 182:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = yyDollar[2].bucket_set
|
|
}
|
|
case 183:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
|
|
}
|
|
case 184:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.bucket_set = []float64{yyDollar[1].float}
|
|
}
|
|
case 240:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &NumberLiteral{
|
|
Val: yylex.(*parser).number(yyDollar[1].item.Val),
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
}
|
|
}
|
|
case 241:
|
|
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 242:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
|
|
}
|
|
case 243:
|
|
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 244:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.float = yyDollar[2].float
|
|
}
|
|
case 245:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.float = -yyDollar[2].float
|
|
}
|
|
case 248:
|
|
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 249:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
yyVAL.int = -int64(yyDollar[2].uint)
|
|
}
|
|
case 250:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.int = int64(yyDollar[1].uint)
|
|
}
|
|
case 251:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
{
|
|
yyVAL.node = &StringLiteral{
|
|
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
|
|
PosRange: yyDollar[1].item.PositionRange(),
|
|
}
|
|
}
|
|
case 252:
|
|
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 253:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
{
|
|
yyVAL.strings = nil
|
|
}
|
|
case 255:
|
|
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 256:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
{
|
|
nl := yyDollar[2].node.(*NumberLiteral)
|
|
if yyDollar[1].item.Typ == SUB {
|
|
nl.Val *= -1
|
|
}
|
|
if nl.Val > 1<<63/1e9 || nl.Val < -(1<<63)/1e9 {
|
|
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "duration out of range")
|
|
yyVAL.node = &NumberLiteral{Val: 0}
|
|
break
|
|
}
|
|
nl.PosRange.Start = yyDollar[1].item.Pos
|
|
yyVAL.node = nl
|
|
}
|
|
case 257:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: STEP,
|
|
StartPos: yyDollar[1].item.PositionRange().Start,
|
|
EndPos: yyDollar[3].item.PositionRange().End,
|
|
}
|
|
}
|
|
case 258:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: yyDollar[1].item.Typ,
|
|
RHS: &DurationExpr{
|
|
Op: STEP,
|
|
StartPos: yyDollar[2].item.PositionRange().Start,
|
|
EndPos: yyDollar[4].item.PositionRange().End,
|
|
},
|
|
StartPos: yyDollar[1].item.Pos,
|
|
}
|
|
}
|
|
case 259:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: yyDollar[1].item.Typ,
|
|
StartPos: yyDollar[1].item.PositionRange().Start,
|
|
EndPos: yyDollar[6].item.PositionRange().End,
|
|
LHS: yyDollar[3].node.(Expr),
|
|
RHS: yyDollar[5].node.(Expr),
|
|
}
|
|
}
|
|
case 260:
|
|
yyDollar = yyS[yypt-7 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: yyDollar[1].item.Typ,
|
|
StartPos: yyDollar[1].item.Pos,
|
|
EndPos: yyDollar[6].node.PositionRange().End,
|
|
RHS: &DurationExpr{
|
|
Op: yyDollar[2].item.Typ,
|
|
StartPos: yyDollar[2].item.PositionRange().Start,
|
|
EndPos: yyDollar[6].node.PositionRange().End,
|
|
LHS: yyDollar[4].node.(Expr),
|
|
RHS: yyDollar[6].node.(Expr),
|
|
},
|
|
}
|
|
}
|
|
case 261:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
{
|
|
de := yyDollar[3].node.(*DurationExpr)
|
|
de.Wrapped = true
|
|
if yyDollar[1].item.Typ == SUB {
|
|
yyVAL.node = &DurationExpr{
|
|
Op: SUB,
|
|
RHS: de,
|
|
StartPos: yyDollar[1].item.Pos,
|
|
}
|
|
break
|
|
}
|
|
yyVAL.node = yyDollar[3].node
|
|
}
|
|
case 265:
|
|
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 266:
|
|
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 267:
|
|
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 268:
|
|
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 269:
|
|
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 270:
|
|
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 271:
|
|
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 272:
|
|
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 273:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: STEP,
|
|
StartPos: yyDollar[1].item.PositionRange().Start,
|
|
EndPos: yyDollar[3].item.PositionRange().End,
|
|
}
|
|
}
|
|
case 274:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
{
|
|
yyVAL.node = &DurationExpr{
|
|
Op: yyDollar[1].item.Typ,
|
|
StartPos: yyDollar[1].item.PositionRange().Start,
|
|
EndPos: yyDollar[6].item.PositionRange().End,
|
|
LHS: yyDollar[3].node.(Expr),
|
|
RHS: yyDollar[5].node.(Expr),
|
|
}
|
|
}
|
|
case 276:
|
|
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 */
|
|
}
|