github.com/GuanceCloud/cliutils@v1.1.21/filter/gram_y.go (about) 1 // Code generated by goyacc -l -o gram_y.go gram.y. DO NOT EDIT. 2 package filter 3 4 import __yyfmt__ "fmt" 5 6 import ( 7 "time" 8 ) 9 10 type yySymType struct { 11 yys int 12 node Node 13 nodes []Node 14 15 item Item 16 17 strings []string 18 float float64 19 duration time.Duration 20 timestamp time.Time 21 } 22 23 const EQ = 57346 24 const COLON = 57347 25 const SEMICOLON = 57348 26 const COMMA = 57349 27 const COMMENT = 57350 28 const DURATION = 57351 29 const EOF = 57352 30 const ERROR = 57353 31 const ID = 57354 32 const LEFT_BRACE = 57355 33 const LEFT_BRACKET = 57356 34 const LEFT_PAREN = 57357 35 const NUMBER = 57358 36 const RIGHT_BRACE = 57359 37 const RIGHT_BRACKET = 57360 38 const RIGHT_PAREN = 57361 39 const SPACE = 57362 40 const STRING = 57363 41 const QUOTED_STRING = 57364 42 const NAMESPACE = 57365 43 const DOT = 57366 44 const operatorsStart = 57367 45 const ADD = 57368 46 const DIV = 57369 47 const GTE = 57370 48 const GT = 57371 49 const LT = 57372 50 const LTE = 57373 51 const MOD = 57374 52 const MUL = 57375 53 const NEQ = 57376 54 const POW = 57377 55 const SUB = 57378 56 const operatorsEnd = 57379 57 const keywordsStart = 57380 58 const AS = 57381 59 const ASC = 57382 60 const AUTO = 57383 61 const BY = 57384 62 const MATCH = 57385 63 const NOT_MATCH = 57386 64 const DESC = 57387 65 const TRUE = 57388 66 const FALSE = 57389 67 const FILTER = 57390 68 const IDENTIFIER = 57391 69 const IN = 57392 70 const NOT_IN = 57393 71 const AND = 57394 72 const LINK = 57395 73 const LIMIT = 57396 74 const SLIMIT = 57397 75 const OR = 57398 76 const NIL = 57399 77 const NULL = 57400 78 const OFFSET = 57401 79 const SOFFSET = 57402 80 const ORDER = 57403 81 const RE = 57404 82 const INT = 57405 83 const FLOAT = 57406 84 const POINT = 57407 85 const TIMEZONE = 57408 86 const WITH = 57409 87 const keywordsEnd = 57410 88 const startSymbolsStart = 57411 89 const START_STMTS = 57412 90 const START_BINARY_EXPRESSION = 57413 91 const START_FUNC_EXPRESSION = 57414 92 const START_WHERE_CONDITION = 57415 93 const startSymbolsEnd = 57416 94 95 var yyToknames = [...]string{ 96 "$end", 97 "error", 98 "$unk", 99 "EQ", 100 "COLON", 101 "SEMICOLON", 102 "COMMA", 103 "COMMENT", 104 "DURATION", 105 "EOF", 106 "ERROR", 107 "ID", 108 "LEFT_BRACE", 109 "LEFT_BRACKET", 110 "LEFT_PAREN", 111 "NUMBER", 112 "RIGHT_BRACE", 113 "RIGHT_BRACKET", 114 "RIGHT_PAREN", 115 "SPACE", 116 "STRING", 117 "QUOTED_STRING", 118 "NAMESPACE", 119 "DOT", 120 "operatorsStart", 121 "ADD", 122 "DIV", 123 "GTE", 124 "GT", 125 "LT", 126 "LTE", 127 "MOD", 128 "MUL", 129 "NEQ", 130 "POW", 131 "SUB", 132 "operatorsEnd", 133 "keywordsStart", 134 "AS", 135 "ASC", 136 "AUTO", 137 "BY", 138 "MATCH", 139 "NOT_MATCH", 140 "DESC", 141 "TRUE", 142 "FALSE", 143 "FILTER", 144 "IDENTIFIER", 145 "IN", 146 "NOT_IN", 147 "AND", 148 "LINK", 149 "LIMIT", 150 "SLIMIT", 151 "OR", 152 "NIL", 153 "NULL", 154 "OFFSET", 155 "SOFFSET", 156 "ORDER", 157 "RE", 158 "INT", 159 "FLOAT", 160 "POINT", 161 "TIMEZONE", 162 "WITH", 163 "keywordsEnd", 164 "startSymbolsStart", 165 "START_STMTS", 166 "START_BINARY_EXPRESSION", 167 "START_FUNC_EXPRESSION", 168 "START_WHERE_CONDITION", 169 "startSymbolsEnd", 170 } 171 172 var yyStatenames = [...]string{} 173 174 const yyEofCode = 1 175 const yyErrCode = 2 176 const yyInitialStackSize = 16 177 178 var yyExca = [...]int{ 179 -1, 1, 180 1, -1, 181 -2, 0, 182 -1, 11, 183 7, 52, 184 17, 52, 185 -2, 10, 186 -1, 12, 187 7, 53, 188 17, 53, 189 -2, 8, 190 -1, 20, 191 15, 72, 192 -2, 12, 193 -1, 21, 194 15, 73, 195 -2, 13, 196 -1, 107, 197 15, 72, 198 -2, 12, 199 } 200 201 const yyPrivate = 57344 202 203 const yyLast = 342 204 205 var yyAct = [...]int{ 206 20, 103, 56, 13, 69, 3, 21, 23, 68, 67, 207 14, 122, 66, 109, 18, 34, 58, 61, 62, 63, 208 64, 65, 34, 101, 59, 60, 29, 123, 12, 11, 209 118, 68, 10, 73, 117, 72, 30, 16, 45, 46, 210 47, 48, 51, 52, 53, 54, 55, 56, 57, 75, 211 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 212 86, 87, 88, 31, 49, 12, 11, 95, 95, 98, 213 99, 120, 107, 96, 96, 105, 2, 74, 100, 46, 214 108, 94, 97, 119, 53, 54, 71, 56, 70, 92, 215 112, 112, 112, 112, 91, 90, 113, 113, 113, 113, 216 111, 111, 111, 111, 114, 115, 116, 112, 89, 45, 217 46, 7, 124, 113, 4, 53, 54, 111, 56, 57, 218 121, 107, 129, 135, 105, 112, 131, 110, 110, 110, 219 110, 113, 8, 112, 1, 111, 26, 19, 22, 113, 220 24, 124, 124, 111, 110, 29, 134, 132, 15, 32, 221 124, 6, 130, 128, 34, 30, 124, 124, 25, 40, 222 42, 127, 133, 44, 17, 104, 39, 126, 125, 41, 223 110, 5, 102, 43, 9, 28, 33, 0, 0, 37, 224 38, 0, 31, 29, 0, 106, 15, 32, 0, 0, 225 35, 36, 34, 30, 0, 27, 0, 40, 0, 0, 226 0, 0, 29, 0, 39, 15, 32, 41, 0, 0, 227 0, 34, 30, 0, 0, 0, 40, 37, 38, 0, 228 31, 0, 0, 39, 0, 0, 41, 0, 35, 36, 229 0, 58, 0, 27, 0, 0, 37, 38, 0, 31, 230 0, 0, 0, 0, 0, 0, 93, 35, 36, 0, 231 0, 0, 27, 45, 46, 47, 48, 51, 52, 53, 232 54, 55, 56, 57, 29, 0, 0, 0, 32, 0, 233 0, 0, 0, 34, 30, 0, 0, 0, 40, 49, 234 0, 0, 0, 50, 0, 39, 0, 0, 41, 58, 235 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 236 58, 31, 0, 0, 0, 0, 0, 0, 0, 35, 237 36, 45, 46, 47, 48, 51, 52, 53, 54, 55, 238 56, 57, 45, 46, 47, 48, 51, 52, 53, 54, 239 55, 56, 57, 0, 0, 0, 0, 49, 0, 0, 240 0, 50, 241 } 242 243 var yyPact = [...]int{ 244 3, 104, 98, -1000, -1000, 126, -1000, 190, 98, 156, 245 -1000, -1000, -1000, 285, -26, 190, -1000, -1000, -12, -15, 246 -16, -20, -1000, -1000, -1000, -1000, -1000, 73, 71, -1000, 247 -1000, 20, -1000, 17, -1000, -1000, -1000, -1000, -1000, -1000, 248 -1000, -1000, -1000, -1000, 190, 190, 190, 190, 190, 190, 249 190, 190, 190, 190, 190, 190, 190, 190, 190, 94, 250 81, 80, 75, 227, -1000, -1000, 14, 14, 14, 14, 251 1, 171, -6, -1000, -1000, 52, -33, 83, 83, 296, 252 12, 83, 83, -33, -33, 83, -33, 52, 83, 252, 253 252, 252, 252, -1000, -1000, -16, -20, -1000, -1000, -1000, 254 15, 11, 64, -1000, -1000, 285, 252, 7, 8, 150, 255 -1000, -1000, -16, -20, 149, 143, 135, -1000, -1000, -1000, 256 171, 134, 133, -1000, 252, -1000, -1000, -1000, -1000, -1000, 257 -1000, 285, 252, -1000, 105, -1000, 258 } 259 260 var yyPgo = [...]int{ 261 0, 176, 175, 0, 174, 172, 171, 151, 37, 13, 262 6, 21, 3, 1, 14, 165, 20, 32, 164, 10, 263 158, 7, 140, 138, 137, 136, 134, 264 } 265 266 var yyR1 = [...]int{ 267 0, 26, 26, 26, 6, 6, 12, 12, 12, 12, 268 12, 12, 19, 19, 10, 10, 1, 1, 21, 22, 269 22, 20, 20, 16, 14, 24, 24, 5, 5, 5, 270 5, 9, 9, 9, 8, 8, 8, 8, 8, 8, 271 25, 13, 13, 13, 15, 15, 7, 7, 4, 4, 272 4, 4, 17, 17, 11, 11, 11, 11, 11, 11, 273 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 274 11, 11, 2, 2, 23, 23, 18, 18, 3, 3, 275 3, 276 } 277 278 var yyR2 = [...]int{ 279 0, 2, 2, 1, 1, 3, 1, 1, 1, 1, 280 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 281 1, 1, 1, 3, 4, 3, 3, 3, 2, 1, 282 0, 3, 1, 0, 1, 1, 1, 1, 1, 1, 283 1, 1, 1, 3, 3, 5, 3, 0, 1, 3, 284 2, 0, 1, 1, 3, 3, 3, 3, 3, 3, 285 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 286 5, 5, 1, 1, 1, 2, 4, 4, 1, 1, 287 4, 288 } 289 290 var yyChk = [...]int{ 291 -1000, -26, 73, 2, 10, -6, -7, 13, 6, -4, 292 -17, -11, -16, -12, -19, 15, -8, -18, -14, -24, 293 -3, -10, -23, -21, -22, -20, -25, 62, -2, 12, 294 22, 49, 16, -1, 21, 57, 58, 46, 47, 33, 295 26, 36, -7, 17, 7, 26, 27, 28, 29, 52, 296 56, 30, 31, 32, 33, 34, 35, 36, 4, 50, 297 51, 43, 44, -12, -16, -11, 24, 24, 24, 24, 298 15, 15, 15, 16, -17, -12, -12, -12, -12, -12, 299 -12, -12, -12, -12, -12, -12, -12, -12, -12, 14, 300 14, 14, 14, 19, -14, -3, -10, -14, -3, -3, 301 -21, 22, -5, -13, -15, -12, 14, -3, -21, -9, 302 -8, -19, -3, -10, -9, -9, -9, 19, 19, 19, 303 7, -9, 4, 19, 7, 18, 18, 18, 18, -13, 304 18, -12, 14, -8, -9, 18, 305 } 306 307 var yyDef = [...]int{ 308 0, -2, 47, 3, 2, 1, 4, 51, 47, 0, 309 48, -2, -2, 0, 36, 0, 6, 7, 9, 11, 310 -2, -2, 34, 35, 37, 38, 39, 0, 0, 78, 311 79, 0, 74, 0, 18, 19, 20, 21, 22, 40, 312 16, 17, 5, 46, 50, 0, 0, 0, 0, 0, 313 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314 0, 0, 0, 0, 8, 10, 0, 0, 0, 0, 315 0, 30, 0, 75, 49, 54, 55, 56, 57, 58, 316 59, 60, 61, 62, 63, 64, 65, 66, 67, 33, 317 33, 33, 33, 23, 25, 72, 73, 26, 14, 15, 318 0, 0, 0, 29, 41, 42, 33, -2, 0, 0, 319 32, 36, 12, 13, 0, 0, 0, 76, 77, 24, 320 28, 0, 0, 80, 0, 68, 69, 70, 71, 27, 321 43, 44, 33, 31, 0, 45, 322 } 323 324 var yyTok1 = [...]int{ 325 1, 326 } 327 328 var yyTok2 = [...]int{ 329 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 330 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 331 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 332 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 333 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 334 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 335 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 336 72, 73, 74, 337 } 338 339 var yyTok3 = [...]int{ 340 0, 341 } 342 343 var yyErrorMessages = [...]struct { 344 state int 345 token int 346 msg string 347 }{} 348 349 /* parser for yacc output */ 350 351 var ( 352 yyDebug = 0 353 yyErrorVerbose = false 354 ) 355 356 type yyLexer interface { 357 Lex(lval *yySymType) int 358 Error(s string) 359 } 360 361 type yyParser interface { 362 Parse(yyLexer) int 363 Lookahead() int 364 } 365 366 type yyParserImpl struct { 367 lval yySymType 368 stack [yyInitialStackSize]yySymType 369 char int 370 } 371 372 func (p *yyParserImpl) Lookahead() int { 373 return p.char 374 } 375 376 func yyNewParser() yyParser { 377 return &yyParserImpl{} 378 } 379 380 const yyFlag = -1000 381 382 func yyTokname(c int) string { 383 if c >= 1 && c-1 < len(yyToknames) { 384 if yyToknames[c-1] != "" { 385 return yyToknames[c-1] 386 } 387 } 388 return __yyfmt__.Sprintf("tok-%v", c) 389 } 390 391 func yyStatname(s int) string { 392 if s >= 0 && s < len(yyStatenames) { 393 if yyStatenames[s] != "" { 394 return yyStatenames[s] 395 } 396 } 397 return __yyfmt__.Sprintf("state-%v", s) 398 } 399 400 func yyErrorMessage(state, lookAhead int) string { 401 const TOKSTART = 4 402 403 if !yyErrorVerbose { 404 return "syntax error" 405 } 406 407 for _, e := range yyErrorMessages { 408 if e.state == state && e.token == lookAhead { 409 return "syntax error: " + e.msg 410 } 411 } 412 413 res := "syntax error: unexpected " + yyTokname(lookAhead) 414 415 // To match Bison, suggest at most four expected tokens. 416 expected := make([]int, 0, 4) 417 418 // Look for shiftable tokens. 419 base := yyPact[state] 420 for tok := TOKSTART; tok-1 < len(yyToknames); tok++ { 421 if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok { 422 if len(expected) == cap(expected) { 423 return res 424 } 425 expected = append(expected, tok) 426 } 427 } 428 429 if yyDef[state] == -2 { 430 i := 0 431 for yyExca[i] != -1 || yyExca[i+1] != state { 432 i += 2 433 } 434 435 // Look for tokens that we accept or reduce. 436 for i += 2; yyExca[i] >= 0; i += 2 { 437 tok := yyExca[i] 438 if tok < TOKSTART || yyExca[i+1] == 0 { 439 continue 440 } 441 if len(expected) == cap(expected) { 442 return res 443 } 444 expected = append(expected, tok) 445 } 446 447 // If the default action is to accept or reduce, give up. 448 if yyExca[i+1] != 0 { 449 return res 450 } 451 } 452 453 for i, tok := range expected { 454 if i == 0 { 455 res += ", expecting " 456 } else { 457 res += " or " 458 } 459 res += yyTokname(tok) 460 } 461 return res 462 } 463 464 func yylex1(lex yyLexer, lval *yySymType) (char, token int) { 465 token = 0 466 char = lex.Lex(lval) 467 if char <= 0 { 468 token = yyTok1[0] 469 goto out 470 } 471 if char < len(yyTok1) { 472 token = yyTok1[char] 473 goto out 474 } 475 if char >= yyPrivate { 476 if char < yyPrivate+len(yyTok2) { 477 token = yyTok2[char-yyPrivate] 478 goto out 479 } 480 } 481 for i := 0; i < len(yyTok3); i += 2 { 482 token = yyTok3[i+0] 483 if token == char { 484 token = yyTok3[i+1] 485 goto out 486 } 487 } 488 489 out: 490 if token == 0 { 491 token = yyTok2[1] /* unknown char */ 492 } 493 if yyDebug >= 3 { 494 __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char)) 495 } 496 return char, token 497 } 498 499 func yyParse(yylex yyLexer) int { 500 return yyNewParser().Parse(yylex) 501 } 502 503 func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { 504 var yyn int 505 var yyVAL yySymType 506 var yyDollar []yySymType 507 _ = yyDollar // silence set and not used 508 yyS := yyrcvr.stack[:] 509 510 Nerrs := 0 /* number of errors */ 511 Errflag := 0 /* error recovery flag */ 512 yystate := 0 513 yyrcvr.char = -1 514 yytoken := -1 // yyrcvr.char translated into internal numbering 515 defer func() { 516 // Make sure we report no lookahead when not parsing. 517 yystate = -1 518 yyrcvr.char = -1 519 yytoken = -1 520 }() 521 yyp := -1 522 goto yystack 523 524 ret0: 525 return 0 526 527 ret1: 528 return 1 529 530 yystack: 531 /* put a state and value onto the stack */ 532 if yyDebug >= 4 { 533 __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate)) 534 } 535 536 yyp++ 537 if yyp >= len(yyS) { 538 nyys := make([]yySymType, len(yyS)*2) 539 copy(nyys, yyS) 540 yyS = nyys 541 } 542 yyS[yyp] = yyVAL 543 yyS[yyp].yys = yystate 544 545 yynewstate: 546 yyn = yyPact[yystate] 547 if yyn <= yyFlag { 548 goto yydefault /* simple state */ 549 } 550 if yyrcvr.char < 0 { 551 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) 552 } 553 yyn += yytoken 554 if yyn < 0 || yyn >= yyLast { 555 goto yydefault 556 } 557 yyn = yyAct[yyn] 558 if yyChk[yyn] == yytoken { /* valid shift */ 559 yyrcvr.char = -1 560 yytoken = -1 561 yyVAL = yyrcvr.lval 562 yystate = yyn 563 if Errflag > 0 { 564 Errflag-- 565 } 566 goto yystack 567 } 568 569 yydefault: 570 /* default state action */ 571 yyn = yyDef[yystate] 572 if yyn == -2 { 573 if yyrcvr.char < 0 { 574 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) 575 } 576 577 /* look through exception table */ 578 xi := 0 579 for { 580 if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate { 581 break 582 } 583 xi += 2 584 } 585 for xi += 2; ; xi += 2 { 586 yyn = yyExca[xi+0] 587 if yyn < 0 || yyn == yytoken { 588 break 589 } 590 } 591 yyn = yyExca[xi+1] 592 if yyn < 0 { 593 goto ret0 594 } 595 } 596 if yyn == 0 { 597 /* error ... attempt to resume parsing */ 598 switch Errflag { 599 case 0: /* brand new error */ 600 yylex.Error(yyErrorMessage(yystate, yytoken)) 601 Nerrs++ 602 if yyDebug >= 1 { 603 __yyfmt__.Printf("%s", yyStatname(yystate)) 604 __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken)) 605 } 606 fallthrough 607 608 case 1, 2: /* incompletely recovered error ... try again */ 609 Errflag = 3 610 611 /* find a state where "error" is a legal shift action */ 612 for yyp >= 0 { 613 yyn = yyPact[yyS[yyp].yys] + yyErrCode 614 if yyn >= 0 && yyn < yyLast { 615 yystate = yyAct[yyn] /* simulate a shift of "error" */ 616 if yyChk[yystate] == yyErrCode { 617 goto yystack 618 } 619 } 620 621 /* the current p has no shift on "error", pop stack */ 622 if yyDebug >= 2 { 623 __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) 624 } 625 yyp-- 626 } 627 /* there is no state on the stack with an error shift ... abort */ 628 goto ret1 629 630 case 3: /* no shift yet; clobber input char */ 631 if yyDebug >= 2 { 632 __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken)) 633 } 634 if yytoken == yyEofCode { 635 goto ret1 636 } 637 yyrcvr.char = -1 638 yytoken = -1 639 goto yynewstate /* try again in the same state */ 640 } 641 } 642 643 /* reduction by production yyn */ 644 if yyDebug >= 2 { 645 __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) 646 } 647 648 yynt := yyn 649 yypt := yyp 650 _ = yypt // guard against "declared and not used" 651 652 yyp -= yyR2[yyn] 653 // yyp is now the index of $0. Perform the default action. Iff the 654 // reduced production is ε, $1 is possibly out of range. 655 if yyp+1 >= len(yyS) { 656 nyys := make([]yySymType, len(yyS)*2) 657 copy(nyys, yyS) 658 yyS = nyys 659 } 660 yyVAL = yyS[yyp+1] 661 662 /* consult goto table to find next state */ 663 yyn = yyR1[yyn] 664 yyg := yyPgo[yyn] 665 yyj := yyg + yyS[yyp].yys + 1 666 667 if yyj >= yyLast { 668 yystate = yyAct[yyg] 669 } else { 670 yystate = yyAct[yyj] 671 if yyChk[yystate] != -yyn { 672 yystate = yyAct[yyg] 673 } 674 } 675 // dummy call; replaced with literal code 676 switch yynt { 677 678 case 1: 679 yyDollar = yyS[yypt-2 : yypt+1] 680 { 681 yylex.(*parser).parseResult = yyDollar[2].node 682 } 683 case 3: 684 yyDollar = yyS[yypt-1 : yypt+1] 685 { 686 yylex.(*parser).unexpected("", "") 687 } 688 case 4: 689 yyDollar = yyS[yypt-1 : yypt+1] 690 { 691 yyVAL.node = WhereConditions{yyDollar[1].node} 692 } 693 case 5: 694 yyDollar = yyS[yypt-3 : yypt+1] 695 { 696 if yyDollar[3].node != nil { 697 arr := yyDollar[1].node.(WhereConditions) 698 arr = append(arr, yyDollar[3].node) 699 yyVAL.node = arr 700 } else { 701 yyVAL.node = yyDollar[1].node 702 } 703 } 704 case 12: 705 yyDollar = yyS[yypt-1 : yypt+1] 706 { 707 yyVAL.node = &Identifier{Name: yyDollar[1].item.Val} 708 } 709 case 13: 710 yyDollar = yyS[yypt-1 : yypt+1] 711 { 712 yyVAL.node = yyDollar[1].node 713 } 714 case 14: 715 yyDollar = yyS[yypt-3 : yypt+1] 716 { 717 yyVAL.node = &AttrExpr{ 718 Obj: &Identifier{Name: yyDollar[1].item.Val}, 719 Attr: &Identifier{Name: yyDollar[3].item.Val}, 720 } 721 } 722 case 15: 723 yyDollar = yyS[yypt-3 : yypt+1] 724 { 725 yyVAL.node = &AttrExpr{ 726 Obj: yyDollar[1].node.(*AttrExpr), 727 Attr: &Identifier{Name: yyDollar[3].item.Val}, 728 } 729 } 730 case 18: 731 yyDollar = yyS[yypt-1 : yypt+1] 732 { 733 yyVAL.node = &StringLiteral{Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val)} 734 } 735 case 19: 736 yyDollar = yyS[yypt-1 : yypt+1] 737 { 738 yyVAL.node = &NilLiteral{} 739 } 740 case 20: 741 yyDollar = yyS[yypt-1 : yypt+1] 742 { 743 yyVAL.node = &NilLiteral{} 744 } 745 case 21: 746 yyDollar = yyS[yypt-1 : yypt+1] 747 { 748 yyVAL.node = &BoolLiteral{Val: true} 749 } 750 case 22: 751 yyDollar = yyS[yypt-1 : yypt+1] 752 { 753 yyVAL.node = &BoolLiteral{Val: false} 754 } 755 case 23: 756 yyDollar = yyS[yypt-3 : yypt+1] 757 { 758 yyVAL.node = &ParenExpr{Param: yyDollar[2].node} 759 } 760 case 24: 761 yyDollar = yyS[yypt-4 : yypt+1] 762 { 763 yyVAL.node = yylex.(*parser).newFunc(yyDollar[1].item.Val, yyDollar[3].nodes) 764 } 765 case 25: 766 yyDollar = yyS[yypt-3 : yypt+1] 767 { 768 yyVAL.node = &CascadeFunctions{Funcs: []*FuncExpr{yyDollar[1].node.(*FuncExpr), yyDollar[3].node.(*FuncExpr)}} 769 } 770 case 26: 771 yyDollar = yyS[yypt-3 : yypt+1] 772 { 773 fc := yyDollar[1].node.(*CascadeFunctions) 774 fc.Funcs = append(fc.Funcs, yyDollar[3].node.(*FuncExpr)) 775 yyVAL.node = fc 776 } 777 case 27: 778 yyDollar = yyS[yypt-3 : yypt+1] 779 { 780 yyVAL.nodes = append(yyVAL.nodes, yyDollar[3].node) 781 } 782 case 29: 783 yyDollar = yyS[yypt-1 : yypt+1] 784 { 785 yyVAL.nodes = []Node{yyDollar[1].node} 786 } 787 case 30: 788 yyDollar = yyS[yypt-0 : yypt+1] 789 { 790 yyVAL.nodes = nil 791 } 792 case 31: 793 yyDollar = yyS[yypt-3 : yypt+1] 794 { 795 nl := yyVAL.node.(NodeList) 796 nl = append(nl, yyDollar[3].node) 797 yyVAL.node = nl 798 } 799 case 32: 800 yyDollar = yyS[yypt-1 : yypt+1] 801 { 802 yyVAL.node = NodeList{yyDollar[1].node} 803 } 804 case 33: 805 yyDollar = yyS[yypt-0 : yypt+1] 806 { 807 yyVAL.node = NodeList{} 808 } 809 case 40: 810 yyDollar = yyS[yypt-1 : yypt+1] 811 { 812 yyVAL.node = &Star{} 813 } 814 case 43: 815 yyDollar = yyS[yypt-3 : yypt+1] 816 { 817 yyVAL.node = getFuncArgList(yyDollar[2].node.(NodeList)) 818 } 819 case 44: 820 yyDollar = yyS[yypt-3 : yypt+1] 821 { 822 yyVAL.node = &FuncArg{ArgName: yyDollar[1].item.Val, ArgVal: yyDollar[3].node} 823 } 824 case 45: 825 yyDollar = yyS[yypt-5 : yypt+1] 826 { 827 yyVAL.node = &FuncArg{ 828 ArgName: yyDollar[1].item.Val, 829 ArgVal: getFuncArgList(yyDollar[4].node.(NodeList)), 830 } 831 } 832 case 46: 833 yyDollar = yyS[yypt-3 : yypt+1] 834 { 835 yyVAL.node = yylex.(*parser).newWhereConditions(yyDollar[2].nodes) 836 } 837 case 47: 838 yyDollar = yyS[yypt-0 : yypt+1] 839 { 840 yyVAL.node = nil 841 } 842 case 48: 843 yyDollar = yyS[yypt-1 : yypt+1] 844 { 845 yyVAL.nodes = []Node{yyDollar[1].node} 846 } 847 case 49: 848 yyDollar = yyS[yypt-3 : yypt+1] 849 { 850 yyVAL.nodes = append(yyVAL.nodes, yyDollar[3].node) 851 } 852 case 51: 853 yyDollar = yyS[yypt-0 : yypt+1] 854 { 855 yyVAL.nodes = nil 856 } 857 case 54: 858 yyDollar = yyS[yypt-3 : yypt+1] 859 { 860 yyVAL.node = yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 861 } 862 case 55: 863 yyDollar = yyS[yypt-3 : yypt+1] 864 { 865 yyVAL.node = yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 866 } 867 case 56: 868 yyDollar = yyS[yypt-3 : yypt+1] 869 { 870 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 871 bexpr.ReturnBool = true 872 yyVAL.node = bexpr 873 } 874 case 57: 875 yyDollar = yyS[yypt-3 : yypt+1] 876 { 877 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 878 bexpr.ReturnBool = true 879 yyVAL.node = bexpr 880 } 881 case 58: 882 yyDollar = yyS[yypt-3 : yypt+1] 883 { 884 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 885 bexpr.ReturnBool = true 886 yyVAL.node = bexpr 887 } 888 case 59: 889 yyDollar = yyS[yypt-3 : yypt+1] 890 { 891 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 892 bexpr.ReturnBool = true 893 yyVAL.node = bexpr 894 } 895 case 60: 896 yyDollar = yyS[yypt-3 : yypt+1] 897 { 898 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 899 bexpr.ReturnBool = true 900 yyVAL.node = bexpr 901 } 902 case 61: 903 yyDollar = yyS[yypt-3 : yypt+1] 904 { 905 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 906 bexpr.ReturnBool = true 907 yyVAL.node = bexpr 908 } 909 case 62: 910 yyDollar = yyS[yypt-3 : yypt+1] 911 { 912 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 913 yyVAL.node = bexpr 914 } 915 case 63: 916 yyDollar = yyS[yypt-3 : yypt+1] 917 { 918 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 919 yyVAL.node = bexpr 920 } 921 case 64: 922 yyDollar = yyS[yypt-3 : yypt+1] 923 { 924 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 925 bexpr.ReturnBool = true 926 yyVAL.node = bexpr 927 } 928 case 65: 929 yyDollar = yyS[yypt-3 : yypt+1] 930 { 931 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 932 yyVAL.node = bexpr 933 } 934 case 66: 935 yyDollar = yyS[yypt-3 : yypt+1] 936 { 937 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 938 yyVAL.node = bexpr 939 } 940 case 67: 941 yyDollar = yyS[yypt-3 : yypt+1] 942 { 943 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[3].node, yyDollar[2].item) 944 bexpr.ReturnBool = true 945 yyVAL.node = bexpr 946 } 947 case 68: 948 yyDollar = yyS[yypt-5 : yypt+1] 949 { 950 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item) 951 bexpr.ReturnBool = true 952 yyVAL.node = bexpr 953 } 954 case 69: 955 yyDollar = yyS[yypt-5 : yypt+1] 956 { 957 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item) 958 bexpr.ReturnBool = true 959 yyVAL.node = bexpr 960 } 961 case 70: 962 yyDollar = yyS[yypt-5 : yypt+1] 963 { 964 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item) 965 bexpr.ReturnBool = true 966 yyVAL.node = bexpr 967 } 968 case 71: 969 yyDollar = yyS[yypt-5 : yypt+1] 970 { 971 bexpr := yylex.(*parser).newBinExpr(yyDollar[1].node, yyDollar[4].node, yyDollar[2].item) 972 bexpr.ReturnBool = true 973 yyVAL.node = bexpr 974 } 975 case 72: 976 yyDollar = yyS[yypt-1 : yypt+1] 977 { 978 yyVAL.item = yyDollar[1].item 979 } 980 case 73: 981 yyDollar = yyS[yypt-1 : yypt+1] 982 { 983 yyVAL.item = Item{Val: yyDollar[1].node.(*AttrExpr).String()} 984 } 985 case 74: 986 yyDollar = yyS[yypt-1 : yypt+1] 987 { 988 yyVAL.node = yylex.(*parser).number(yyDollar[1].item.Val) 989 } 990 case 75: 991 yyDollar = yyS[yypt-2 : yypt+1] 992 { 993 num := yylex.(*parser).number(yyDollar[2].item.Val) 994 switch yyDollar[1].item.Typ { 995 case ADD: // pass 996 case SUB: 997 if num.IsInt { 998 num.Int = -num.Int 999 } else { 1000 num.Float = -num.Float 1001 } 1002 } 1003 yyVAL.node = num 1004 } 1005 case 76: 1006 yyDollar = yyS[yypt-4 : yypt+1] 1007 { 1008 yyVAL.node = yylex.(*parser).newRegex(yyDollar[3].node.(*StringLiteral).Val) 1009 } 1010 case 77: 1011 yyDollar = yyS[yypt-4 : yypt+1] 1012 { 1013 yyVAL.node = yylex.(*parser).newRegex(yylex.(*parser).unquoteString(yyDollar[3].item.Val)) 1014 } 1015 case 79: 1016 yyDollar = yyS[yypt-1 : yypt+1] 1017 { 1018 yyVAL.item.Val = yylex.(*parser).unquoteString(yyDollar[1].item.Val) 1019 } 1020 case 80: 1021 yyDollar = yyS[yypt-4 : yypt+1] 1022 { 1023 yyVAL.item.Val = yyDollar[3].node.(*StringLiteral).Val 1024 } 1025 } 1026 goto yystack /* stack new state and value */ 1027 }