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