github.com/eris-ltd/erisdb@v0.25.0/event/query/query.peg.go (about) 1 // nolint 2 package query 3 4 import ( 5 "fmt" 6 "math" 7 "sort" 8 "strconv" 9 ) 10 11 const endSymbol rune = 1114112 12 13 /* The rule types inferred from the grammar are below. */ 14 type pegRule uint8 15 16 const ( 17 ruleUnknown pegRule = iota 18 rulee 19 rulecondition 20 ruletag 21 rulevalue 22 rulenumber 23 ruledigit 24 ruletime 25 ruledate 26 ruleyear 27 rulemonth 28 ruleday 29 ruleand 30 ruleequal 31 rulecontains 32 rulele 33 rulege 34 rulel 35 ruleg 36 rulePegText 37 ) 38 39 var rul3s = [...]string{ 40 "Unknown", 41 "e", 42 "condition", 43 "tag", 44 "value", 45 "number", 46 "digit", 47 "time", 48 "date", 49 "year", 50 "month", 51 "day", 52 "and", 53 "equal", 54 "contains", 55 "le", 56 "ge", 57 "l", 58 "g", 59 "PegText", 60 } 61 62 type token32 struct { 63 pegRule 64 begin, end uint32 65 } 66 67 func (t *token32) String() string { 68 return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end) 69 } 70 71 type node32 struct { 72 token32 73 up, next *node32 74 } 75 76 func (node *node32) print(pretty bool, buffer string) { 77 var print func(node *node32, depth int) 78 print = func(node *node32, depth int) { 79 for node != nil { 80 for c := 0; c < depth; c++ { 81 fmt.Printf(" ") 82 } 83 rule := rul3s[node.pegRule] 84 quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end]))) 85 if !pretty { 86 fmt.Printf("%v %v\n", rule, quote) 87 } else { 88 fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote) 89 } 90 if node.up != nil { 91 print(node.up, depth+1) 92 } 93 node = node.next 94 } 95 } 96 print(node, 0) 97 } 98 99 func (node *node32) Print(buffer string) { 100 node.print(false, buffer) 101 } 102 103 func (node *node32) PrettyPrint(buffer string) { 104 node.print(true, buffer) 105 } 106 107 type tokens32 struct { 108 tree []token32 109 } 110 111 func (t *tokens32) Trim(length uint32) { 112 t.tree = t.tree[:length] 113 } 114 115 func (t *tokens32) Print() { 116 for _, token := range t.tree { 117 fmt.Println(token.String()) 118 } 119 } 120 121 func (t *tokens32) AST() *node32 { 122 type element struct { 123 node *node32 124 down *element 125 } 126 tokens := t.Tokens() 127 var stack *element 128 for _, token := range tokens { 129 if token.begin == token.end { 130 continue 131 } 132 node := &node32{token32: token} 133 for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end { 134 stack.node.next = node.up 135 node.up = stack.node 136 stack = stack.down 137 } 138 stack = &element{node: node, down: stack} 139 } 140 if stack != nil { 141 return stack.node 142 } 143 return nil 144 } 145 146 func (t *tokens32) PrintSyntaxTree(buffer string) { 147 t.AST().Print(buffer) 148 } 149 150 func (t *tokens32) PrettyPrintSyntaxTree(buffer string) { 151 t.AST().PrettyPrint(buffer) 152 } 153 154 func (t *tokens32) Add(rule pegRule, begin, end, index uint32) { 155 if tree := t.tree; int(index) >= len(tree) { 156 expanded := make([]token32, 2*len(tree)) 157 copy(expanded, tree) 158 t.tree = expanded 159 } 160 t.tree[index] = token32{ 161 pegRule: rule, 162 begin: begin, 163 end: end, 164 } 165 } 166 167 func (t *tokens32) Tokens() []token32 { 168 return t.tree 169 } 170 171 type QueryParser struct { 172 Buffer string 173 buffer []rune 174 rules [20]func() bool 175 parse func(rule ...int) error 176 reset func() 177 Pretty bool 178 tokens32 179 } 180 181 func (p *QueryParser) Parse(rule ...int) error { 182 return p.parse(rule...) 183 } 184 185 func (p *QueryParser) Reset() { 186 p.reset() 187 } 188 189 type textPosition struct { 190 line, symbol int 191 } 192 193 type textPositionMap map[int]textPosition 194 195 func translatePositions(buffer []rune, positions []int) textPositionMap { 196 length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0 197 sort.Ints(positions) 198 199 search: 200 for i, c := range buffer { 201 if c == '\n' { 202 line, symbol = line+1, 0 203 } else { 204 symbol++ 205 } 206 if i == positions[j] { 207 translations[positions[j]] = textPosition{line, symbol} 208 for j++; j < length; j++ { 209 if i != positions[j] { 210 continue search 211 } 212 } 213 break search 214 } 215 } 216 217 return translations 218 } 219 220 type parseError struct { 221 p *QueryParser 222 max token32 223 } 224 225 func (e *parseError) Error() string { 226 tokens, error := []token32{e.max}, "\n" 227 positions, p := make([]int, 2*len(tokens)), 0 228 for _, token := range tokens { 229 positions[p], p = int(token.begin), p+1 230 positions[p], p = int(token.end), p+1 231 } 232 translations := translatePositions(e.p.buffer, positions) 233 format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n" 234 if e.p.Pretty { 235 format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n" 236 } 237 for _, token := range tokens { 238 begin, end := int(token.begin), int(token.end) 239 error += fmt.Sprintf(format, 240 rul3s[token.pegRule], 241 translations[begin].line, translations[begin].symbol, 242 translations[end].line, translations[end].symbol, 243 strconv.Quote(string(e.p.buffer[begin:end]))) 244 } 245 246 return error 247 } 248 249 func (p *QueryParser) PrintSyntaxTree() { 250 if p.Pretty { 251 p.tokens32.PrettyPrintSyntaxTree(p.Buffer) 252 } else { 253 p.tokens32.PrintSyntaxTree(p.Buffer) 254 } 255 } 256 257 func (p *QueryParser) Init() { 258 var ( 259 max token32 260 position, tokenIndex uint32 261 buffer []rune 262 ) 263 p.reset = func() { 264 max = token32{} 265 position, tokenIndex = 0, 0 266 267 p.buffer = []rune(p.Buffer) 268 if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol { 269 p.buffer = append(p.buffer, endSymbol) 270 } 271 buffer = p.buffer 272 } 273 p.reset() 274 275 _rules := p.rules 276 tree := tokens32{tree: make([]token32, math.MaxInt16)} 277 p.parse = func(rule ...int) error { 278 r := 1 279 if len(rule) > 0 { 280 r = rule[0] 281 } 282 matches := p.rules[r]() 283 p.tokens32 = tree 284 if matches { 285 p.Trim(tokenIndex) 286 return nil 287 } 288 return &parseError{p, max} 289 } 290 291 add := func(rule pegRule, begin uint32) { 292 tree.Add(rule, begin, position, tokenIndex) 293 tokenIndex++ 294 if begin != position && position > max.end { 295 max = token32{rule, begin, position} 296 } 297 } 298 299 matchDot := func() bool { 300 if buffer[position] != endSymbol { 301 position++ 302 return true 303 } 304 return false 305 } 306 307 /*matchChar := func(c byte) bool { 308 if buffer[position] == c { 309 position++ 310 return true 311 } 312 return false 313 }*/ 314 315 /*matchRange := func(lower byte, upper byte) bool { 316 if c := buffer[position]; c >= lower && c <= upper { 317 position++ 318 return true 319 } 320 return false 321 }*/ 322 323 _rules = [...]func() bool{ 324 nil, 325 /* 0 e <- <('"' condition (' '+ and ' '+ condition)* '"' !.)> */ 326 func() bool { 327 position0, tokenIndex0 := position, tokenIndex 328 { 329 position1 := position 330 if buffer[position] != rune('"') { 331 goto l0 332 } 333 position++ 334 if !_rules[rulecondition]() { 335 goto l0 336 } 337 l2: 338 { 339 position3, tokenIndex3 := position, tokenIndex 340 if buffer[position] != rune(' ') { 341 goto l3 342 } 343 position++ 344 l4: 345 { 346 position5, tokenIndex5 := position, tokenIndex 347 if buffer[position] != rune(' ') { 348 goto l5 349 } 350 position++ 351 goto l4 352 l5: 353 position, tokenIndex = position5, tokenIndex5 354 } 355 { 356 position6 := position 357 { 358 position7, tokenIndex7 := position, tokenIndex 359 if buffer[position] != rune('a') { 360 goto l8 361 } 362 position++ 363 goto l7 364 l8: 365 position, tokenIndex = position7, tokenIndex7 366 if buffer[position] != rune('A') { 367 goto l3 368 } 369 position++ 370 } 371 l7: 372 { 373 position9, tokenIndex9 := position, tokenIndex 374 if buffer[position] != rune('n') { 375 goto l10 376 } 377 position++ 378 goto l9 379 l10: 380 position, tokenIndex = position9, tokenIndex9 381 if buffer[position] != rune('N') { 382 goto l3 383 } 384 position++ 385 } 386 l9: 387 { 388 position11, tokenIndex11 := position, tokenIndex 389 if buffer[position] != rune('d') { 390 goto l12 391 } 392 position++ 393 goto l11 394 l12: 395 position, tokenIndex = position11, tokenIndex11 396 if buffer[position] != rune('D') { 397 goto l3 398 } 399 position++ 400 } 401 l11: 402 add(ruleand, position6) 403 } 404 if buffer[position] != rune(' ') { 405 goto l3 406 } 407 position++ 408 l13: 409 { 410 position14, tokenIndex14 := position, tokenIndex 411 if buffer[position] != rune(' ') { 412 goto l14 413 } 414 position++ 415 goto l13 416 l14: 417 position, tokenIndex = position14, tokenIndex14 418 } 419 if !_rules[rulecondition]() { 420 goto l3 421 } 422 goto l2 423 l3: 424 position, tokenIndex = position3, tokenIndex3 425 } 426 if buffer[position] != rune('"') { 427 goto l0 428 } 429 position++ 430 { 431 position15, tokenIndex15 := position, tokenIndex 432 if !matchDot() { 433 goto l15 434 } 435 goto l0 436 l15: 437 position, tokenIndex = position15, tokenIndex15 438 } 439 add(rulee, position1) 440 } 441 return true 442 l0: 443 position, tokenIndex = position0, tokenIndex0 444 return false 445 }, 446 /* 1 condition <- <(tag ' '* ((le ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number))) / (ge ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number))) / ((&('=') (equal ' '* ((&('\'') value) | (&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('>') (g ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('<') (l ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('C' | 'c') (contains ' '* value)))))> */ 447 func() bool { 448 position16, tokenIndex16 := position, tokenIndex 449 { 450 position17 := position 451 { 452 position18 := position 453 { 454 position19 := position 455 { 456 position22, tokenIndex22 := position, tokenIndex 457 { 458 switch buffer[position] { 459 case '<': 460 if buffer[position] != rune('<') { 461 goto l22 462 } 463 position++ 464 break 465 case '>': 466 if buffer[position] != rune('>') { 467 goto l22 468 } 469 position++ 470 break 471 case '=': 472 if buffer[position] != rune('=') { 473 goto l22 474 } 475 position++ 476 break 477 case '\'': 478 if buffer[position] != rune('\'') { 479 goto l22 480 } 481 position++ 482 break 483 case '"': 484 if buffer[position] != rune('"') { 485 goto l22 486 } 487 position++ 488 break 489 case ')': 490 if buffer[position] != rune(')') { 491 goto l22 492 } 493 position++ 494 break 495 case '(': 496 if buffer[position] != rune('(') { 497 goto l22 498 } 499 position++ 500 break 501 case '\\': 502 if buffer[position] != rune('\\') { 503 goto l22 504 } 505 position++ 506 break 507 case '\r': 508 if buffer[position] != rune('\r') { 509 goto l22 510 } 511 position++ 512 break 513 case '\n': 514 if buffer[position] != rune('\n') { 515 goto l22 516 } 517 position++ 518 break 519 case '\t': 520 if buffer[position] != rune('\t') { 521 goto l22 522 } 523 position++ 524 break 525 default: 526 if buffer[position] != rune(' ') { 527 goto l22 528 } 529 position++ 530 break 531 } 532 } 533 534 goto l16 535 l22: 536 position, tokenIndex = position22, tokenIndex22 537 } 538 if !matchDot() { 539 goto l16 540 } 541 l20: 542 { 543 position21, tokenIndex21 := position, tokenIndex 544 { 545 position24, tokenIndex24 := position, tokenIndex 546 { 547 switch buffer[position] { 548 case '<': 549 if buffer[position] != rune('<') { 550 goto l24 551 } 552 position++ 553 break 554 case '>': 555 if buffer[position] != rune('>') { 556 goto l24 557 } 558 position++ 559 break 560 case '=': 561 if buffer[position] != rune('=') { 562 goto l24 563 } 564 position++ 565 break 566 case '\'': 567 if buffer[position] != rune('\'') { 568 goto l24 569 } 570 position++ 571 break 572 case '"': 573 if buffer[position] != rune('"') { 574 goto l24 575 } 576 position++ 577 break 578 case ')': 579 if buffer[position] != rune(')') { 580 goto l24 581 } 582 position++ 583 break 584 case '(': 585 if buffer[position] != rune('(') { 586 goto l24 587 } 588 position++ 589 break 590 case '\\': 591 if buffer[position] != rune('\\') { 592 goto l24 593 } 594 position++ 595 break 596 case '\r': 597 if buffer[position] != rune('\r') { 598 goto l24 599 } 600 position++ 601 break 602 case '\n': 603 if buffer[position] != rune('\n') { 604 goto l24 605 } 606 position++ 607 break 608 case '\t': 609 if buffer[position] != rune('\t') { 610 goto l24 611 } 612 position++ 613 break 614 default: 615 if buffer[position] != rune(' ') { 616 goto l24 617 } 618 position++ 619 break 620 } 621 } 622 623 goto l21 624 l24: 625 position, tokenIndex = position24, tokenIndex24 626 } 627 if !matchDot() { 628 goto l21 629 } 630 goto l20 631 l21: 632 position, tokenIndex = position21, tokenIndex21 633 } 634 add(rulePegText, position19) 635 } 636 add(ruletag, position18) 637 } 638 l26: 639 { 640 position27, tokenIndex27 := position, tokenIndex 641 if buffer[position] != rune(' ') { 642 goto l27 643 } 644 position++ 645 goto l26 646 l27: 647 position, tokenIndex = position27, tokenIndex27 648 } 649 { 650 position28, tokenIndex28 := position, tokenIndex 651 { 652 position30 := position 653 if buffer[position] != rune('<') { 654 goto l29 655 } 656 position++ 657 if buffer[position] != rune('=') { 658 goto l29 659 } 660 position++ 661 add(rulele, position30) 662 } 663 l31: 664 { 665 position32, tokenIndex32 := position, tokenIndex 666 if buffer[position] != rune(' ') { 667 goto l32 668 } 669 position++ 670 goto l31 671 l32: 672 position, tokenIndex = position32, tokenIndex32 673 } 674 { 675 switch buffer[position] { 676 case 'D', 'd': 677 if !_rules[ruledate]() { 678 goto l29 679 } 680 break 681 case 'T', 't': 682 if !_rules[ruletime]() { 683 goto l29 684 } 685 break 686 default: 687 if !_rules[rulenumber]() { 688 goto l29 689 } 690 break 691 } 692 } 693 694 goto l28 695 l29: 696 position, tokenIndex = position28, tokenIndex28 697 { 698 position35 := position 699 if buffer[position] != rune('>') { 700 goto l34 701 } 702 position++ 703 if buffer[position] != rune('=') { 704 goto l34 705 } 706 position++ 707 add(rulege, position35) 708 } 709 l36: 710 { 711 position37, tokenIndex37 := position, tokenIndex 712 if buffer[position] != rune(' ') { 713 goto l37 714 } 715 position++ 716 goto l36 717 l37: 718 position, tokenIndex = position37, tokenIndex37 719 } 720 { 721 switch buffer[position] { 722 case 'D', 'd': 723 if !_rules[ruledate]() { 724 goto l34 725 } 726 break 727 case 'T', 't': 728 if !_rules[ruletime]() { 729 goto l34 730 } 731 break 732 default: 733 if !_rules[rulenumber]() { 734 goto l34 735 } 736 break 737 } 738 } 739 740 goto l28 741 l34: 742 position, tokenIndex = position28, tokenIndex28 743 { 744 switch buffer[position] { 745 case '=': 746 { 747 position40 := position 748 if buffer[position] != rune('=') { 749 goto l16 750 } 751 position++ 752 add(ruleequal, position40) 753 } 754 l41: 755 { 756 position42, tokenIndex42 := position, tokenIndex 757 if buffer[position] != rune(' ') { 758 goto l42 759 } 760 position++ 761 goto l41 762 l42: 763 position, tokenIndex = position42, tokenIndex42 764 } 765 { 766 switch buffer[position] { 767 case '\'': 768 if !_rules[rulevalue]() { 769 goto l16 770 } 771 break 772 case 'D', 'd': 773 if !_rules[ruledate]() { 774 goto l16 775 } 776 break 777 case 'T', 't': 778 if !_rules[ruletime]() { 779 goto l16 780 } 781 break 782 default: 783 if !_rules[rulenumber]() { 784 goto l16 785 } 786 break 787 } 788 } 789 790 break 791 case '>': 792 { 793 position44 := position 794 if buffer[position] != rune('>') { 795 goto l16 796 } 797 position++ 798 add(ruleg, position44) 799 } 800 l45: 801 { 802 position46, tokenIndex46 := position, tokenIndex 803 if buffer[position] != rune(' ') { 804 goto l46 805 } 806 position++ 807 goto l45 808 l46: 809 position, tokenIndex = position46, tokenIndex46 810 } 811 { 812 switch buffer[position] { 813 case 'D', 'd': 814 if !_rules[ruledate]() { 815 goto l16 816 } 817 break 818 case 'T', 't': 819 if !_rules[ruletime]() { 820 goto l16 821 } 822 break 823 default: 824 if !_rules[rulenumber]() { 825 goto l16 826 } 827 break 828 } 829 } 830 831 break 832 case '<': 833 { 834 position48 := position 835 if buffer[position] != rune('<') { 836 goto l16 837 } 838 position++ 839 add(rulel, position48) 840 } 841 l49: 842 { 843 position50, tokenIndex50 := position, tokenIndex 844 if buffer[position] != rune(' ') { 845 goto l50 846 } 847 position++ 848 goto l49 849 l50: 850 position, tokenIndex = position50, tokenIndex50 851 } 852 { 853 switch buffer[position] { 854 case 'D', 'd': 855 if !_rules[ruledate]() { 856 goto l16 857 } 858 break 859 case 'T', 't': 860 if !_rules[ruletime]() { 861 goto l16 862 } 863 break 864 default: 865 if !_rules[rulenumber]() { 866 goto l16 867 } 868 break 869 } 870 } 871 872 break 873 default: 874 { 875 position52 := position 876 { 877 position53, tokenIndex53 := position, tokenIndex 878 if buffer[position] != rune('c') { 879 goto l54 880 } 881 position++ 882 goto l53 883 l54: 884 position, tokenIndex = position53, tokenIndex53 885 if buffer[position] != rune('C') { 886 goto l16 887 } 888 position++ 889 } 890 l53: 891 { 892 position55, tokenIndex55 := position, tokenIndex 893 if buffer[position] != rune('o') { 894 goto l56 895 } 896 position++ 897 goto l55 898 l56: 899 position, tokenIndex = position55, tokenIndex55 900 if buffer[position] != rune('O') { 901 goto l16 902 } 903 position++ 904 } 905 l55: 906 { 907 position57, tokenIndex57 := position, tokenIndex 908 if buffer[position] != rune('n') { 909 goto l58 910 } 911 position++ 912 goto l57 913 l58: 914 position, tokenIndex = position57, tokenIndex57 915 if buffer[position] != rune('N') { 916 goto l16 917 } 918 position++ 919 } 920 l57: 921 { 922 position59, tokenIndex59 := position, tokenIndex 923 if buffer[position] != rune('t') { 924 goto l60 925 } 926 position++ 927 goto l59 928 l60: 929 position, tokenIndex = position59, tokenIndex59 930 if buffer[position] != rune('T') { 931 goto l16 932 } 933 position++ 934 } 935 l59: 936 { 937 position61, tokenIndex61 := position, tokenIndex 938 if buffer[position] != rune('a') { 939 goto l62 940 } 941 position++ 942 goto l61 943 l62: 944 position, tokenIndex = position61, tokenIndex61 945 if buffer[position] != rune('A') { 946 goto l16 947 } 948 position++ 949 } 950 l61: 951 { 952 position63, tokenIndex63 := position, tokenIndex 953 if buffer[position] != rune('i') { 954 goto l64 955 } 956 position++ 957 goto l63 958 l64: 959 position, tokenIndex = position63, tokenIndex63 960 if buffer[position] != rune('I') { 961 goto l16 962 } 963 position++ 964 } 965 l63: 966 { 967 position65, tokenIndex65 := position, tokenIndex 968 if buffer[position] != rune('n') { 969 goto l66 970 } 971 position++ 972 goto l65 973 l66: 974 position, tokenIndex = position65, tokenIndex65 975 if buffer[position] != rune('N') { 976 goto l16 977 } 978 position++ 979 } 980 l65: 981 { 982 position67, tokenIndex67 := position, tokenIndex 983 if buffer[position] != rune('s') { 984 goto l68 985 } 986 position++ 987 goto l67 988 l68: 989 position, tokenIndex = position67, tokenIndex67 990 if buffer[position] != rune('S') { 991 goto l16 992 } 993 position++ 994 } 995 l67: 996 add(rulecontains, position52) 997 } 998 l69: 999 { 1000 position70, tokenIndex70 := position, tokenIndex 1001 if buffer[position] != rune(' ') { 1002 goto l70 1003 } 1004 position++ 1005 goto l69 1006 l70: 1007 position, tokenIndex = position70, tokenIndex70 1008 } 1009 if !_rules[rulevalue]() { 1010 goto l16 1011 } 1012 break 1013 } 1014 } 1015 1016 } 1017 l28: 1018 add(rulecondition, position17) 1019 } 1020 return true 1021 l16: 1022 position, tokenIndex = position16, tokenIndex16 1023 return false 1024 }, 1025 /* 2 tag <- <<(!((&('<') '<') | (&('>') '>') | (&('=') '=') | (&('\'') '\'') | (&('"') '"') | (&(')') ')') | (&('(') '(') | (&('\\') '\\') | (&('\r') '\r') | (&('\n') '\n') | (&('\t') '\t') | (&(' ') ' ')) .)+>> */ 1026 nil, 1027 /* 3 value <- <<('\'' (!('"' / '\'') .)* '\'')>> */ 1028 func() bool { 1029 position72, tokenIndex72 := position, tokenIndex 1030 { 1031 position73 := position 1032 { 1033 position74 := position 1034 if buffer[position] != rune('\'') { 1035 goto l72 1036 } 1037 position++ 1038 l75: 1039 { 1040 position76, tokenIndex76 := position, tokenIndex 1041 { 1042 position77, tokenIndex77 := position, tokenIndex 1043 { 1044 position78, tokenIndex78 := position, tokenIndex 1045 if buffer[position] != rune('"') { 1046 goto l79 1047 } 1048 position++ 1049 goto l78 1050 l79: 1051 position, tokenIndex = position78, tokenIndex78 1052 if buffer[position] != rune('\'') { 1053 goto l77 1054 } 1055 position++ 1056 } 1057 l78: 1058 goto l76 1059 l77: 1060 position, tokenIndex = position77, tokenIndex77 1061 } 1062 if !matchDot() { 1063 goto l76 1064 } 1065 goto l75 1066 l76: 1067 position, tokenIndex = position76, tokenIndex76 1068 } 1069 if buffer[position] != rune('\'') { 1070 goto l72 1071 } 1072 position++ 1073 add(rulePegText, position74) 1074 } 1075 add(rulevalue, position73) 1076 } 1077 return true 1078 l72: 1079 position, tokenIndex = position72, tokenIndex72 1080 return false 1081 }, 1082 /* 4 number <- <<('0' / ([1-9] digit* ('.' digit*)?))>> */ 1083 func() bool { 1084 position80, tokenIndex80 := position, tokenIndex 1085 { 1086 position81 := position 1087 { 1088 position82 := position 1089 { 1090 position83, tokenIndex83 := position, tokenIndex 1091 if buffer[position] != rune('0') { 1092 goto l84 1093 } 1094 position++ 1095 goto l83 1096 l84: 1097 position, tokenIndex = position83, tokenIndex83 1098 if c := buffer[position]; c < rune('1') || c > rune('9') { 1099 goto l80 1100 } 1101 position++ 1102 l85: 1103 { 1104 position86, tokenIndex86 := position, tokenIndex 1105 if !_rules[ruledigit]() { 1106 goto l86 1107 } 1108 goto l85 1109 l86: 1110 position, tokenIndex = position86, tokenIndex86 1111 } 1112 { 1113 position87, tokenIndex87 := position, tokenIndex 1114 if buffer[position] != rune('.') { 1115 goto l87 1116 } 1117 position++ 1118 l89: 1119 { 1120 position90, tokenIndex90 := position, tokenIndex 1121 if !_rules[ruledigit]() { 1122 goto l90 1123 } 1124 goto l89 1125 l90: 1126 position, tokenIndex = position90, tokenIndex90 1127 } 1128 goto l88 1129 l87: 1130 position, tokenIndex = position87, tokenIndex87 1131 } 1132 l88: 1133 } 1134 l83: 1135 add(rulePegText, position82) 1136 } 1137 add(rulenumber, position81) 1138 } 1139 return true 1140 l80: 1141 position, tokenIndex = position80, tokenIndex80 1142 return false 1143 }, 1144 /* 5 digit <- <[0-9]> */ 1145 func() bool { 1146 position91, tokenIndex91 := position, tokenIndex 1147 { 1148 position92 := position 1149 if c := buffer[position]; c < rune('0') || c > rune('9') { 1150 goto l91 1151 } 1152 position++ 1153 add(ruledigit, position92) 1154 } 1155 return true 1156 l91: 1157 position, tokenIndex = position91, tokenIndex91 1158 return false 1159 }, 1160 /* 6 time <- <(('t' / 'T') ('i' / 'I') ('m' / 'M') ('e' / 'E') ' ' <(year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit ((('-' / '+') digit digit ':' digit digit) / 'Z'))>)> */ 1161 func() bool { 1162 position93, tokenIndex93 := position, tokenIndex 1163 { 1164 position94 := position 1165 { 1166 position95, tokenIndex95 := position, tokenIndex 1167 if buffer[position] != rune('t') { 1168 goto l96 1169 } 1170 position++ 1171 goto l95 1172 l96: 1173 position, tokenIndex = position95, tokenIndex95 1174 if buffer[position] != rune('T') { 1175 goto l93 1176 } 1177 position++ 1178 } 1179 l95: 1180 { 1181 position97, tokenIndex97 := position, tokenIndex 1182 if buffer[position] != rune('i') { 1183 goto l98 1184 } 1185 position++ 1186 goto l97 1187 l98: 1188 position, tokenIndex = position97, tokenIndex97 1189 if buffer[position] != rune('I') { 1190 goto l93 1191 } 1192 position++ 1193 } 1194 l97: 1195 { 1196 position99, tokenIndex99 := position, tokenIndex 1197 if buffer[position] != rune('m') { 1198 goto l100 1199 } 1200 position++ 1201 goto l99 1202 l100: 1203 position, tokenIndex = position99, tokenIndex99 1204 if buffer[position] != rune('M') { 1205 goto l93 1206 } 1207 position++ 1208 } 1209 l99: 1210 { 1211 position101, tokenIndex101 := position, tokenIndex 1212 if buffer[position] != rune('e') { 1213 goto l102 1214 } 1215 position++ 1216 goto l101 1217 l102: 1218 position, tokenIndex = position101, tokenIndex101 1219 if buffer[position] != rune('E') { 1220 goto l93 1221 } 1222 position++ 1223 } 1224 l101: 1225 if buffer[position] != rune(' ') { 1226 goto l93 1227 } 1228 position++ 1229 { 1230 position103 := position 1231 if !_rules[ruleyear]() { 1232 goto l93 1233 } 1234 if buffer[position] != rune('-') { 1235 goto l93 1236 } 1237 position++ 1238 if !_rules[rulemonth]() { 1239 goto l93 1240 } 1241 if buffer[position] != rune('-') { 1242 goto l93 1243 } 1244 position++ 1245 if !_rules[ruleday]() { 1246 goto l93 1247 } 1248 if buffer[position] != rune('T') { 1249 goto l93 1250 } 1251 position++ 1252 if !_rules[ruledigit]() { 1253 goto l93 1254 } 1255 if !_rules[ruledigit]() { 1256 goto l93 1257 } 1258 if buffer[position] != rune(':') { 1259 goto l93 1260 } 1261 position++ 1262 if !_rules[ruledigit]() { 1263 goto l93 1264 } 1265 if !_rules[ruledigit]() { 1266 goto l93 1267 } 1268 if buffer[position] != rune(':') { 1269 goto l93 1270 } 1271 position++ 1272 if !_rules[ruledigit]() { 1273 goto l93 1274 } 1275 if !_rules[ruledigit]() { 1276 goto l93 1277 } 1278 { 1279 position104, tokenIndex104 := position, tokenIndex 1280 { 1281 position106, tokenIndex106 := position, tokenIndex 1282 if buffer[position] != rune('-') { 1283 goto l107 1284 } 1285 position++ 1286 goto l106 1287 l107: 1288 position, tokenIndex = position106, tokenIndex106 1289 if buffer[position] != rune('+') { 1290 goto l105 1291 } 1292 position++ 1293 } 1294 l106: 1295 if !_rules[ruledigit]() { 1296 goto l105 1297 } 1298 if !_rules[ruledigit]() { 1299 goto l105 1300 } 1301 if buffer[position] != rune(':') { 1302 goto l105 1303 } 1304 position++ 1305 if !_rules[ruledigit]() { 1306 goto l105 1307 } 1308 if !_rules[ruledigit]() { 1309 goto l105 1310 } 1311 goto l104 1312 l105: 1313 position, tokenIndex = position104, tokenIndex104 1314 if buffer[position] != rune('Z') { 1315 goto l93 1316 } 1317 position++ 1318 } 1319 l104: 1320 add(rulePegText, position103) 1321 } 1322 add(ruletime, position94) 1323 } 1324 return true 1325 l93: 1326 position, tokenIndex = position93, tokenIndex93 1327 return false 1328 }, 1329 /* 7 date <- <(('d' / 'D') ('a' / 'A') ('t' / 'T') ('e' / 'E') ' ' <(year '-' month '-' day)>)> */ 1330 func() bool { 1331 position108, tokenIndex108 := position, tokenIndex 1332 { 1333 position109 := position 1334 { 1335 position110, tokenIndex110 := position, tokenIndex 1336 if buffer[position] != rune('d') { 1337 goto l111 1338 } 1339 position++ 1340 goto l110 1341 l111: 1342 position, tokenIndex = position110, tokenIndex110 1343 if buffer[position] != rune('D') { 1344 goto l108 1345 } 1346 position++ 1347 } 1348 l110: 1349 { 1350 position112, tokenIndex112 := position, tokenIndex 1351 if buffer[position] != rune('a') { 1352 goto l113 1353 } 1354 position++ 1355 goto l112 1356 l113: 1357 position, tokenIndex = position112, tokenIndex112 1358 if buffer[position] != rune('A') { 1359 goto l108 1360 } 1361 position++ 1362 } 1363 l112: 1364 { 1365 position114, tokenIndex114 := position, tokenIndex 1366 if buffer[position] != rune('t') { 1367 goto l115 1368 } 1369 position++ 1370 goto l114 1371 l115: 1372 position, tokenIndex = position114, tokenIndex114 1373 if buffer[position] != rune('T') { 1374 goto l108 1375 } 1376 position++ 1377 } 1378 l114: 1379 { 1380 position116, tokenIndex116 := position, tokenIndex 1381 if buffer[position] != rune('e') { 1382 goto l117 1383 } 1384 position++ 1385 goto l116 1386 l117: 1387 position, tokenIndex = position116, tokenIndex116 1388 if buffer[position] != rune('E') { 1389 goto l108 1390 } 1391 position++ 1392 } 1393 l116: 1394 if buffer[position] != rune(' ') { 1395 goto l108 1396 } 1397 position++ 1398 { 1399 position118 := position 1400 if !_rules[ruleyear]() { 1401 goto l108 1402 } 1403 if buffer[position] != rune('-') { 1404 goto l108 1405 } 1406 position++ 1407 if !_rules[rulemonth]() { 1408 goto l108 1409 } 1410 if buffer[position] != rune('-') { 1411 goto l108 1412 } 1413 position++ 1414 if !_rules[ruleday]() { 1415 goto l108 1416 } 1417 add(rulePegText, position118) 1418 } 1419 add(ruledate, position109) 1420 } 1421 return true 1422 l108: 1423 position, tokenIndex = position108, tokenIndex108 1424 return false 1425 }, 1426 /* 8 year <- <(('1' / '2') digit digit digit)> */ 1427 func() bool { 1428 position119, tokenIndex119 := position, tokenIndex 1429 { 1430 position120 := position 1431 { 1432 position121, tokenIndex121 := position, tokenIndex 1433 if buffer[position] != rune('1') { 1434 goto l122 1435 } 1436 position++ 1437 goto l121 1438 l122: 1439 position, tokenIndex = position121, tokenIndex121 1440 if buffer[position] != rune('2') { 1441 goto l119 1442 } 1443 position++ 1444 } 1445 l121: 1446 if !_rules[ruledigit]() { 1447 goto l119 1448 } 1449 if !_rules[ruledigit]() { 1450 goto l119 1451 } 1452 if !_rules[ruledigit]() { 1453 goto l119 1454 } 1455 add(ruleyear, position120) 1456 } 1457 return true 1458 l119: 1459 position, tokenIndex = position119, tokenIndex119 1460 return false 1461 }, 1462 /* 9 month <- <(('0' / '1') digit)> */ 1463 func() bool { 1464 position123, tokenIndex123 := position, tokenIndex 1465 { 1466 position124 := position 1467 { 1468 position125, tokenIndex125 := position, tokenIndex 1469 if buffer[position] != rune('0') { 1470 goto l126 1471 } 1472 position++ 1473 goto l125 1474 l126: 1475 position, tokenIndex = position125, tokenIndex125 1476 if buffer[position] != rune('1') { 1477 goto l123 1478 } 1479 position++ 1480 } 1481 l125: 1482 if !_rules[ruledigit]() { 1483 goto l123 1484 } 1485 add(rulemonth, position124) 1486 } 1487 return true 1488 l123: 1489 position, tokenIndex = position123, tokenIndex123 1490 return false 1491 }, 1492 /* 10 day <- <(((&('3') '3') | (&('2') '2') | (&('1') '1') | (&('0') '0')) digit)> */ 1493 func() bool { 1494 position127, tokenIndex127 := position, tokenIndex 1495 { 1496 position128 := position 1497 { 1498 switch buffer[position] { 1499 case '3': 1500 if buffer[position] != rune('3') { 1501 goto l127 1502 } 1503 position++ 1504 break 1505 case '2': 1506 if buffer[position] != rune('2') { 1507 goto l127 1508 } 1509 position++ 1510 break 1511 case '1': 1512 if buffer[position] != rune('1') { 1513 goto l127 1514 } 1515 position++ 1516 break 1517 default: 1518 if buffer[position] != rune('0') { 1519 goto l127 1520 } 1521 position++ 1522 break 1523 } 1524 } 1525 1526 if !_rules[ruledigit]() { 1527 goto l127 1528 } 1529 add(ruleday, position128) 1530 } 1531 return true 1532 l127: 1533 position, tokenIndex = position127, tokenIndex127 1534 return false 1535 }, 1536 /* 11 and <- <(('a' / 'A') ('n' / 'N') ('d' / 'D'))> */ 1537 nil, 1538 /* 12 equal <- <'='> */ 1539 nil, 1540 /* 13 contains <- <(('c' / 'C') ('o' / 'O') ('n' / 'N') ('t' / 'T') ('a' / 'A') ('i' / 'I') ('n' / 'N') ('s' / 'S'))> */ 1541 nil, 1542 /* 14 le <- <('<' '=')> */ 1543 nil, 1544 /* 15 ge <- <('>' '=')> */ 1545 nil, 1546 /* 16 l <- <'<'> */ 1547 nil, 1548 /* 17 g <- <'>'> */ 1549 nil, 1550 nil, 1551 } 1552 p.rules = _rules 1553 }