1package main 2 3//go:generate peg delocate.peg 4 5import ( 6 "fmt" 7 "math" 8 "sort" 9 "strconv" 10) 11 12const endSymbol rune = 1114112 13 14/* The rule types inferred from the grammar are below. */ 15type pegRule uint8 16 17const ( 18 ruleUnknown pegRule = iota 19 ruleAsmFile 20 ruleStatement 21 ruleGlobalDirective 22 ruleDirective 23 ruleDirectiveName 24 ruleLocationDirective 25 ruleArgs 26 ruleArg 27 ruleQuotedArg 28 ruleQuotedText 29 ruleLabelContainingDirective 30 ruleLabelContainingDirectiveName 31 ruleSymbolArgs 32 ruleSymbolArg 33 ruleSymbolType 34 ruleDot 35 ruleTCMarker 36 ruleEscapedChar 37 ruleWS 38 ruleComment 39 ruleLabel 40 ruleSymbolName 41 ruleLocalSymbol 42 ruleLocalLabel 43 ruleLocalLabelRef 44 ruleInstruction 45 ruleInstructionName 46 ruleInstructionArg 47 ruleAVX512Token 48 ruleTOCRefHigh 49 ruleTOCRefLow 50 ruleIndirectionIndicator 51 ruleRegisterOrConstant 52 ruleMemoryRef 53 ruleSymbolRef 54 ruleBaseIndexScale 55 ruleOperator 56 ruleOffset 57 ruleSection 58 ruleSegmentRegister 59) 60 61var rul3s = [...]string{ 62 "Unknown", 63 "AsmFile", 64 "Statement", 65 "GlobalDirective", 66 "Directive", 67 "DirectiveName", 68 "LocationDirective", 69 "Args", 70 "Arg", 71 "QuotedArg", 72 "QuotedText", 73 "LabelContainingDirective", 74 "LabelContainingDirectiveName", 75 "SymbolArgs", 76 "SymbolArg", 77 "SymbolType", 78 "Dot", 79 "TCMarker", 80 "EscapedChar", 81 "WS", 82 "Comment", 83 "Label", 84 "SymbolName", 85 "LocalSymbol", 86 "LocalLabel", 87 "LocalLabelRef", 88 "Instruction", 89 "InstructionName", 90 "InstructionArg", 91 "AVX512Token", 92 "TOCRefHigh", 93 "TOCRefLow", 94 "IndirectionIndicator", 95 "RegisterOrConstant", 96 "MemoryRef", 97 "SymbolRef", 98 "BaseIndexScale", 99 "Operator", 100 "Offset", 101 "Section", 102 "SegmentRegister", 103} 104 105type token32 struct { 106 pegRule 107 begin, end uint32 108} 109 110func (t *token32) String() string { 111 return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end) 112} 113 114type node32 struct { 115 token32 116 up, next *node32 117} 118 119func (node *node32) print(pretty bool, buffer string) { 120 var print func(node *node32, depth int) 121 print = func(node *node32, depth int) { 122 for node != nil { 123 for c := 0; c < depth; c++ { 124 fmt.Printf(" ") 125 } 126 rule := rul3s[node.pegRule] 127 quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end]))) 128 if !pretty { 129 fmt.Printf("%v %v\n", rule, quote) 130 } else { 131 fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote) 132 } 133 if node.up != nil { 134 print(node.up, depth+1) 135 } 136 node = node.next 137 } 138 } 139 print(node, 0) 140} 141 142func (node *node32) Print(buffer string) { 143 node.print(false, buffer) 144} 145 146func (node *node32) PrettyPrint(buffer string) { 147 node.print(true, buffer) 148} 149 150type tokens32 struct { 151 tree []token32 152} 153 154func (t *tokens32) Trim(length uint32) { 155 t.tree = t.tree[:length] 156} 157 158func (t *tokens32) Print() { 159 for _, token := range t.tree { 160 fmt.Println(token.String()) 161 } 162} 163 164func (t *tokens32) AST() *node32 { 165 type element struct { 166 node *node32 167 down *element 168 } 169 tokens := t.Tokens() 170 var stack *element 171 for _, token := range tokens { 172 if token.begin == token.end { 173 continue 174 } 175 node := &node32{token32: token} 176 for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end { 177 stack.node.next = node.up 178 node.up = stack.node 179 stack = stack.down 180 } 181 stack = &element{node: node, down: stack} 182 } 183 if stack != nil { 184 return stack.node 185 } 186 return nil 187} 188 189func (t *tokens32) PrintSyntaxTree(buffer string) { 190 t.AST().Print(buffer) 191} 192 193func (t *tokens32) PrettyPrintSyntaxTree(buffer string) { 194 t.AST().PrettyPrint(buffer) 195} 196 197func (t *tokens32) Add(rule pegRule, begin, end, index uint32) { 198 if tree := t.tree; int(index) >= len(tree) { 199 expanded := make([]token32, 2*len(tree)) 200 copy(expanded, tree) 201 t.tree = expanded 202 } 203 t.tree[index] = token32{ 204 pegRule: rule, 205 begin: begin, 206 end: end, 207 } 208} 209 210func (t *tokens32) Tokens() []token32 { 211 return t.tree 212} 213 214type Asm struct { 215 Buffer string 216 buffer []rune 217 rules [41]func() bool 218 parse func(rule ...int) error 219 reset func() 220 Pretty bool 221 tokens32 222} 223 224func (p *Asm) Parse(rule ...int) error { 225 return p.parse(rule...) 226} 227 228func (p *Asm) Reset() { 229 p.reset() 230} 231 232type textPosition struct { 233 line, symbol int 234} 235 236type textPositionMap map[int]textPosition 237 238func translatePositions(buffer []rune, positions []int) textPositionMap { 239 length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0 240 sort.Ints(positions) 241 242search: 243 for i, c := range buffer { 244 if c == '\n' { 245 line, symbol = line+1, 0 246 } else { 247 symbol++ 248 } 249 if i == positions[j] { 250 translations[positions[j]] = textPosition{line, symbol} 251 for j++; j < length; j++ { 252 if i != positions[j] { 253 continue search 254 } 255 } 256 break search 257 } 258 } 259 260 return translations 261} 262 263type parseError struct { 264 p *Asm 265 max token32 266} 267 268func (e *parseError) Error() string { 269 tokens, error := []token32{e.max}, "\n" 270 positions, p := make([]int, 2*len(tokens)), 0 271 for _, token := range tokens { 272 positions[p], p = int(token.begin), p+1 273 positions[p], p = int(token.end), p+1 274 } 275 translations := translatePositions(e.p.buffer, positions) 276 format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n" 277 if e.p.Pretty { 278 format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n" 279 } 280 for _, token := range tokens { 281 begin, end := int(token.begin), int(token.end) 282 error += fmt.Sprintf(format, 283 rul3s[token.pegRule], 284 translations[begin].line, translations[begin].symbol, 285 translations[end].line, translations[end].symbol, 286 strconv.Quote(string(e.p.buffer[begin:end]))) 287 } 288 289 return error 290} 291 292func (p *Asm) PrintSyntaxTree() { 293 if p.Pretty { 294 p.tokens32.PrettyPrintSyntaxTree(p.Buffer) 295 } else { 296 p.tokens32.PrintSyntaxTree(p.Buffer) 297 } 298} 299 300func (p *Asm) Init() { 301 var ( 302 max token32 303 position, tokenIndex uint32 304 buffer []rune 305 ) 306 p.reset = func() { 307 max = token32{} 308 position, tokenIndex = 0, 0 309 310 p.buffer = []rune(p.Buffer) 311 if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol { 312 p.buffer = append(p.buffer, endSymbol) 313 } 314 buffer = p.buffer 315 } 316 p.reset() 317 318 _rules := p.rules 319 tree := tokens32{tree: make([]token32, math.MaxInt16)} 320 p.parse = func(rule ...int) error { 321 r := 1 322 if len(rule) > 0 { 323 r = rule[0] 324 } 325 matches := p.rules[r]() 326 p.tokens32 = tree 327 if matches { 328 p.Trim(tokenIndex) 329 return nil 330 } 331 return &parseError{p, max} 332 } 333 334 add := func(rule pegRule, begin uint32) { 335 tree.Add(rule, begin, position, tokenIndex) 336 tokenIndex++ 337 if begin != position && position > max.end { 338 max = token32{rule, begin, position} 339 } 340 } 341 342 matchDot := func() bool { 343 if buffer[position] != endSymbol { 344 position++ 345 return true 346 } 347 return false 348 } 349 350 /*matchChar := func(c byte) bool { 351 if buffer[position] == c { 352 position++ 353 return true 354 } 355 return false 356 }*/ 357 358 /*matchRange := func(lower byte, upper byte) bool { 359 if c := buffer[position]; c >= lower && c <= upper { 360 position++ 361 return true 362 } 363 return false 364 }*/ 365 366 _rules = [...]func() bool{ 367 nil, 368 /* 0 AsmFile <- <(Statement* !.)> */ 369 func() bool { 370 position0, tokenIndex0 := position, tokenIndex 371 { 372 position1 := position 373 l2: 374 { 375 position3, tokenIndex3 := position, tokenIndex 376 if !_rules[ruleStatement]() { 377 goto l3 378 } 379 goto l2 380 l3: 381 position, tokenIndex = position3, tokenIndex3 382 } 383 { 384 position4, tokenIndex4 := position, tokenIndex 385 if !matchDot() { 386 goto l4 387 } 388 goto l0 389 l4: 390 position, tokenIndex = position4, tokenIndex4 391 } 392 add(ruleAsmFile, position1) 393 } 394 return true 395 l0: 396 position, tokenIndex = position0, tokenIndex0 397 return false 398 }, 399 /* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */ 400 func() bool { 401 position5, tokenIndex5 := position, tokenIndex 402 { 403 position6 := position 404 { 405 position7, tokenIndex7 := position, tokenIndex 406 if !_rules[ruleWS]() { 407 goto l7 408 } 409 goto l8 410 l7: 411 position, tokenIndex = position7, tokenIndex7 412 } 413 l8: 414 { 415 position9, tokenIndex9 := position, tokenIndex 416 if !_rules[ruleLabel]() { 417 goto l10 418 } 419 goto l9 420 l10: 421 position, tokenIndex = position9, tokenIndex9 422 { 423 position11, tokenIndex11 := position, tokenIndex 424 if !_rules[ruleGlobalDirective]() { 425 goto l12 426 } 427 goto l11 428 l12: 429 position, tokenIndex = position11, tokenIndex11 430 if !_rules[ruleLocationDirective]() { 431 goto l13 432 } 433 goto l11 434 l13: 435 position, tokenIndex = position11, tokenIndex11 436 if !_rules[ruleLabelContainingDirective]() { 437 goto l14 438 } 439 goto l11 440 l14: 441 position, tokenIndex = position11, tokenIndex11 442 if !_rules[ruleInstruction]() { 443 goto l15 444 } 445 goto l11 446 l15: 447 position, tokenIndex = position11, tokenIndex11 448 if !_rules[ruleDirective]() { 449 goto l16 450 } 451 goto l11 452 l16: 453 position, tokenIndex = position11, tokenIndex11 454 if !_rules[ruleComment]() { 455 goto l17 456 } 457 goto l11 458 l17: 459 position, tokenIndex = position11, tokenIndex11 460 } 461 l11: 462 { 463 position18, tokenIndex18 := position, tokenIndex 464 if !_rules[ruleWS]() { 465 goto l18 466 } 467 goto l19 468 l18: 469 position, tokenIndex = position18, tokenIndex18 470 } 471 l19: 472 { 473 position20, tokenIndex20 := position, tokenIndex 474 { 475 position22, tokenIndex22 := position, tokenIndex 476 if !_rules[ruleComment]() { 477 goto l22 478 } 479 goto l23 480 l22: 481 position, tokenIndex = position22, tokenIndex22 482 } 483 l23: 484 if buffer[position] != rune('\n') { 485 goto l21 486 } 487 position++ 488 goto l20 489 l21: 490 position, tokenIndex = position20, tokenIndex20 491 if buffer[position] != rune(';') { 492 goto l5 493 } 494 position++ 495 } 496 l20: 497 } 498 l9: 499 add(ruleStatement, position6) 500 } 501 return true 502 l5: 503 position, tokenIndex = position5, tokenIndex5 504 return false 505 }, 506 /* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */ 507 func() bool { 508 position24, tokenIndex24 := position, tokenIndex 509 { 510 position25 := position 511 { 512 position26, tokenIndex26 := position, tokenIndex 513 if buffer[position] != rune('.') { 514 goto l27 515 } 516 position++ 517 { 518 position28, tokenIndex28 := position, tokenIndex 519 if buffer[position] != rune('g') { 520 goto l29 521 } 522 position++ 523 goto l28 524 l29: 525 position, tokenIndex = position28, tokenIndex28 526 if buffer[position] != rune('G') { 527 goto l27 528 } 529 position++ 530 } 531 l28: 532 { 533 position30, tokenIndex30 := position, tokenIndex 534 if buffer[position] != rune('l') { 535 goto l31 536 } 537 position++ 538 goto l30 539 l31: 540 position, tokenIndex = position30, tokenIndex30 541 if buffer[position] != rune('L') { 542 goto l27 543 } 544 position++ 545 } 546 l30: 547 { 548 position32, tokenIndex32 := position, tokenIndex 549 if buffer[position] != rune('o') { 550 goto l33 551 } 552 position++ 553 goto l32 554 l33: 555 position, tokenIndex = position32, tokenIndex32 556 if buffer[position] != rune('O') { 557 goto l27 558 } 559 position++ 560 } 561 l32: 562 { 563 position34, tokenIndex34 := position, tokenIndex 564 if buffer[position] != rune('b') { 565 goto l35 566 } 567 position++ 568 goto l34 569 l35: 570 position, tokenIndex = position34, tokenIndex34 571 if buffer[position] != rune('B') { 572 goto l27 573 } 574 position++ 575 } 576 l34: 577 { 578 position36, tokenIndex36 := position, tokenIndex 579 if buffer[position] != rune('a') { 580 goto l37 581 } 582 position++ 583 goto l36 584 l37: 585 position, tokenIndex = position36, tokenIndex36 586 if buffer[position] != rune('A') { 587 goto l27 588 } 589 position++ 590 } 591 l36: 592 { 593 position38, tokenIndex38 := position, tokenIndex 594 if buffer[position] != rune('l') { 595 goto l39 596 } 597 position++ 598 goto l38 599 l39: 600 position, tokenIndex = position38, tokenIndex38 601 if buffer[position] != rune('L') { 602 goto l27 603 } 604 position++ 605 } 606 l38: 607 goto l26 608 l27: 609 position, tokenIndex = position26, tokenIndex26 610 if buffer[position] != rune('.') { 611 goto l24 612 } 613 position++ 614 { 615 position40, tokenIndex40 := position, tokenIndex 616 if buffer[position] != rune('g') { 617 goto l41 618 } 619 position++ 620 goto l40 621 l41: 622 position, tokenIndex = position40, tokenIndex40 623 if buffer[position] != rune('G') { 624 goto l24 625 } 626 position++ 627 } 628 l40: 629 { 630 position42, tokenIndex42 := position, tokenIndex 631 if buffer[position] != rune('l') { 632 goto l43 633 } 634 position++ 635 goto l42 636 l43: 637 position, tokenIndex = position42, tokenIndex42 638 if buffer[position] != rune('L') { 639 goto l24 640 } 641 position++ 642 } 643 l42: 644 { 645 position44, tokenIndex44 := position, tokenIndex 646 if buffer[position] != rune('o') { 647 goto l45 648 } 649 position++ 650 goto l44 651 l45: 652 position, tokenIndex = position44, tokenIndex44 653 if buffer[position] != rune('O') { 654 goto l24 655 } 656 position++ 657 } 658 l44: 659 { 660 position46, tokenIndex46 := position, tokenIndex 661 if buffer[position] != rune('b') { 662 goto l47 663 } 664 position++ 665 goto l46 666 l47: 667 position, tokenIndex = position46, tokenIndex46 668 if buffer[position] != rune('B') { 669 goto l24 670 } 671 position++ 672 } 673 l46: 674 { 675 position48, tokenIndex48 := position, tokenIndex 676 if buffer[position] != rune('l') { 677 goto l49 678 } 679 position++ 680 goto l48 681 l49: 682 position, tokenIndex = position48, tokenIndex48 683 if buffer[position] != rune('L') { 684 goto l24 685 } 686 position++ 687 } 688 l48: 689 } 690 l26: 691 if !_rules[ruleWS]() { 692 goto l24 693 } 694 if !_rules[ruleSymbolName]() { 695 goto l24 696 } 697 add(ruleGlobalDirective, position25) 698 } 699 return true 700 l24: 701 position, tokenIndex = position24, tokenIndex24 702 return false 703 }, 704 /* 3 Directive <- <('.' DirectiveName (WS Args)?)> */ 705 func() bool { 706 position50, tokenIndex50 := position, tokenIndex 707 { 708 position51 := position 709 if buffer[position] != rune('.') { 710 goto l50 711 } 712 position++ 713 if !_rules[ruleDirectiveName]() { 714 goto l50 715 } 716 { 717 position52, tokenIndex52 := position, tokenIndex 718 if !_rules[ruleWS]() { 719 goto l52 720 } 721 if !_rules[ruleArgs]() { 722 goto l52 723 } 724 goto l53 725 l52: 726 position, tokenIndex = position52, tokenIndex52 727 } 728 l53: 729 add(ruleDirective, position51) 730 } 731 return true 732 l50: 733 position, tokenIndex = position50, tokenIndex50 734 return false 735 }, 736 /* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */ 737 func() bool { 738 position54, tokenIndex54 := position, tokenIndex 739 { 740 position55 := position 741 { 742 position58, tokenIndex58 := position, tokenIndex 743 if c := buffer[position]; c < rune('a') || c > rune('z') { 744 goto l59 745 } 746 position++ 747 goto l58 748 l59: 749 position, tokenIndex = position58, tokenIndex58 750 if c := buffer[position]; c < rune('A') || c > rune('Z') { 751 goto l60 752 } 753 position++ 754 goto l58 755 l60: 756 position, tokenIndex = position58, tokenIndex58 757 { 758 position62, tokenIndex62 := position, tokenIndex 759 if c := buffer[position]; c < rune('0') || c > rune('9') { 760 goto l63 761 } 762 position++ 763 goto l62 764 l63: 765 position, tokenIndex = position62, tokenIndex62 766 if c := buffer[position]; c < rune('0') || c > rune('9') { 767 goto l61 768 } 769 position++ 770 } 771 l62: 772 goto l58 773 l61: 774 position, tokenIndex = position58, tokenIndex58 775 if buffer[position] != rune('_') { 776 goto l54 777 } 778 position++ 779 } 780 l58: 781 l56: 782 { 783 position57, tokenIndex57 := position, tokenIndex 784 { 785 position64, tokenIndex64 := position, tokenIndex 786 if c := buffer[position]; c < rune('a') || c > rune('z') { 787 goto l65 788 } 789 position++ 790 goto l64 791 l65: 792 position, tokenIndex = position64, tokenIndex64 793 if c := buffer[position]; c < rune('A') || c > rune('Z') { 794 goto l66 795 } 796 position++ 797 goto l64 798 l66: 799 position, tokenIndex = position64, tokenIndex64 800 { 801 position68, tokenIndex68 := position, tokenIndex 802 if c := buffer[position]; c < rune('0') || c > rune('9') { 803 goto l69 804 } 805 position++ 806 goto l68 807 l69: 808 position, tokenIndex = position68, tokenIndex68 809 if c := buffer[position]; c < rune('0') || c > rune('9') { 810 goto l67 811 } 812 position++ 813 } 814 l68: 815 goto l64 816 l67: 817 position, tokenIndex = position64, tokenIndex64 818 if buffer[position] != rune('_') { 819 goto l57 820 } 821 position++ 822 } 823 l64: 824 goto l56 825 l57: 826 position, tokenIndex = position57, tokenIndex57 827 } 828 add(ruleDirectiveName, position55) 829 } 830 return true 831 l54: 832 position, tokenIndex = position54, tokenIndex54 833 return false 834 }, 835 /* 5 LocationDirective <- <((('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C'))) WS (!('#' / '\n') .)+)> */ 836 func() bool { 837 position70, tokenIndex70 := position, tokenIndex 838 { 839 position71 := position 840 { 841 position72, tokenIndex72 := position, tokenIndex 842 if buffer[position] != rune('.') { 843 goto l73 844 } 845 position++ 846 { 847 position74, tokenIndex74 := position, tokenIndex 848 if buffer[position] != rune('f') { 849 goto l75 850 } 851 position++ 852 goto l74 853 l75: 854 position, tokenIndex = position74, tokenIndex74 855 if buffer[position] != rune('F') { 856 goto l73 857 } 858 position++ 859 } 860 l74: 861 { 862 position76, tokenIndex76 := position, tokenIndex 863 if buffer[position] != rune('i') { 864 goto l77 865 } 866 position++ 867 goto l76 868 l77: 869 position, tokenIndex = position76, tokenIndex76 870 if buffer[position] != rune('I') { 871 goto l73 872 } 873 position++ 874 } 875 l76: 876 { 877 position78, tokenIndex78 := position, tokenIndex 878 if buffer[position] != rune('l') { 879 goto l79 880 } 881 position++ 882 goto l78 883 l79: 884 position, tokenIndex = position78, tokenIndex78 885 if buffer[position] != rune('L') { 886 goto l73 887 } 888 position++ 889 } 890 l78: 891 { 892 position80, tokenIndex80 := position, tokenIndex 893 if buffer[position] != rune('e') { 894 goto l81 895 } 896 position++ 897 goto l80 898 l81: 899 position, tokenIndex = position80, tokenIndex80 900 if buffer[position] != rune('E') { 901 goto l73 902 } 903 position++ 904 } 905 l80: 906 goto l72 907 l73: 908 position, tokenIndex = position72, tokenIndex72 909 if buffer[position] != rune('.') { 910 goto l70 911 } 912 position++ 913 { 914 position82, tokenIndex82 := position, tokenIndex 915 if buffer[position] != rune('l') { 916 goto l83 917 } 918 position++ 919 goto l82 920 l83: 921 position, tokenIndex = position82, tokenIndex82 922 if buffer[position] != rune('L') { 923 goto l70 924 } 925 position++ 926 } 927 l82: 928 { 929 position84, tokenIndex84 := position, tokenIndex 930 if buffer[position] != rune('o') { 931 goto l85 932 } 933 position++ 934 goto l84 935 l85: 936 position, tokenIndex = position84, tokenIndex84 937 if buffer[position] != rune('O') { 938 goto l70 939 } 940 position++ 941 } 942 l84: 943 { 944 position86, tokenIndex86 := position, tokenIndex 945 if buffer[position] != rune('c') { 946 goto l87 947 } 948 position++ 949 goto l86 950 l87: 951 position, tokenIndex = position86, tokenIndex86 952 if buffer[position] != rune('C') { 953 goto l70 954 } 955 position++ 956 } 957 l86: 958 } 959 l72: 960 if !_rules[ruleWS]() { 961 goto l70 962 } 963 { 964 position90, tokenIndex90 := position, tokenIndex 965 { 966 position91, tokenIndex91 := position, tokenIndex 967 if buffer[position] != rune('#') { 968 goto l92 969 } 970 position++ 971 goto l91 972 l92: 973 position, tokenIndex = position91, tokenIndex91 974 if buffer[position] != rune('\n') { 975 goto l90 976 } 977 position++ 978 } 979 l91: 980 goto l70 981 l90: 982 position, tokenIndex = position90, tokenIndex90 983 } 984 if !matchDot() { 985 goto l70 986 } 987 l88: 988 { 989 position89, tokenIndex89 := position, tokenIndex 990 { 991 position93, tokenIndex93 := position, tokenIndex 992 { 993 position94, tokenIndex94 := position, tokenIndex 994 if buffer[position] != rune('#') { 995 goto l95 996 } 997 position++ 998 goto l94 999 l95: 1000 position, tokenIndex = position94, tokenIndex94 1001 if buffer[position] != rune('\n') { 1002 goto l93 1003 } 1004 position++ 1005 } 1006 l94: 1007 goto l89 1008 l93: 1009 position, tokenIndex = position93, tokenIndex93 1010 } 1011 if !matchDot() { 1012 goto l89 1013 } 1014 goto l88 1015 l89: 1016 position, tokenIndex = position89, tokenIndex89 1017 } 1018 add(ruleLocationDirective, position71) 1019 } 1020 return true 1021 l70: 1022 position, tokenIndex = position70, tokenIndex70 1023 return false 1024 }, 1025 /* 6 Args <- <(Arg (WS? ',' WS? Arg)*)> */ 1026 func() bool { 1027 position96, tokenIndex96 := position, tokenIndex 1028 { 1029 position97 := position 1030 if !_rules[ruleArg]() { 1031 goto l96 1032 } 1033 l98: 1034 { 1035 position99, tokenIndex99 := position, tokenIndex 1036 { 1037 position100, tokenIndex100 := position, tokenIndex 1038 if !_rules[ruleWS]() { 1039 goto l100 1040 } 1041 goto l101 1042 l100: 1043 position, tokenIndex = position100, tokenIndex100 1044 } 1045 l101: 1046 if buffer[position] != rune(',') { 1047 goto l99 1048 } 1049 position++ 1050 { 1051 position102, tokenIndex102 := position, tokenIndex 1052 if !_rules[ruleWS]() { 1053 goto l102 1054 } 1055 goto l103 1056 l102: 1057 position, tokenIndex = position102, tokenIndex102 1058 } 1059 l103: 1060 if !_rules[ruleArg]() { 1061 goto l99 1062 } 1063 goto l98 1064 l99: 1065 position, tokenIndex = position99, tokenIndex99 1066 } 1067 add(ruleArgs, position97) 1068 } 1069 return true 1070 l96: 1071 position, tokenIndex = position96, tokenIndex96 1072 return false 1073 }, 1074 /* 7 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */ 1075 func() bool { 1076 { 1077 position105 := position 1078 { 1079 position106, tokenIndex106 := position, tokenIndex 1080 if !_rules[ruleQuotedArg]() { 1081 goto l107 1082 } 1083 goto l106 1084 l107: 1085 position, tokenIndex = position106, tokenIndex106 1086 l108: 1087 { 1088 position109, tokenIndex109 := position, tokenIndex 1089 { 1090 position110, tokenIndex110 := position, tokenIndex 1091 if c := buffer[position]; c < rune('0') || c > rune('9') { 1092 goto l111 1093 } 1094 position++ 1095 goto l110 1096 l111: 1097 position, tokenIndex = position110, tokenIndex110 1098 if c := buffer[position]; c < rune('0') || c > rune('9') { 1099 goto l112 1100 } 1101 position++ 1102 goto l110 1103 l112: 1104 position, tokenIndex = position110, tokenIndex110 1105 { 1106 position114, tokenIndex114 := position, tokenIndex 1107 if c := buffer[position]; c < rune('a') || c > rune('z') { 1108 goto l115 1109 } 1110 position++ 1111 goto l114 1112 l115: 1113 position, tokenIndex = position114, tokenIndex114 1114 if c := buffer[position]; c < rune('A') || c > rune('Z') { 1115 goto l113 1116 } 1117 position++ 1118 } 1119 l114: 1120 goto l110 1121 l113: 1122 position, tokenIndex = position110, tokenIndex110 1123 if buffer[position] != rune('%') { 1124 goto l116 1125 } 1126 position++ 1127 goto l110 1128 l116: 1129 position, tokenIndex = position110, tokenIndex110 1130 if buffer[position] != rune('+') { 1131 goto l117 1132 } 1133 position++ 1134 goto l110 1135 l117: 1136 position, tokenIndex = position110, tokenIndex110 1137 if buffer[position] != rune('-') { 1138 goto l118 1139 } 1140 position++ 1141 goto l110 1142 l118: 1143 position, tokenIndex = position110, tokenIndex110 1144 if buffer[position] != rune('*') { 1145 goto l119 1146 } 1147 position++ 1148 goto l110 1149 l119: 1150 position, tokenIndex = position110, tokenIndex110 1151 if buffer[position] != rune('_') { 1152 goto l120 1153 } 1154 position++ 1155 goto l110 1156 l120: 1157 position, tokenIndex = position110, tokenIndex110 1158 if buffer[position] != rune('@') { 1159 goto l121 1160 } 1161 position++ 1162 goto l110 1163 l121: 1164 position, tokenIndex = position110, tokenIndex110 1165 if buffer[position] != rune('.') { 1166 goto l109 1167 } 1168 position++ 1169 } 1170 l110: 1171 goto l108 1172 l109: 1173 position, tokenIndex = position109, tokenIndex109 1174 } 1175 } 1176 l106: 1177 add(ruleArg, position105) 1178 } 1179 return true 1180 }, 1181 /* 8 QuotedArg <- <('"' QuotedText '"')> */ 1182 func() bool { 1183 position122, tokenIndex122 := position, tokenIndex 1184 { 1185 position123 := position 1186 if buffer[position] != rune('"') { 1187 goto l122 1188 } 1189 position++ 1190 if !_rules[ruleQuotedText]() { 1191 goto l122 1192 } 1193 if buffer[position] != rune('"') { 1194 goto l122 1195 } 1196 position++ 1197 add(ruleQuotedArg, position123) 1198 } 1199 return true 1200 l122: 1201 position, tokenIndex = position122, tokenIndex122 1202 return false 1203 }, 1204 /* 9 QuotedText <- <(EscapedChar / (!'"' .))*> */ 1205 func() bool { 1206 { 1207 position125 := position 1208 l126: 1209 { 1210 position127, tokenIndex127 := position, tokenIndex 1211 { 1212 position128, tokenIndex128 := position, tokenIndex 1213 if !_rules[ruleEscapedChar]() { 1214 goto l129 1215 } 1216 goto l128 1217 l129: 1218 position, tokenIndex = position128, tokenIndex128 1219 { 1220 position130, tokenIndex130 := position, tokenIndex 1221 if buffer[position] != rune('"') { 1222 goto l130 1223 } 1224 position++ 1225 goto l127 1226 l130: 1227 position, tokenIndex = position130, tokenIndex130 1228 } 1229 if !matchDot() { 1230 goto l127 1231 } 1232 } 1233 l128: 1234 goto l126 1235 l127: 1236 position, tokenIndex = position127, tokenIndex127 1237 } 1238 add(ruleQuotedText, position125) 1239 } 1240 return true 1241 }, 1242 /* 10 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */ 1243 func() bool { 1244 position131, tokenIndex131 := position, tokenIndex 1245 { 1246 position132 := position 1247 if !_rules[ruleLabelContainingDirectiveName]() { 1248 goto l131 1249 } 1250 if !_rules[ruleWS]() { 1251 goto l131 1252 } 1253 if !_rules[ruleSymbolArgs]() { 1254 goto l131 1255 } 1256 add(ruleLabelContainingDirective, position132) 1257 } 1258 return true 1259 l131: 1260 position, tokenIndex = position131, tokenIndex131 1261 return false 1262 }, 1263 /* 11 LabelContainingDirectiveName <- <(('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */ 1264 func() bool { 1265 position133, tokenIndex133 := position, tokenIndex 1266 { 1267 position134 := position 1268 { 1269 position135, tokenIndex135 := position, tokenIndex 1270 if buffer[position] != rune('.') { 1271 goto l136 1272 } 1273 position++ 1274 { 1275 position137, tokenIndex137 := position, tokenIndex 1276 if buffer[position] != rune('l') { 1277 goto l138 1278 } 1279 position++ 1280 goto l137 1281 l138: 1282 position, tokenIndex = position137, tokenIndex137 1283 if buffer[position] != rune('L') { 1284 goto l136 1285 } 1286 position++ 1287 } 1288 l137: 1289 { 1290 position139, tokenIndex139 := position, tokenIndex 1291 if buffer[position] != rune('o') { 1292 goto l140 1293 } 1294 position++ 1295 goto l139 1296 l140: 1297 position, tokenIndex = position139, tokenIndex139 1298 if buffer[position] != rune('O') { 1299 goto l136 1300 } 1301 position++ 1302 } 1303 l139: 1304 { 1305 position141, tokenIndex141 := position, tokenIndex 1306 if buffer[position] != rune('n') { 1307 goto l142 1308 } 1309 position++ 1310 goto l141 1311 l142: 1312 position, tokenIndex = position141, tokenIndex141 1313 if buffer[position] != rune('N') { 1314 goto l136 1315 } 1316 position++ 1317 } 1318 l141: 1319 { 1320 position143, tokenIndex143 := position, tokenIndex 1321 if buffer[position] != rune('g') { 1322 goto l144 1323 } 1324 position++ 1325 goto l143 1326 l144: 1327 position, tokenIndex = position143, tokenIndex143 1328 if buffer[position] != rune('G') { 1329 goto l136 1330 } 1331 position++ 1332 } 1333 l143: 1334 goto l135 1335 l136: 1336 position, tokenIndex = position135, tokenIndex135 1337 if buffer[position] != rune('.') { 1338 goto l145 1339 } 1340 position++ 1341 { 1342 position146, tokenIndex146 := position, tokenIndex 1343 if buffer[position] != rune('s') { 1344 goto l147 1345 } 1346 position++ 1347 goto l146 1348 l147: 1349 position, tokenIndex = position146, tokenIndex146 1350 if buffer[position] != rune('S') { 1351 goto l145 1352 } 1353 position++ 1354 } 1355 l146: 1356 { 1357 position148, tokenIndex148 := position, tokenIndex 1358 if buffer[position] != rune('e') { 1359 goto l149 1360 } 1361 position++ 1362 goto l148 1363 l149: 1364 position, tokenIndex = position148, tokenIndex148 1365 if buffer[position] != rune('E') { 1366 goto l145 1367 } 1368 position++ 1369 } 1370 l148: 1371 { 1372 position150, tokenIndex150 := position, tokenIndex 1373 if buffer[position] != rune('t') { 1374 goto l151 1375 } 1376 position++ 1377 goto l150 1378 l151: 1379 position, tokenIndex = position150, tokenIndex150 1380 if buffer[position] != rune('T') { 1381 goto l145 1382 } 1383 position++ 1384 } 1385 l150: 1386 goto l135 1387 l145: 1388 position, tokenIndex = position135, tokenIndex135 1389 if buffer[position] != rune('.') { 1390 goto l152 1391 } 1392 position++ 1393 if buffer[position] != rune('8') { 1394 goto l152 1395 } 1396 position++ 1397 { 1398 position153, tokenIndex153 := position, tokenIndex 1399 if buffer[position] != rune('b') { 1400 goto l154 1401 } 1402 position++ 1403 goto l153 1404 l154: 1405 position, tokenIndex = position153, tokenIndex153 1406 if buffer[position] != rune('B') { 1407 goto l152 1408 } 1409 position++ 1410 } 1411 l153: 1412 { 1413 position155, tokenIndex155 := position, tokenIndex 1414 if buffer[position] != rune('y') { 1415 goto l156 1416 } 1417 position++ 1418 goto l155 1419 l156: 1420 position, tokenIndex = position155, tokenIndex155 1421 if buffer[position] != rune('Y') { 1422 goto l152 1423 } 1424 position++ 1425 } 1426 l155: 1427 { 1428 position157, tokenIndex157 := position, tokenIndex 1429 if buffer[position] != rune('t') { 1430 goto l158 1431 } 1432 position++ 1433 goto l157 1434 l158: 1435 position, tokenIndex = position157, tokenIndex157 1436 if buffer[position] != rune('T') { 1437 goto l152 1438 } 1439 position++ 1440 } 1441 l157: 1442 { 1443 position159, tokenIndex159 := position, tokenIndex 1444 if buffer[position] != rune('e') { 1445 goto l160 1446 } 1447 position++ 1448 goto l159 1449 l160: 1450 position, tokenIndex = position159, tokenIndex159 1451 if buffer[position] != rune('E') { 1452 goto l152 1453 } 1454 position++ 1455 } 1456 l159: 1457 goto l135 1458 l152: 1459 position, tokenIndex = position135, tokenIndex135 1460 if buffer[position] != rune('.') { 1461 goto l161 1462 } 1463 position++ 1464 if buffer[position] != rune('4') { 1465 goto l161 1466 } 1467 position++ 1468 { 1469 position162, tokenIndex162 := position, tokenIndex 1470 if buffer[position] != rune('b') { 1471 goto l163 1472 } 1473 position++ 1474 goto l162 1475 l163: 1476 position, tokenIndex = position162, tokenIndex162 1477 if buffer[position] != rune('B') { 1478 goto l161 1479 } 1480 position++ 1481 } 1482 l162: 1483 { 1484 position164, tokenIndex164 := position, tokenIndex 1485 if buffer[position] != rune('y') { 1486 goto l165 1487 } 1488 position++ 1489 goto l164 1490 l165: 1491 position, tokenIndex = position164, tokenIndex164 1492 if buffer[position] != rune('Y') { 1493 goto l161 1494 } 1495 position++ 1496 } 1497 l164: 1498 { 1499 position166, tokenIndex166 := position, tokenIndex 1500 if buffer[position] != rune('t') { 1501 goto l167 1502 } 1503 position++ 1504 goto l166 1505 l167: 1506 position, tokenIndex = position166, tokenIndex166 1507 if buffer[position] != rune('T') { 1508 goto l161 1509 } 1510 position++ 1511 } 1512 l166: 1513 { 1514 position168, tokenIndex168 := position, tokenIndex 1515 if buffer[position] != rune('e') { 1516 goto l169 1517 } 1518 position++ 1519 goto l168 1520 l169: 1521 position, tokenIndex = position168, tokenIndex168 1522 if buffer[position] != rune('E') { 1523 goto l161 1524 } 1525 position++ 1526 } 1527 l168: 1528 goto l135 1529 l161: 1530 position, tokenIndex = position135, tokenIndex135 1531 if buffer[position] != rune('.') { 1532 goto l170 1533 } 1534 position++ 1535 { 1536 position171, tokenIndex171 := position, tokenIndex 1537 if buffer[position] != rune('q') { 1538 goto l172 1539 } 1540 position++ 1541 goto l171 1542 l172: 1543 position, tokenIndex = position171, tokenIndex171 1544 if buffer[position] != rune('Q') { 1545 goto l170 1546 } 1547 position++ 1548 } 1549 l171: 1550 { 1551 position173, tokenIndex173 := position, tokenIndex 1552 if buffer[position] != rune('u') { 1553 goto l174 1554 } 1555 position++ 1556 goto l173 1557 l174: 1558 position, tokenIndex = position173, tokenIndex173 1559 if buffer[position] != rune('U') { 1560 goto l170 1561 } 1562 position++ 1563 } 1564 l173: 1565 { 1566 position175, tokenIndex175 := position, tokenIndex 1567 if buffer[position] != rune('a') { 1568 goto l176 1569 } 1570 position++ 1571 goto l175 1572 l176: 1573 position, tokenIndex = position175, tokenIndex175 1574 if buffer[position] != rune('A') { 1575 goto l170 1576 } 1577 position++ 1578 } 1579 l175: 1580 { 1581 position177, tokenIndex177 := position, tokenIndex 1582 if buffer[position] != rune('d') { 1583 goto l178 1584 } 1585 position++ 1586 goto l177 1587 l178: 1588 position, tokenIndex = position177, tokenIndex177 1589 if buffer[position] != rune('D') { 1590 goto l170 1591 } 1592 position++ 1593 } 1594 l177: 1595 goto l135 1596 l170: 1597 position, tokenIndex = position135, tokenIndex135 1598 if buffer[position] != rune('.') { 1599 goto l179 1600 } 1601 position++ 1602 { 1603 position180, tokenIndex180 := position, tokenIndex 1604 if buffer[position] != rune('t') { 1605 goto l181 1606 } 1607 position++ 1608 goto l180 1609 l181: 1610 position, tokenIndex = position180, tokenIndex180 1611 if buffer[position] != rune('T') { 1612 goto l179 1613 } 1614 position++ 1615 } 1616 l180: 1617 { 1618 position182, tokenIndex182 := position, tokenIndex 1619 if buffer[position] != rune('c') { 1620 goto l183 1621 } 1622 position++ 1623 goto l182 1624 l183: 1625 position, tokenIndex = position182, tokenIndex182 1626 if buffer[position] != rune('C') { 1627 goto l179 1628 } 1629 position++ 1630 } 1631 l182: 1632 goto l135 1633 l179: 1634 position, tokenIndex = position135, tokenIndex135 1635 if buffer[position] != rune('.') { 1636 goto l184 1637 } 1638 position++ 1639 { 1640 position185, tokenIndex185 := position, tokenIndex 1641 if buffer[position] != rune('l') { 1642 goto l186 1643 } 1644 position++ 1645 goto l185 1646 l186: 1647 position, tokenIndex = position185, tokenIndex185 1648 if buffer[position] != rune('L') { 1649 goto l184 1650 } 1651 position++ 1652 } 1653 l185: 1654 { 1655 position187, tokenIndex187 := position, tokenIndex 1656 if buffer[position] != rune('o') { 1657 goto l188 1658 } 1659 position++ 1660 goto l187 1661 l188: 1662 position, tokenIndex = position187, tokenIndex187 1663 if buffer[position] != rune('O') { 1664 goto l184 1665 } 1666 position++ 1667 } 1668 l187: 1669 { 1670 position189, tokenIndex189 := position, tokenIndex 1671 if buffer[position] != rune('c') { 1672 goto l190 1673 } 1674 position++ 1675 goto l189 1676 l190: 1677 position, tokenIndex = position189, tokenIndex189 1678 if buffer[position] != rune('C') { 1679 goto l184 1680 } 1681 position++ 1682 } 1683 l189: 1684 { 1685 position191, tokenIndex191 := position, tokenIndex 1686 if buffer[position] != rune('a') { 1687 goto l192 1688 } 1689 position++ 1690 goto l191 1691 l192: 1692 position, tokenIndex = position191, tokenIndex191 1693 if buffer[position] != rune('A') { 1694 goto l184 1695 } 1696 position++ 1697 } 1698 l191: 1699 { 1700 position193, tokenIndex193 := position, tokenIndex 1701 if buffer[position] != rune('l') { 1702 goto l194 1703 } 1704 position++ 1705 goto l193 1706 l194: 1707 position, tokenIndex = position193, tokenIndex193 1708 if buffer[position] != rune('L') { 1709 goto l184 1710 } 1711 position++ 1712 } 1713 l193: 1714 { 1715 position195, tokenIndex195 := position, tokenIndex 1716 if buffer[position] != rune('e') { 1717 goto l196 1718 } 1719 position++ 1720 goto l195 1721 l196: 1722 position, tokenIndex = position195, tokenIndex195 1723 if buffer[position] != rune('E') { 1724 goto l184 1725 } 1726 position++ 1727 } 1728 l195: 1729 { 1730 position197, tokenIndex197 := position, tokenIndex 1731 if buffer[position] != rune('n') { 1732 goto l198 1733 } 1734 position++ 1735 goto l197 1736 l198: 1737 position, tokenIndex = position197, tokenIndex197 1738 if buffer[position] != rune('N') { 1739 goto l184 1740 } 1741 position++ 1742 } 1743 l197: 1744 { 1745 position199, tokenIndex199 := position, tokenIndex 1746 if buffer[position] != rune('t') { 1747 goto l200 1748 } 1749 position++ 1750 goto l199 1751 l200: 1752 position, tokenIndex = position199, tokenIndex199 1753 if buffer[position] != rune('T') { 1754 goto l184 1755 } 1756 position++ 1757 } 1758 l199: 1759 { 1760 position201, tokenIndex201 := position, tokenIndex 1761 if buffer[position] != rune('r') { 1762 goto l202 1763 } 1764 position++ 1765 goto l201 1766 l202: 1767 position, tokenIndex = position201, tokenIndex201 1768 if buffer[position] != rune('R') { 1769 goto l184 1770 } 1771 position++ 1772 } 1773 l201: 1774 { 1775 position203, tokenIndex203 := position, tokenIndex 1776 if buffer[position] != rune('y') { 1777 goto l204 1778 } 1779 position++ 1780 goto l203 1781 l204: 1782 position, tokenIndex = position203, tokenIndex203 1783 if buffer[position] != rune('Y') { 1784 goto l184 1785 } 1786 position++ 1787 } 1788 l203: 1789 goto l135 1790 l184: 1791 position, tokenIndex = position135, tokenIndex135 1792 if buffer[position] != rune('.') { 1793 goto l205 1794 } 1795 position++ 1796 { 1797 position206, tokenIndex206 := position, tokenIndex 1798 if buffer[position] != rune('s') { 1799 goto l207 1800 } 1801 position++ 1802 goto l206 1803 l207: 1804 position, tokenIndex = position206, tokenIndex206 1805 if buffer[position] != rune('S') { 1806 goto l205 1807 } 1808 position++ 1809 } 1810 l206: 1811 { 1812 position208, tokenIndex208 := position, tokenIndex 1813 if buffer[position] != rune('i') { 1814 goto l209 1815 } 1816 position++ 1817 goto l208 1818 l209: 1819 position, tokenIndex = position208, tokenIndex208 1820 if buffer[position] != rune('I') { 1821 goto l205 1822 } 1823 position++ 1824 } 1825 l208: 1826 { 1827 position210, tokenIndex210 := position, tokenIndex 1828 if buffer[position] != rune('z') { 1829 goto l211 1830 } 1831 position++ 1832 goto l210 1833 l211: 1834 position, tokenIndex = position210, tokenIndex210 1835 if buffer[position] != rune('Z') { 1836 goto l205 1837 } 1838 position++ 1839 } 1840 l210: 1841 { 1842 position212, tokenIndex212 := position, tokenIndex 1843 if buffer[position] != rune('e') { 1844 goto l213 1845 } 1846 position++ 1847 goto l212 1848 l213: 1849 position, tokenIndex = position212, tokenIndex212 1850 if buffer[position] != rune('E') { 1851 goto l205 1852 } 1853 position++ 1854 } 1855 l212: 1856 goto l135 1857 l205: 1858 position, tokenIndex = position135, tokenIndex135 1859 if buffer[position] != rune('.') { 1860 goto l214 1861 } 1862 position++ 1863 { 1864 position215, tokenIndex215 := position, tokenIndex 1865 if buffer[position] != rune('t') { 1866 goto l216 1867 } 1868 position++ 1869 goto l215 1870 l216: 1871 position, tokenIndex = position215, tokenIndex215 1872 if buffer[position] != rune('T') { 1873 goto l214 1874 } 1875 position++ 1876 } 1877 l215: 1878 { 1879 position217, tokenIndex217 := position, tokenIndex 1880 if buffer[position] != rune('y') { 1881 goto l218 1882 } 1883 position++ 1884 goto l217 1885 l218: 1886 position, tokenIndex = position217, tokenIndex217 1887 if buffer[position] != rune('Y') { 1888 goto l214 1889 } 1890 position++ 1891 } 1892 l217: 1893 { 1894 position219, tokenIndex219 := position, tokenIndex 1895 if buffer[position] != rune('p') { 1896 goto l220 1897 } 1898 position++ 1899 goto l219 1900 l220: 1901 position, tokenIndex = position219, tokenIndex219 1902 if buffer[position] != rune('P') { 1903 goto l214 1904 } 1905 position++ 1906 } 1907 l219: 1908 { 1909 position221, tokenIndex221 := position, tokenIndex 1910 if buffer[position] != rune('e') { 1911 goto l222 1912 } 1913 position++ 1914 goto l221 1915 l222: 1916 position, tokenIndex = position221, tokenIndex221 1917 if buffer[position] != rune('E') { 1918 goto l214 1919 } 1920 position++ 1921 } 1922 l221: 1923 goto l135 1924 l214: 1925 position, tokenIndex = position135, tokenIndex135 1926 if buffer[position] != rune('.') { 1927 goto l223 1928 } 1929 position++ 1930 { 1931 position224, tokenIndex224 := position, tokenIndex 1932 if buffer[position] != rune('u') { 1933 goto l225 1934 } 1935 position++ 1936 goto l224 1937 l225: 1938 position, tokenIndex = position224, tokenIndex224 1939 if buffer[position] != rune('U') { 1940 goto l223 1941 } 1942 position++ 1943 } 1944 l224: 1945 { 1946 position226, tokenIndex226 := position, tokenIndex 1947 if buffer[position] != rune('l') { 1948 goto l227 1949 } 1950 position++ 1951 goto l226 1952 l227: 1953 position, tokenIndex = position226, tokenIndex226 1954 if buffer[position] != rune('L') { 1955 goto l223 1956 } 1957 position++ 1958 } 1959 l226: 1960 { 1961 position228, tokenIndex228 := position, tokenIndex 1962 if buffer[position] != rune('e') { 1963 goto l229 1964 } 1965 position++ 1966 goto l228 1967 l229: 1968 position, tokenIndex = position228, tokenIndex228 1969 if buffer[position] != rune('E') { 1970 goto l223 1971 } 1972 position++ 1973 } 1974 l228: 1975 { 1976 position230, tokenIndex230 := position, tokenIndex 1977 if buffer[position] != rune('b') { 1978 goto l231 1979 } 1980 position++ 1981 goto l230 1982 l231: 1983 position, tokenIndex = position230, tokenIndex230 1984 if buffer[position] != rune('B') { 1985 goto l223 1986 } 1987 position++ 1988 } 1989 l230: 1990 if buffer[position] != rune('1') { 1991 goto l223 1992 } 1993 position++ 1994 if buffer[position] != rune('2') { 1995 goto l223 1996 } 1997 position++ 1998 if buffer[position] != rune('8') { 1999 goto l223 2000 } 2001 position++ 2002 goto l135 2003 l223: 2004 position, tokenIndex = position135, tokenIndex135 2005 if buffer[position] != rune('.') { 2006 goto l133 2007 } 2008 position++ 2009 { 2010 position232, tokenIndex232 := position, tokenIndex 2011 if buffer[position] != rune('s') { 2012 goto l233 2013 } 2014 position++ 2015 goto l232 2016 l233: 2017 position, tokenIndex = position232, tokenIndex232 2018 if buffer[position] != rune('S') { 2019 goto l133 2020 } 2021 position++ 2022 } 2023 l232: 2024 { 2025 position234, tokenIndex234 := position, tokenIndex 2026 if buffer[position] != rune('l') { 2027 goto l235 2028 } 2029 position++ 2030 goto l234 2031 l235: 2032 position, tokenIndex = position234, tokenIndex234 2033 if buffer[position] != rune('L') { 2034 goto l133 2035 } 2036 position++ 2037 } 2038 l234: 2039 { 2040 position236, tokenIndex236 := position, tokenIndex 2041 if buffer[position] != rune('e') { 2042 goto l237 2043 } 2044 position++ 2045 goto l236 2046 l237: 2047 position, tokenIndex = position236, tokenIndex236 2048 if buffer[position] != rune('E') { 2049 goto l133 2050 } 2051 position++ 2052 } 2053 l236: 2054 { 2055 position238, tokenIndex238 := position, tokenIndex 2056 if buffer[position] != rune('b') { 2057 goto l239 2058 } 2059 position++ 2060 goto l238 2061 l239: 2062 position, tokenIndex = position238, tokenIndex238 2063 if buffer[position] != rune('B') { 2064 goto l133 2065 } 2066 position++ 2067 } 2068 l238: 2069 if buffer[position] != rune('1') { 2070 goto l133 2071 } 2072 position++ 2073 if buffer[position] != rune('2') { 2074 goto l133 2075 } 2076 position++ 2077 if buffer[position] != rune('8') { 2078 goto l133 2079 } 2080 position++ 2081 } 2082 l135: 2083 add(ruleLabelContainingDirectiveName, position134) 2084 } 2085 return true 2086 l133: 2087 position, tokenIndex = position133, tokenIndex133 2088 return false 2089 }, 2090 /* 12 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */ 2091 func() bool { 2092 position240, tokenIndex240 := position, tokenIndex 2093 { 2094 position241 := position 2095 if !_rules[ruleSymbolArg]() { 2096 goto l240 2097 } 2098 l242: 2099 { 2100 position243, tokenIndex243 := position, tokenIndex 2101 { 2102 position244, tokenIndex244 := position, tokenIndex 2103 if !_rules[ruleWS]() { 2104 goto l244 2105 } 2106 goto l245 2107 l244: 2108 position, tokenIndex = position244, tokenIndex244 2109 } 2110 l245: 2111 if buffer[position] != rune(',') { 2112 goto l243 2113 } 2114 position++ 2115 { 2116 position246, tokenIndex246 := position, tokenIndex 2117 if !_rules[ruleWS]() { 2118 goto l246 2119 } 2120 goto l247 2121 l246: 2122 position, tokenIndex = position246, tokenIndex246 2123 } 2124 l247: 2125 if !_rules[ruleSymbolArg]() { 2126 goto l243 2127 } 2128 goto l242 2129 l243: 2130 position, tokenIndex = position243, tokenIndex243 2131 } 2132 add(ruleSymbolArgs, position241) 2133 } 2134 return true 2135 l240: 2136 position, tokenIndex = position240, tokenIndex240 2137 return false 2138 }, 2139 /* 13 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */ 2140 func() bool { 2141 position248, tokenIndex248 := position, tokenIndex 2142 { 2143 position249 := position 2144 { 2145 position250, tokenIndex250 := position, tokenIndex 2146 if !_rules[ruleOffset]() { 2147 goto l251 2148 } 2149 goto l250 2150 l251: 2151 position, tokenIndex = position250, tokenIndex250 2152 if !_rules[ruleSymbolType]() { 2153 goto l252 2154 } 2155 goto l250 2156 l252: 2157 position, tokenIndex = position250, tokenIndex250 2158 { 2159 position254, tokenIndex254 := position, tokenIndex 2160 if !_rules[ruleOffset]() { 2161 goto l255 2162 } 2163 goto l254 2164 l255: 2165 position, tokenIndex = position254, tokenIndex254 2166 if !_rules[ruleLocalSymbol]() { 2167 goto l256 2168 } 2169 goto l254 2170 l256: 2171 position, tokenIndex = position254, tokenIndex254 2172 if !_rules[ruleSymbolName]() { 2173 goto l257 2174 } 2175 goto l254 2176 l257: 2177 position, tokenIndex = position254, tokenIndex254 2178 if !_rules[ruleDot]() { 2179 goto l253 2180 } 2181 } 2182 l254: 2183 { 2184 position258, tokenIndex258 := position, tokenIndex 2185 if !_rules[ruleWS]() { 2186 goto l258 2187 } 2188 goto l259 2189 l258: 2190 position, tokenIndex = position258, tokenIndex258 2191 } 2192 l259: 2193 if !_rules[ruleOperator]() { 2194 goto l253 2195 } 2196 { 2197 position260, tokenIndex260 := position, tokenIndex 2198 if !_rules[ruleWS]() { 2199 goto l260 2200 } 2201 goto l261 2202 l260: 2203 position, tokenIndex = position260, tokenIndex260 2204 } 2205 l261: 2206 { 2207 position262, tokenIndex262 := position, tokenIndex 2208 if !_rules[ruleOffset]() { 2209 goto l263 2210 } 2211 goto l262 2212 l263: 2213 position, tokenIndex = position262, tokenIndex262 2214 if !_rules[ruleLocalSymbol]() { 2215 goto l264 2216 } 2217 goto l262 2218 l264: 2219 position, tokenIndex = position262, tokenIndex262 2220 if !_rules[ruleSymbolName]() { 2221 goto l253 2222 } 2223 } 2224 l262: 2225 goto l250 2226 l253: 2227 position, tokenIndex = position250, tokenIndex250 2228 if !_rules[ruleLocalSymbol]() { 2229 goto l265 2230 } 2231 { 2232 position266, tokenIndex266 := position, tokenIndex 2233 if !_rules[ruleTCMarker]() { 2234 goto l266 2235 } 2236 goto l267 2237 l266: 2238 position, tokenIndex = position266, tokenIndex266 2239 } 2240 l267: 2241 goto l250 2242 l265: 2243 position, tokenIndex = position250, tokenIndex250 2244 if !_rules[ruleSymbolName]() { 2245 goto l268 2246 } 2247 if !_rules[ruleOffset]() { 2248 goto l268 2249 } 2250 goto l250 2251 l268: 2252 position, tokenIndex = position250, tokenIndex250 2253 if !_rules[ruleSymbolName]() { 2254 goto l248 2255 } 2256 { 2257 position269, tokenIndex269 := position, tokenIndex 2258 if !_rules[ruleTCMarker]() { 2259 goto l269 2260 } 2261 goto l270 2262 l269: 2263 position, tokenIndex = position269, tokenIndex269 2264 } 2265 l270: 2266 } 2267 l250: 2268 add(ruleSymbolArg, position249) 2269 } 2270 return true 2271 l248: 2272 position, tokenIndex = position248, tokenIndex248 2273 return false 2274 }, 2275 /* 14 SymbolType <- <(('@' 'f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('@' 'o' 'b' 'j' 'e' 'c' 't'))> */ 2276 func() bool { 2277 position271, tokenIndex271 := position, tokenIndex 2278 { 2279 position272 := position 2280 { 2281 position273, tokenIndex273 := position, tokenIndex 2282 if buffer[position] != rune('@') { 2283 goto l274 2284 } 2285 position++ 2286 if buffer[position] != rune('f') { 2287 goto l274 2288 } 2289 position++ 2290 if buffer[position] != rune('u') { 2291 goto l274 2292 } 2293 position++ 2294 if buffer[position] != rune('n') { 2295 goto l274 2296 } 2297 position++ 2298 if buffer[position] != rune('c') { 2299 goto l274 2300 } 2301 position++ 2302 if buffer[position] != rune('t') { 2303 goto l274 2304 } 2305 position++ 2306 if buffer[position] != rune('i') { 2307 goto l274 2308 } 2309 position++ 2310 if buffer[position] != rune('o') { 2311 goto l274 2312 } 2313 position++ 2314 if buffer[position] != rune('n') { 2315 goto l274 2316 } 2317 position++ 2318 goto l273 2319 l274: 2320 position, tokenIndex = position273, tokenIndex273 2321 if buffer[position] != rune('@') { 2322 goto l271 2323 } 2324 position++ 2325 if buffer[position] != rune('o') { 2326 goto l271 2327 } 2328 position++ 2329 if buffer[position] != rune('b') { 2330 goto l271 2331 } 2332 position++ 2333 if buffer[position] != rune('j') { 2334 goto l271 2335 } 2336 position++ 2337 if buffer[position] != rune('e') { 2338 goto l271 2339 } 2340 position++ 2341 if buffer[position] != rune('c') { 2342 goto l271 2343 } 2344 position++ 2345 if buffer[position] != rune('t') { 2346 goto l271 2347 } 2348 position++ 2349 } 2350 l273: 2351 add(ruleSymbolType, position272) 2352 } 2353 return true 2354 l271: 2355 position, tokenIndex = position271, tokenIndex271 2356 return false 2357 }, 2358 /* 15 Dot <- <'.'> */ 2359 func() bool { 2360 position275, tokenIndex275 := position, tokenIndex 2361 { 2362 position276 := position 2363 if buffer[position] != rune('.') { 2364 goto l275 2365 } 2366 position++ 2367 add(ruleDot, position276) 2368 } 2369 return true 2370 l275: 2371 position, tokenIndex = position275, tokenIndex275 2372 return false 2373 }, 2374 /* 16 TCMarker <- <('[' 'T' 'C' ']')> */ 2375 func() bool { 2376 position277, tokenIndex277 := position, tokenIndex 2377 { 2378 position278 := position 2379 if buffer[position] != rune('[') { 2380 goto l277 2381 } 2382 position++ 2383 if buffer[position] != rune('T') { 2384 goto l277 2385 } 2386 position++ 2387 if buffer[position] != rune('C') { 2388 goto l277 2389 } 2390 position++ 2391 if buffer[position] != rune(']') { 2392 goto l277 2393 } 2394 position++ 2395 add(ruleTCMarker, position278) 2396 } 2397 return true 2398 l277: 2399 position, tokenIndex = position277, tokenIndex277 2400 return false 2401 }, 2402 /* 17 EscapedChar <- <('\\' .)> */ 2403 func() bool { 2404 position279, tokenIndex279 := position, tokenIndex 2405 { 2406 position280 := position 2407 if buffer[position] != rune('\\') { 2408 goto l279 2409 } 2410 position++ 2411 if !matchDot() { 2412 goto l279 2413 } 2414 add(ruleEscapedChar, position280) 2415 } 2416 return true 2417 l279: 2418 position, tokenIndex = position279, tokenIndex279 2419 return false 2420 }, 2421 /* 18 WS <- <(' ' / '\t')+> */ 2422 func() bool { 2423 position281, tokenIndex281 := position, tokenIndex 2424 { 2425 position282 := position 2426 { 2427 position285, tokenIndex285 := position, tokenIndex 2428 if buffer[position] != rune(' ') { 2429 goto l286 2430 } 2431 position++ 2432 goto l285 2433 l286: 2434 position, tokenIndex = position285, tokenIndex285 2435 if buffer[position] != rune('\t') { 2436 goto l281 2437 } 2438 position++ 2439 } 2440 l285: 2441 l283: 2442 { 2443 position284, tokenIndex284 := position, tokenIndex 2444 { 2445 position287, tokenIndex287 := position, tokenIndex 2446 if buffer[position] != rune(' ') { 2447 goto l288 2448 } 2449 position++ 2450 goto l287 2451 l288: 2452 position, tokenIndex = position287, tokenIndex287 2453 if buffer[position] != rune('\t') { 2454 goto l284 2455 } 2456 position++ 2457 } 2458 l287: 2459 goto l283 2460 l284: 2461 position, tokenIndex = position284, tokenIndex284 2462 } 2463 add(ruleWS, position282) 2464 } 2465 return true 2466 l281: 2467 position, tokenIndex = position281, tokenIndex281 2468 return false 2469 }, 2470 /* 19 Comment <- <('#' (!'\n' .)*)> */ 2471 func() bool { 2472 position289, tokenIndex289 := position, tokenIndex 2473 { 2474 position290 := position 2475 if buffer[position] != rune('#') { 2476 goto l289 2477 } 2478 position++ 2479 l291: 2480 { 2481 position292, tokenIndex292 := position, tokenIndex 2482 { 2483 position293, tokenIndex293 := position, tokenIndex 2484 if buffer[position] != rune('\n') { 2485 goto l293 2486 } 2487 position++ 2488 goto l292 2489 l293: 2490 position, tokenIndex = position293, tokenIndex293 2491 } 2492 if !matchDot() { 2493 goto l292 2494 } 2495 goto l291 2496 l292: 2497 position, tokenIndex = position292, tokenIndex292 2498 } 2499 add(ruleComment, position290) 2500 } 2501 return true 2502 l289: 2503 position, tokenIndex = position289, tokenIndex289 2504 return false 2505 }, 2506 /* 20 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */ 2507 func() bool { 2508 position294, tokenIndex294 := position, tokenIndex 2509 { 2510 position295 := position 2511 { 2512 position296, tokenIndex296 := position, tokenIndex 2513 if !_rules[ruleLocalSymbol]() { 2514 goto l297 2515 } 2516 goto l296 2517 l297: 2518 position, tokenIndex = position296, tokenIndex296 2519 if !_rules[ruleLocalLabel]() { 2520 goto l298 2521 } 2522 goto l296 2523 l298: 2524 position, tokenIndex = position296, tokenIndex296 2525 if !_rules[ruleSymbolName]() { 2526 goto l294 2527 } 2528 } 2529 l296: 2530 if buffer[position] != rune(':') { 2531 goto l294 2532 } 2533 position++ 2534 add(ruleLabel, position295) 2535 } 2536 return true 2537 l294: 2538 position, tokenIndex = position294, tokenIndex294 2539 return false 2540 }, 2541 /* 21 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */ 2542 func() bool { 2543 position299, tokenIndex299 := position, tokenIndex 2544 { 2545 position300 := position 2546 { 2547 position301, tokenIndex301 := position, tokenIndex 2548 if c := buffer[position]; c < rune('a') || c > rune('z') { 2549 goto l302 2550 } 2551 position++ 2552 goto l301 2553 l302: 2554 position, tokenIndex = position301, tokenIndex301 2555 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2556 goto l303 2557 } 2558 position++ 2559 goto l301 2560 l303: 2561 position, tokenIndex = position301, tokenIndex301 2562 if buffer[position] != rune('.') { 2563 goto l304 2564 } 2565 position++ 2566 goto l301 2567 l304: 2568 position, tokenIndex = position301, tokenIndex301 2569 if buffer[position] != rune('_') { 2570 goto l299 2571 } 2572 position++ 2573 } 2574 l301: 2575 l305: 2576 { 2577 position306, tokenIndex306 := position, tokenIndex 2578 { 2579 position307, tokenIndex307 := position, tokenIndex 2580 if c := buffer[position]; c < rune('a') || c > rune('z') { 2581 goto l308 2582 } 2583 position++ 2584 goto l307 2585 l308: 2586 position, tokenIndex = position307, tokenIndex307 2587 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2588 goto l309 2589 } 2590 position++ 2591 goto l307 2592 l309: 2593 position, tokenIndex = position307, tokenIndex307 2594 if buffer[position] != rune('.') { 2595 goto l310 2596 } 2597 position++ 2598 goto l307 2599 l310: 2600 position, tokenIndex = position307, tokenIndex307 2601 { 2602 position312, tokenIndex312 := position, tokenIndex 2603 if c := buffer[position]; c < rune('0') || c > rune('9') { 2604 goto l313 2605 } 2606 position++ 2607 goto l312 2608 l313: 2609 position, tokenIndex = position312, tokenIndex312 2610 if c := buffer[position]; c < rune('0') || c > rune('9') { 2611 goto l311 2612 } 2613 position++ 2614 } 2615 l312: 2616 goto l307 2617 l311: 2618 position, tokenIndex = position307, tokenIndex307 2619 if buffer[position] != rune('$') { 2620 goto l314 2621 } 2622 position++ 2623 goto l307 2624 l314: 2625 position, tokenIndex = position307, tokenIndex307 2626 if buffer[position] != rune('_') { 2627 goto l306 2628 } 2629 position++ 2630 } 2631 l307: 2632 goto l305 2633 l306: 2634 position, tokenIndex = position306, tokenIndex306 2635 } 2636 add(ruleSymbolName, position300) 2637 } 2638 return true 2639 l299: 2640 position, tokenIndex = position299, tokenIndex299 2641 return false 2642 }, 2643 /* 22 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */ 2644 func() bool { 2645 position315, tokenIndex315 := position, tokenIndex 2646 { 2647 position316 := position 2648 if buffer[position] != rune('.') { 2649 goto l315 2650 } 2651 position++ 2652 if buffer[position] != rune('L') { 2653 goto l315 2654 } 2655 position++ 2656 { 2657 position319, tokenIndex319 := position, tokenIndex 2658 if c := buffer[position]; c < rune('a') || c > rune('z') { 2659 goto l320 2660 } 2661 position++ 2662 goto l319 2663 l320: 2664 position, tokenIndex = position319, tokenIndex319 2665 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2666 goto l321 2667 } 2668 position++ 2669 goto l319 2670 l321: 2671 position, tokenIndex = position319, tokenIndex319 2672 if buffer[position] != rune('.') { 2673 goto l322 2674 } 2675 position++ 2676 goto l319 2677 l322: 2678 position, tokenIndex = position319, tokenIndex319 2679 { 2680 position324, tokenIndex324 := position, tokenIndex 2681 if c := buffer[position]; c < rune('0') || c > rune('9') { 2682 goto l325 2683 } 2684 position++ 2685 goto l324 2686 l325: 2687 position, tokenIndex = position324, tokenIndex324 2688 if c := buffer[position]; c < rune('0') || c > rune('9') { 2689 goto l323 2690 } 2691 position++ 2692 } 2693 l324: 2694 goto l319 2695 l323: 2696 position, tokenIndex = position319, tokenIndex319 2697 if buffer[position] != rune('$') { 2698 goto l326 2699 } 2700 position++ 2701 goto l319 2702 l326: 2703 position, tokenIndex = position319, tokenIndex319 2704 if buffer[position] != rune('_') { 2705 goto l315 2706 } 2707 position++ 2708 } 2709 l319: 2710 l317: 2711 { 2712 position318, tokenIndex318 := position, tokenIndex 2713 { 2714 position327, tokenIndex327 := position, tokenIndex 2715 if c := buffer[position]; c < rune('a') || c > rune('z') { 2716 goto l328 2717 } 2718 position++ 2719 goto l327 2720 l328: 2721 position, tokenIndex = position327, tokenIndex327 2722 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2723 goto l329 2724 } 2725 position++ 2726 goto l327 2727 l329: 2728 position, tokenIndex = position327, tokenIndex327 2729 if buffer[position] != rune('.') { 2730 goto l330 2731 } 2732 position++ 2733 goto l327 2734 l330: 2735 position, tokenIndex = position327, tokenIndex327 2736 { 2737 position332, tokenIndex332 := position, tokenIndex 2738 if c := buffer[position]; c < rune('0') || c > rune('9') { 2739 goto l333 2740 } 2741 position++ 2742 goto l332 2743 l333: 2744 position, tokenIndex = position332, tokenIndex332 2745 if c := buffer[position]; c < rune('0') || c > rune('9') { 2746 goto l331 2747 } 2748 position++ 2749 } 2750 l332: 2751 goto l327 2752 l331: 2753 position, tokenIndex = position327, tokenIndex327 2754 if buffer[position] != rune('$') { 2755 goto l334 2756 } 2757 position++ 2758 goto l327 2759 l334: 2760 position, tokenIndex = position327, tokenIndex327 2761 if buffer[position] != rune('_') { 2762 goto l318 2763 } 2764 position++ 2765 } 2766 l327: 2767 goto l317 2768 l318: 2769 position, tokenIndex = position318, tokenIndex318 2770 } 2771 add(ruleLocalSymbol, position316) 2772 } 2773 return true 2774 l315: 2775 position, tokenIndex = position315, tokenIndex315 2776 return false 2777 }, 2778 /* 23 LocalLabel <- <([0-9] ([0-9] / '$')*)> */ 2779 func() bool { 2780 position335, tokenIndex335 := position, tokenIndex 2781 { 2782 position336 := position 2783 if c := buffer[position]; c < rune('0') || c > rune('9') { 2784 goto l335 2785 } 2786 position++ 2787 l337: 2788 { 2789 position338, tokenIndex338 := position, tokenIndex 2790 { 2791 position339, tokenIndex339 := position, tokenIndex 2792 if c := buffer[position]; c < rune('0') || c > rune('9') { 2793 goto l340 2794 } 2795 position++ 2796 goto l339 2797 l340: 2798 position, tokenIndex = position339, tokenIndex339 2799 if buffer[position] != rune('$') { 2800 goto l338 2801 } 2802 position++ 2803 } 2804 l339: 2805 goto l337 2806 l338: 2807 position, tokenIndex = position338, tokenIndex338 2808 } 2809 add(ruleLocalLabel, position336) 2810 } 2811 return true 2812 l335: 2813 position, tokenIndex = position335, tokenIndex335 2814 return false 2815 }, 2816 /* 24 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */ 2817 func() bool { 2818 position341, tokenIndex341 := position, tokenIndex 2819 { 2820 position342 := position 2821 if c := buffer[position]; c < rune('0') || c > rune('9') { 2822 goto l341 2823 } 2824 position++ 2825 l343: 2826 { 2827 position344, tokenIndex344 := position, tokenIndex 2828 { 2829 position345, tokenIndex345 := position, tokenIndex 2830 if c := buffer[position]; c < rune('0') || c > rune('9') { 2831 goto l346 2832 } 2833 position++ 2834 goto l345 2835 l346: 2836 position, tokenIndex = position345, tokenIndex345 2837 if buffer[position] != rune('$') { 2838 goto l344 2839 } 2840 position++ 2841 } 2842 l345: 2843 goto l343 2844 l344: 2845 position, tokenIndex = position344, tokenIndex344 2846 } 2847 { 2848 position347, tokenIndex347 := position, tokenIndex 2849 if buffer[position] != rune('b') { 2850 goto l348 2851 } 2852 position++ 2853 goto l347 2854 l348: 2855 position, tokenIndex = position347, tokenIndex347 2856 if buffer[position] != rune('f') { 2857 goto l341 2858 } 2859 position++ 2860 } 2861 l347: 2862 add(ruleLocalLabelRef, position342) 2863 } 2864 return true 2865 l341: 2866 position, tokenIndex = position341, tokenIndex341 2867 return false 2868 }, 2869 /* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */ 2870 func() bool { 2871 position349, tokenIndex349 := position, tokenIndex 2872 { 2873 position350 := position 2874 if !_rules[ruleInstructionName]() { 2875 goto l349 2876 } 2877 { 2878 position351, tokenIndex351 := position, tokenIndex 2879 if !_rules[ruleWS]() { 2880 goto l351 2881 } 2882 if !_rules[ruleInstructionArg]() { 2883 goto l351 2884 } 2885 l353: 2886 { 2887 position354, tokenIndex354 := position, tokenIndex 2888 { 2889 position355, tokenIndex355 := position, tokenIndex 2890 if !_rules[ruleWS]() { 2891 goto l355 2892 } 2893 goto l356 2894 l355: 2895 position, tokenIndex = position355, tokenIndex355 2896 } 2897 l356: 2898 if buffer[position] != rune(',') { 2899 goto l354 2900 } 2901 position++ 2902 { 2903 position357, tokenIndex357 := position, tokenIndex 2904 if !_rules[ruleWS]() { 2905 goto l357 2906 } 2907 goto l358 2908 l357: 2909 position, tokenIndex = position357, tokenIndex357 2910 } 2911 l358: 2912 if !_rules[ruleInstructionArg]() { 2913 goto l354 2914 } 2915 goto l353 2916 l354: 2917 position, tokenIndex = position354, tokenIndex354 2918 } 2919 goto l352 2920 l351: 2921 position, tokenIndex = position351, tokenIndex351 2922 } 2923 l352: 2924 add(ruleInstruction, position350) 2925 } 2926 return true 2927 l349: 2928 position, tokenIndex = position349, tokenIndex349 2929 return false 2930 }, 2931 /* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */ 2932 func() bool { 2933 position359, tokenIndex359 := position, tokenIndex 2934 { 2935 position360 := position 2936 { 2937 position361, tokenIndex361 := position, tokenIndex 2938 if c := buffer[position]; c < rune('a') || c > rune('z') { 2939 goto l362 2940 } 2941 position++ 2942 goto l361 2943 l362: 2944 position, tokenIndex = position361, tokenIndex361 2945 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2946 goto l359 2947 } 2948 position++ 2949 } 2950 l361: 2951 l363: 2952 { 2953 position364, tokenIndex364 := position, tokenIndex 2954 { 2955 position365, tokenIndex365 := position, tokenIndex 2956 if c := buffer[position]; c < rune('a') || c > rune('z') { 2957 goto l366 2958 } 2959 position++ 2960 goto l365 2961 l366: 2962 position, tokenIndex = position365, tokenIndex365 2963 if c := buffer[position]; c < rune('A') || c > rune('Z') { 2964 goto l367 2965 } 2966 position++ 2967 goto l365 2968 l367: 2969 position, tokenIndex = position365, tokenIndex365 2970 { 2971 position368, tokenIndex368 := position, tokenIndex 2972 if c := buffer[position]; c < rune('0') || c > rune('9') { 2973 goto l369 2974 } 2975 position++ 2976 goto l368 2977 l369: 2978 position, tokenIndex = position368, tokenIndex368 2979 if c := buffer[position]; c < rune('0') || c > rune('9') { 2980 goto l364 2981 } 2982 position++ 2983 } 2984 l368: 2985 } 2986 l365: 2987 goto l363 2988 l364: 2989 position, tokenIndex = position364, tokenIndex364 2990 } 2991 { 2992 position370, tokenIndex370 := position, tokenIndex 2993 { 2994 position372, tokenIndex372 := position, tokenIndex 2995 if buffer[position] != rune('.') { 2996 goto l373 2997 } 2998 position++ 2999 goto l372 3000 l373: 3001 position, tokenIndex = position372, tokenIndex372 3002 if buffer[position] != rune('+') { 3003 goto l374 3004 } 3005 position++ 3006 goto l372 3007 l374: 3008 position, tokenIndex = position372, tokenIndex372 3009 if buffer[position] != rune('-') { 3010 goto l370 3011 } 3012 position++ 3013 } 3014 l372: 3015 goto l371 3016 l370: 3017 position, tokenIndex = position370, tokenIndex370 3018 } 3019 l371: 3020 add(ruleInstructionName, position360) 3021 } 3022 return true 3023 l359: 3024 position, tokenIndex = position359, tokenIndex359 3025 return false 3026 }, 3027 /* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token*)> */ 3028 func() bool { 3029 position375, tokenIndex375 := position, tokenIndex 3030 { 3031 position376 := position 3032 { 3033 position377, tokenIndex377 := position, tokenIndex 3034 if !_rules[ruleIndirectionIndicator]() { 3035 goto l377 3036 } 3037 goto l378 3038 l377: 3039 position, tokenIndex = position377, tokenIndex377 3040 } 3041 l378: 3042 { 3043 position379, tokenIndex379 := position, tokenIndex 3044 if !_rules[ruleRegisterOrConstant]() { 3045 goto l380 3046 } 3047 goto l379 3048 l380: 3049 position, tokenIndex = position379, tokenIndex379 3050 if !_rules[ruleLocalLabelRef]() { 3051 goto l381 3052 } 3053 goto l379 3054 l381: 3055 position, tokenIndex = position379, tokenIndex379 3056 if !_rules[ruleTOCRefHigh]() { 3057 goto l382 3058 } 3059 goto l379 3060 l382: 3061 position, tokenIndex = position379, tokenIndex379 3062 if !_rules[ruleTOCRefLow]() { 3063 goto l383 3064 } 3065 goto l379 3066 l383: 3067 position, tokenIndex = position379, tokenIndex379 3068 if !_rules[ruleMemoryRef]() { 3069 goto l375 3070 } 3071 } 3072 l379: 3073 l384: 3074 { 3075 position385, tokenIndex385 := position, tokenIndex 3076 if !_rules[ruleAVX512Token]() { 3077 goto l385 3078 } 3079 goto l384 3080 l385: 3081 position, tokenIndex = position385, tokenIndex385 3082 } 3083 add(ruleInstructionArg, position376) 3084 } 3085 return true 3086 l375: 3087 position, tokenIndex = position375, tokenIndex375 3088 return false 3089 }, 3090 /* 28 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */ 3091 func() bool { 3092 position386, tokenIndex386 := position, tokenIndex 3093 { 3094 position387 := position 3095 { 3096 position388, tokenIndex388 := position, tokenIndex 3097 if !_rules[ruleWS]() { 3098 goto l388 3099 } 3100 goto l389 3101 l388: 3102 position, tokenIndex = position388, tokenIndex388 3103 } 3104 l389: 3105 if buffer[position] != rune('{') { 3106 goto l386 3107 } 3108 position++ 3109 { 3110 position390, tokenIndex390 := position, tokenIndex 3111 if buffer[position] != rune('%') { 3112 goto l390 3113 } 3114 position++ 3115 goto l391 3116 l390: 3117 position, tokenIndex = position390, tokenIndex390 3118 } 3119 l391: 3120 l392: 3121 { 3122 position393, tokenIndex393 := position, tokenIndex 3123 { 3124 position394, tokenIndex394 := position, tokenIndex 3125 if c := buffer[position]; c < rune('0') || c > rune('9') { 3126 goto l395 3127 } 3128 position++ 3129 goto l394 3130 l395: 3131 position, tokenIndex = position394, tokenIndex394 3132 if c := buffer[position]; c < rune('a') || c > rune('z') { 3133 goto l393 3134 } 3135 position++ 3136 } 3137 l394: 3138 goto l392 3139 l393: 3140 position, tokenIndex = position393, tokenIndex393 3141 } 3142 if buffer[position] != rune('}') { 3143 goto l386 3144 } 3145 position++ 3146 add(ruleAVX512Token, position387) 3147 } 3148 return true 3149 l386: 3150 position, tokenIndex = position386, tokenIndex386 3151 return false 3152 }, 3153 /* 29 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ 3154 func() bool { 3155 position396, tokenIndex396 := position, tokenIndex 3156 { 3157 position397 := position 3158 if buffer[position] != rune('.') { 3159 goto l396 3160 } 3161 position++ 3162 if buffer[position] != rune('T') { 3163 goto l396 3164 } 3165 position++ 3166 if buffer[position] != rune('O') { 3167 goto l396 3168 } 3169 position++ 3170 if buffer[position] != rune('C') { 3171 goto l396 3172 } 3173 position++ 3174 if buffer[position] != rune('.') { 3175 goto l396 3176 } 3177 position++ 3178 if buffer[position] != rune('-') { 3179 goto l396 3180 } 3181 position++ 3182 { 3183 position398, tokenIndex398 := position, tokenIndex 3184 if buffer[position] != rune('0') { 3185 goto l399 3186 } 3187 position++ 3188 if buffer[position] != rune('b') { 3189 goto l399 3190 } 3191 position++ 3192 goto l398 3193 l399: 3194 position, tokenIndex = position398, tokenIndex398 3195 if buffer[position] != rune('.') { 3196 goto l396 3197 } 3198 position++ 3199 if buffer[position] != rune('L') { 3200 goto l396 3201 } 3202 position++ 3203 { 3204 position402, tokenIndex402 := position, tokenIndex 3205 if c := buffer[position]; c < rune('a') || c > rune('z') { 3206 goto l403 3207 } 3208 position++ 3209 goto l402 3210 l403: 3211 position, tokenIndex = position402, tokenIndex402 3212 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3213 goto l404 3214 } 3215 position++ 3216 goto l402 3217 l404: 3218 position, tokenIndex = position402, tokenIndex402 3219 if buffer[position] != rune('_') { 3220 goto l405 3221 } 3222 position++ 3223 goto l402 3224 l405: 3225 position, tokenIndex = position402, tokenIndex402 3226 if c := buffer[position]; c < rune('0') || c > rune('9') { 3227 goto l396 3228 } 3229 position++ 3230 } 3231 l402: 3232 l400: 3233 { 3234 position401, tokenIndex401 := position, tokenIndex 3235 { 3236 position406, tokenIndex406 := position, tokenIndex 3237 if c := buffer[position]; c < rune('a') || c > rune('z') { 3238 goto l407 3239 } 3240 position++ 3241 goto l406 3242 l407: 3243 position, tokenIndex = position406, tokenIndex406 3244 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3245 goto l408 3246 } 3247 position++ 3248 goto l406 3249 l408: 3250 position, tokenIndex = position406, tokenIndex406 3251 if buffer[position] != rune('_') { 3252 goto l409 3253 } 3254 position++ 3255 goto l406 3256 l409: 3257 position, tokenIndex = position406, tokenIndex406 3258 if c := buffer[position]; c < rune('0') || c > rune('9') { 3259 goto l401 3260 } 3261 position++ 3262 } 3263 l406: 3264 goto l400 3265 l401: 3266 position, tokenIndex = position401, tokenIndex401 3267 } 3268 } 3269 l398: 3270 if buffer[position] != rune('@') { 3271 goto l396 3272 } 3273 position++ 3274 { 3275 position410, tokenIndex410 := position, tokenIndex 3276 if buffer[position] != rune('h') { 3277 goto l411 3278 } 3279 position++ 3280 goto l410 3281 l411: 3282 position, tokenIndex = position410, tokenIndex410 3283 if buffer[position] != rune('H') { 3284 goto l396 3285 } 3286 position++ 3287 } 3288 l410: 3289 { 3290 position412, tokenIndex412 := position, tokenIndex 3291 if buffer[position] != rune('a') { 3292 goto l413 3293 } 3294 position++ 3295 goto l412 3296 l413: 3297 position, tokenIndex = position412, tokenIndex412 3298 if buffer[position] != rune('A') { 3299 goto l396 3300 } 3301 position++ 3302 } 3303 l412: 3304 add(ruleTOCRefHigh, position397) 3305 } 3306 return true 3307 l396: 3308 position, tokenIndex = position396, tokenIndex396 3309 return false 3310 }, 3311 /* 30 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ 3312 func() bool { 3313 position414, tokenIndex414 := position, tokenIndex 3314 { 3315 position415 := position 3316 if buffer[position] != rune('.') { 3317 goto l414 3318 } 3319 position++ 3320 if buffer[position] != rune('T') { 3321 goto l414 3322 } 3323 position++ 3324 if buffer[position] != rune('O') { 3325 goto l414 3326 } 3327 position++ 3328 if buffer[position] != rune('C') { 3329 goto l414 3330 } 3331 position++ 3332 if buffer[position] != rune('.') { 3333 goto l414 3334 } 3335 position++ 3336 if buffer[position] != rune('-') { 3337 goto l414 3338 } 3339 position++ 3340 { 3341 position416, tokenIndex416 := position, tokenIndex 3342 if buffer[position] != rune('0') { 3343 goto l417 3344 } 3345 position++ 3346 if buffer[position] != rune('b') { 3347 goto l417 3348 } 3349 position++ 3350 goto l416 3351 l417: 3352 position, tokenIndex = position416, tokenIndex416 3353 if buffer[position] != rune('.') { 3354 goto l414 3355 } 3356 position++ 3357 if buffer[position] != rune('L') { 3358 goto l414 3359 } 3360 position++ 3361 { 3362 position420, tokenIndex420 := position, tokenIndex 3363 if c := buffer[position]; c < rune('a') || c > rune('z') { 3364 goto l421 3365 } 3366 position++ 3367 goto l420 3368 l421: 3369 position, tokenIndex = position420, tokenIndex420 3370 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3371 goto l422 3372 } 3373 position++ 3374 goto l420 3375 l422: 3376 position, tokenIndex = position420, tokenIndex420 3377 if buffer[position] != rune('_') { 3378 goto l423 3379 } 3380 position++ 3381 goto l420 3382 l423: 3383 position, tokenIndex = position420, tokenIndex420 3384 if c := buffer[position]; c < rune('0') || c > rune('9') { 3385 goto l414 3386 } 3387 position++ 3388 } 3389 l420: 3390 l418: 3391 { 3392 position419, tokenIndex419 := position, tokenIndex 3393 { 3394 position424, tokenIndex424 := position, tokenIndex 3395 if c := buffer[position]; c < rune('a') || c > rune('z') { 3396 goto l425 3397 } 3398 position++ 3399 goto l424 3400 l425: 3401 position, tokenIndex = position424, tokenIndex424 3402 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3403 goto l426 3404 } 3405 position++ 3406 goto l424 3407 l426: 3408 position, tokenIndex = position424, tokenIndex424 3409 if buffer[position] != rune('_') { 3410 goto l427 3411 } 3412 position++ 3413 goto l424 3414 l427: 3415 position, tokenIndex = position424, tokenIndex424 3416 if c := buffer[position]; c < rune('0') || c > rune('9') { 3417 goto l419 3418 } 3419 position++ 3420 } 3421 l424: 3422 goto l418 3423 l419: 3424 position, tokenIndex = position419, tokenIndex419 3425 } 3426 } 3427 l416: 3428 if buffer[position] != rune('@') { 3429 goto l414 3430 } 3431 position++ 3432 { 3433 position428, tokenIndex428 := position, tokenIndex 3434 if buffer[position] != rune('l') { 3435 goto l429 3436 } 3437 position++ 3438 goto l428 3439 l429: 3440 position, tokenIndex = position428, tokenIndex428 3441 if buffer[position] != rune('L') { 3442 goto l414 3443 } 3444 position++ 3445 } 3446 l428: 3447 add(ruleTOCRefLow, position415) 3448 } 3449 return true 3450 l414: 3451 position, tokenIndex = position414, tokenIndex414 3452 return false 3453 }, 3454 /* 31 IndirectionIndicator <- <'*'> */ 3455 func() bool { 3456 position430, tokenIndex430 := position, tokenIndex 3457 { 3458 position431 := position 3459 if buffer[position] != rune('*') { 3460 goto l430 3461 } 3462 position++ 3463 add(ruleIndirectionIndicator, position431) 3464 } 3465 return true 3466 l430: 3467 position, tokenIndex = position430, tokenIndex430 3468 return false 3469 }, 3470 /* 32 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ 3471 func() bool { 3472 position432, tokenIndex432 := position, tokenIndex 3473 { 3474 position433 := position 3475 { 3476 position434, tokenIndex434 := position, tokenIndex 3477 if buffer[position] != rune('%') { 3478 goto l435 3479 } 3480 position++ 3481 { 3482 position436, tokenIndex436 := position, tokenIndex 3483 if c := buffer[position]; c < rune('a') || c > rune('z') { 3484 goto l437 3485 } 3486 position++ 3487 goto l436 3488 l437: 3489 position, tokenIndex = position436, tokenIndex436 3490 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3491 goto l435 3492 } 3493 position++ 3494 } 3495 l436: 3496 l438: 3497 { 3498 position439, tokenIndex439 := position, tokenIndex 3499 { 3500 position440, tokenIndex440 := position, tokenIndex 3501 if c := buffer[position]; c < rune('a') || c > rune('z') { 3502 goto l441 3503 } 3504 position++ 3505 goto l440 3506 l441: 3507 position, tokenIndex = position440, tokenIndex440 3508 if c := buffer[position]; c < rune('A') || c > rune('Z') { 3509 goto l442 3510 } 3511 position++ 3512 goto l440 3513 l442: 3514 position, tokenIndex = position440, tokenIndex440 3515 { 3516 position443, tokenIndex443 := position, tokenIndex 3517 if c := buffer[position]; c < rune('0') || c > rune('9') { 3518 goto l444 3519 } 3520 position++ 3521 goto l443 3522 l444: 3523 position, tokenIndex = position443, tokenIndex443 3524 if c := buffer[position]; c < rune('0') || c > rune('9') { 3525 goto l439 3526 } 3527 position++ 3528 } 3529 l443: 3530 } 3531 l440: 3532 goto l438 3533 l439: 3534 position, tokenIndex = position439, tokenIndex439 3535 } 3536 goto l434 3537 l435: 3538 position, tokenIndex = position434, tokenIndex434 3539 { 3540 position445, tokenIndex445 := position, tokenIndex 3541 if buffer[position] != rune('$') { 3542 goto l445 3543 } 3544 position++ 3545 goto l446 3546 l445: 3547 position, tokenIndex = position445, tokenIndex445 3548 } 3549 l446: 3550 { 3551 position447, tokenIndex447 := position, tokenIndex 3552 if !_rules[ruleOffset]() { 3553 goto l448 3554 } 3555 if !_rules[ruleOffset]() { 3556 goto l448 3557 } 3558 goto l447 3559 l448: 3560 position, tokenIndex = position447, tokenIndex447 3561 if !_rules[ruleOffset]() { 3562 goto l432 3563 } 3564 } 3565 l447: 3566 } 3567 l434: 3568 { 3569 position449, tokenIndex449 := position, tokenIndex 3570 { 3571 position450, tokenIndex450 := position, tokenIndex 3572 if buffer[position] != rune('f') { 3573 goto l451 3574 } 3575 position++ 3576 goto l450 3577 l451: 3578 position, tokenIndex = position450, tokenIndex450 3579 if buffer[position] != rune('b') { 3580 goto l452 3581 } 3582 position++ 3583 goto l450 3584 l452: 3585 position, tokenIndex = position450, tokenIndex450 3586 if buffer[position] != rune(':') { 3587 goto l453 3588 } 3589 position++ 3590 goto l450 3591 l453: 3592 position, tokenIndex = position450, tokenIndex450 3593 if buffer[position] != rune('(') { 3594 goto l454 3595 } 3596 position++ 3597 goto l450 3598 l454: 3599 position, tokenIndex = position450, tokenIndex450 3600 if buffer[position] != rune('+') { 3601 goto l455 3602 } 3603 position++ 3604 goto l450 3605 l455: 3606 position, tokenIndex = position450, tokenIndex450 3607 if buffer[position] != rune('-') { 3608 goto l449 3609 } 3610 position++ 3611 } 3612 l450: 3613 goto l432 3614 l449: 3615 position, tokenIndex = position449, tokenIndex449 3616 } 3617 add(ruleRegisterOrConstant, position433) 3618 } 3619 return true 3620 l432: 3621 position, tokenIndex = position432, tokenIndex432 3622 return false 3623 }, 3624 /* 33 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ 3625 func() bool { 3626 position456, tokenIndex456 := position, tokenIndex 3627 { 3628 position457 := position 3629 { 3630 position458, tokenIndex458 := position, tokenIndex 3631 if !_rules[ruleSymbolRef]() { 3632 goto l459 3633 } 3634 if !_rules[ruleBaseIndexScale]() { 3635 goto l459 3636 } 3637 goto l458 3638 l459: 3639 position, tokenIndex = position458, tokenIndex458 3640 if !_rules[ruleSymbolRef]() { 3641 goto l460 3642 } 3643 goto l458 3644 l460: 3645 position, tokenIndex = position458, tokenIndex458 3646 l462: 3647 { 3648 position463, tokenIndex463 := position, tokenIndex 3649 if !_rules[ruleOffset]() { 3650 goto l463 3651 } 3652 goto l462 3653 l463: 3654 position, tokenIndex = position463, tokenIndex463 3655 } 3656 if !_rules[ruleBaseIndexScale]() { 3657 goto l461 3658 } 3659 goto l458 3660 l461: 3661 position, tokenIndex = position458, tokenIndex458 3662 if !_rules[ruleSegmentRegister]() { 3663 goto l464 3664 } 3665 if !_rules[ruleOffset]() { 3666 goto l464 3667 } 3668 if !_rules[ruleBaseIndexScale]() { 3669 goto l464 3670 } 3671 goto l458 3672 l464: 3673 position, tokenIndex = position458, tokenIndex458 3674 if !_rules[ruleSegmentRegister]() { 3675 goto l465 3676 } 3677 if !_rules[ruleBaseIndexScale]() { 3678 goto l465 3679 } 3680 goto l458 3681 l465: 3682 position, tokenIndex = position458, tokenIndex458 3683 if !_rules[ruleSegmentRegister]() { 3684 goto l466 3685 } 3686 if !_rules[ruleOffset]() { 3687 goto l466 3688 } 3689 goto l458 3690 l466: 3691 position, tokenIndex = position458, tokenIndex458 3692 if !_rules[ruleBaseIndexScale]() { 3693 goto l456 3694 } 3695 } 3696 l458: 3697 add(ruleMemoryRef, position457) 3698 } 3699 return true 3700 l456: 3701 position, tokenIndex = position456, tokenIndex456 3702 return false 3703 }, 3704 /* 34 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ 3705 func() bool { 3706 position467, tokenIndex467 := position, tokenIndex 3707 { 3708 position468 := position 3709 { 3710 position469, tokenIndex469 := position, tokenIndex 3711 l471: 3712 { 3713 position472, tokenIndex472 := position, tokenIndex 3714 if !_rules[ruleOffset]() { 3715 goto l472 3716 } 3717 goto l471 3718 l472: 3719 position, tokenIndex = position472, tokenIndex472 3720 } 3721 if buffer[position] != rune('+') { 3722 goto l469 3723 } 3724 position++ 3725 goto l470 3726 l469: 3727 position, tokenIndex = position469, tokenIndex469 3728 } 3729 l470: 3730 { 3731 position473, tokenIndex473 := position, tokenIndex 3732 if !_rules[ruleLocalSymbol]() { 3733 goto l474 3734 } 3735 goto l473 3736 l474: 3737 position, tokenIndex = position473, tokenIndex473 3738 if !_rules[ruleSymbolName]() { 3739 goto l467 3740 } 3741 } 3742 l473: 3743 l475: 3744 { 3745 position476, tokenIndex476 := position, tokenIndex 3746 if !_rules[ruleOffset]() { 3747 goto l476 3748 } 3749 goto l475 3750 l476: 3751 position, tokenIndex = position476, tokenIndex476 3752 } 3753 { 3754 position477, tokenIndex477 := position, tokenIndex 3755 if buffer[position] != rune('@') { 3756 goto l477 3757 } 3758 position++ 3759 if !_rules[ruleSection]() { 3760 goto l477 3761 } 3762 l479: 3763 { 3764 position480, tokenIndex480 := position, tokenIndex 3765 if !_rules[ruleOffset]() { 3766 goto l480 3767 } 3768 goto l479 3769 l480: 3770 position, tokenIndex = position480, tokenIndex480 3771 } 3772 goto l478 3773 l477: 3774 position, tokenIndex = position477, tokenIndex477 3775 } 3776 l478: 3777 add(ruleSymbolRef, position468) 3778 } 3779 return true 3780 l467: 3781 position, tokenIndex = position467, tokenIndex467 3782 return false 3783 }, 3784 /* 35 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ 3785 func() bool { 3786 position481, tokenIndex481 := position, tokenIndex 3787 { 3788 position482 := position 3789 if buffer[position] != rune('(') { 3790 goto l481 3791 } 3792 position++ 3793 { 3794 position483, tokenIndex483 := position, tokenIndex 3795 if !_rules[ruleRegisterOrConstant]() { 3796 goto l483 3797 } 3798 goto l484 3799 l483: 3800 position, tokenIndex = position483, tokenIndex483 3801 } 3802 l484: 3803 { 3804 position485, tokenIndex485 := position, tokenIndex 3805 if !_rules[ruleWS]() { 3806 goto l485 3807 } 3808 goto l486 3809 l485: 3810 position, tokenIndex = position485, tokenIndex485 3811 } 3812 l486: 3813 { 3814 position487, tokenIndex487 := position, tokenIndex 3815 if buffer[position] != rune(',') { 3816 goto l487 3817 } 3818 position++ 3819 { 3820 position489, tokenIndex489 := position, tokenIndex 3821 if !_rules[ruleWS]() { 3822 goto l489 3823 } 3824 goto l490 3825 l489: 3826 position, tokenIndex = position489, tokenIndex489 3827 } 3828 l490: 3829 if !_rules[ruleRegisterOrConstant]() { 3830 goto l487 3831 } 3832 { 3833 position491, tokenIndex491 := position, tokenIndex 3834 if !_rules[ruleWS]() { 3835 goto l491 3836 } 3837 goto l492 3838 l491: 3839 position, tokenIndex = position491, tokenIndex491 3840 } 3841 l492: 3842 { 3843 position493, tokenIndex493 := position, tokenIndex 3844 if buffer[position] != rune(',') { 3845 goto l493 3846 } 3847 position++ 3848 if c := buffer[position]; c < rune('0') || c > rune('9') { 3849 goto l493 3850 } 3851 position++ 3852 l495: 3853 { 3854 position496, tokenIndex496 := position, tokenIndex 3855 if c := buffer[position]; c < rune('0') || c > rune('9') { 3856 goto l496 3857 } 3858 position++ 3859 goto l495 3860 l496: 3861 position, tokenIndex = position496, tokenIndex496 3862 } 3863 goto l494 3864 l493: 3865 position, tokenIndex = position493, tokenIndex493 3866 } 3867 l494: 3868 goto l488 3869 l487: 3870 position, tokenIndex = position487, tokenIndex487 3871 } 3872 l488: 3873 if buffer[position] != rune(')') { 3874 goto l481 3875 } 3876 position++ 3877 add(ruleBaseIndexScale, position482) 3878 } 3879 return true 3880 l481: 3881 position, tokenIndex = position481, tokenIndex481 3882 return false 3883 }, 3884 /* 36 Operator <- <('+' / '-')> */ 3885 func() bool { 3886 position497, tokenIndex497 := position, tokenIndex 3887 { 3888 position498 := position 3889 { 3890 position499, tokenIndex499 := position, tokenIndex 3891 if buffer[position] != rune('+') { 3892 goto l500 3893 } 3894 position++ 3895 goto l499 3896 l500: 3897 position, tokenIndex = position499, tokenIndex499 3898 if buffer[position] != rune('-') { 3899 goto l497 3900 } 3901 position++ 3902 } 3903 l499: 3904 add(ruleOperator, position498) 3905 } 3906 return true 3907 l497: 3908 position, tokenIndex = position497, tokenIndex497 3909 return false 3910 }, 3911 /* 37 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ 3912 func() bool { 3913 position501, tokenIndex501 := position, tokenIndex 3914 { 3915 position502 := position 3916 { 3917 position503, tokenIndex503 := position, tokenIndex 3918 if buffer[position] != rune('+') { 3919 goto l503 3920 } 3921 position++ 3922 goto l504 3923 l503: 3924 position, tokenIndex = position503, tokenIndex503 3925 } 3926 l504: 3927 { 3928 position505, tokenIndex505 := position, tokenIndex 3929 if buffer[position] != rune('-') { 3930 goto l505 3931 } 3932 position++ 3933 goto l506 3934 l505: 3935 position, tokenIndex = position505, tokenIndex505 3936 } 3937 l506: 3938 { 3939 position507, tokenIndex507 := position, tokenIndex 3940 if buffer[position] != rune('0') { 3941 goto l508 3942 } 3943 position++ 3944 { 3945 position509, tokenIndex509 := position, tokenIndex 3946 if buffer[position] != rune('b') { 3947 goto l510 3948 } 3949 position++ 3950 goto l509 3951 l510: 3952 position, tokenIndex = position509, tokenIndex509 3953 if buffer[position] != rune('B') { 3954 goto l508 3955 } 3956 position++ 3957 } 3958 l509: 3959 { 3960 position513, tokenIndex513 := position, tokenIndex 3961 if buffer[position] != rune('0') { 3962 goto l514 3963 } 3964 position++ 3965 goto l513 3966 l514: 3967 position, tokenIndex = position513, tokenIndex513 3968 if buffer[position] != rune('1') { 3969 goto l508 3970 } 3971 position++ 3972 } 3973 l513: 3974 l511: 3975 { 3976 position512, tokenIndex512 := position, tokenIndex 3977 { 3978 position515, tokenIndex515 := position, tokenIndex 3979 if buffer[position] != rune('0') { 3980 goto l516 3981 } 3982 position++ 3983 goto l515 3984 l516: 3985 position, tokenIndex = position515, tokenIndex515 3986 if buffer[position] != rune('1') { 3987 goto l512 3988 } 3989 position++ 3990 } 3991 l515: 3992 goto l511 3993 l512: 3994 position, tokenIndex = position512, tokenIndex512 3995 } 3996 goto l507 3997 l508: 3998 position, tokenIndex = position507, tokenIndex507 3999 if buffer[position] != rune('0') { 4000 goto l517 4001 } 4002 position++ 4003 { 4004 position518, tokenIndex518 := position, tokenIndex 4005 if buffer[position] != rune('x') { 4006 goto l519 4007 } 4008 position++ 4009 goto l518 4010 l519: 4011 position, tokenIndex = position518, tokenIndex518 4012 if buffer[position] != rune('X') { 4013 goto l517 4014 } 4015 position++ 4016 } 4017 l518: 4018 { 4019 position522, tokenIndex522 := position, tokenIndex 4020 if c := buffer[position]; c < rune('0') || c > rune('9') { 4021 goto l523 4022 } 4023 position++ 4024 goto l522 4025 l523: 4026 position, tokenIndex = position522, tokenIndex522 4027 if c := buffer[position]; c < rune('0') || c > rune('9') { 4028 goto l524 4029 } 4030 position++ 4031 goto l522 4032 l524: 4033 position, tokenIndex = position522, tokenIndex522 4034 { 4035 position525, tokenIndex525 := position, tokenIndex 4036 if c := buffer[position]; c < rune('a') || c > rune('f') { 4037 goto l526 4038 } 4039 position++ 4040 goto l525 4041 l526: 4042 position, tokenIndex = position525, tokenIndex525 4043 if c := buffer[position]; c < rune('A') || c > rune('F') { 4044 goto l517 4045 } 4046 position++ 4047 } 4048 l525: 4049 } 4050 l522: 4051 l520: 4052 { 4053 position521, tokenIndex521 := position, tokenIndex 4054 { 4055 position527, tokenIndex527 := position, tokenIndex 4056 if c := buffer[position]; c < rune('0') || c > rune('9') { 4057 goto l528 4058 } 4059 position++ 4060 goto l527 4061 l528: 4062 position, tokenIndex = position527, tokenIndex527 4063 if c := buffer[position]; c < rune('0') || c > rune('9') { 4064 goto l529 4065 } 4066 position++ 4067 goto l527 4068 l529: 4069 position, tokenIndex = position527, tokenIndex527 4070 { 4071 position530, tokenIndex530 := position, tokenIndex 4072 if c := buffer[position]; c < rune('a') || c > rune('f') { 4073 goto l531 4074 } 4075 position++ 4076 goto l530 4077 l531: 4078 position, tokenIndex = position530, tokenIndex530 4079 if c := buffer[position]; c < rune('A') || c > rune('F') { 4080 goto l521 4081 } 4082 position++ 4083 } 4084 l530: 4085 } 4086 l527: 4087 goto l520 4088 l521: 4089 position, tokenIndex = position521, tokenIndex521 4090 } 4091 goto l507 4092 l517: 4093 position, tokenIndex = position507, tokenIndex507 4094 if c := buffer[position]; c < rune('0') || c > rune('9') { 4095 goto l501 4096 } 4097 position++ 4098 l532: 4099 { 4100 position533, tokenIndex533 := position, tokenIndex 4101 if c := buffer[position]; c < rune('0') || c > rune('9') { 4102 goto l533 4103 } 4104 position++ 4105 goto l532 4106 l533: 4107 position, tokenIndex = position533, tokenIndex533 4108 } 4109 } 4110 l507: 4111 add(ruleOffset, position502) 4112 } 4113 return true 4114 l501: 4115 position, tokenIndex = position501, tokenIndex501 4116 return false 4117 }, 4118 /* 38 Section <- <([a-z] / [A-Z] / '@')+> */ 4119 func() bool { 4120 position534, tokenIndex534 := position, tokenIndex 4121 { 4122 position535 := position 4123 { 4124 position538, tokenIndex538 := position, tokenIndex 4125 if c := buffer[position]; c < rune('a') || c > rune('z') { 4126 goto l539 4127 } 4128 position++ 4129 goto l538 4130 l539: 4131 position, tokenIndex = position538, tokenIndex538 4132 if c := buffer[position]; c < rune('A') || c > rune('Z') { 4133 goto l540 4134 } 4135 position++ 4136 goto l538 4137 l540: 4138 position, tokenIndex = position538, tokenIndex538 4139 if buffer[position] != rune('@') { 4140 goto l534 4141 } 4142 position++ 4143 } 4144 l538: 4145 l536: 4146 { 4147 position537, tokenIndex537 := position, tokenIndex 4148 { 4149 position541, tokenIndex541 := position, tokenIndex 4150 if c := buffer[position]; c < rune('a') || c > rune('z') { 4151 goto l542 4152 } 4153 position++ 4154 goto l541 4155 l542: 4156 position, tokenIndex = position541, tokenIndex541 4157 if c := buffer[position]; c < rune('A') || c > rune('Z') { 4158 goto l543 4159 } 4160 position++ 4161 goto l541 4162 l543: 4163 position, tokenIndex = position541, tokenIndex541 4164 if buffer[position] != rune('@') { 4165 goto l537 4166 } 4167 position++ 4168 } 4169 l541: 4170 goto l536 4171 l537: 4172 position, tokenIndex = position537, tokenIndex537 4173 } 4174 add(ruleSection, position535) 4175 } 4176 return true 4177 l534: 4178 position, tokenIndex = position534, tokenIndex534 4179 return false 4180 }, 4181 /* 39 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ 4182 func() bool { 4183 position544, tokenIndex544 := position, tokenIndex 4184 { 4185 position545 := position 4186 if buffer[position] != rune('%') { 4187 goto l544 4188 } 4189 position++ 4190 { 4191 position546, tokenIndex546 := position, tokenIndex 4192 if c := buffer[position]; c < rune('c') || c > rune('g') { 4193 goto l547 4194 } 4195 position++ 4196 goto l546 4197 l547: 4198 position, tokenIndex = position546, tokenIndex546 4199 if buffer[position] != rune('s') { 4200 goto l544 4201 } 4202 position++ 4203 } 4204 l546: 4205 if buffer[position] != rune('s') { 4206 goto l544 4207 } 4208 position++ 4209 if buffer[position] != rune(':') { 4210 goto l544 4211 } 4212 position++ 4213 add(ruleSegmentRegister, position545) 4214 } 4215 return true 4216 l544: 4217 position, tokenIndex = position544, tokenIndex544 4218 return false 4219 }, 4220 } 4221 p.rules = _rules 4222} 4223