• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package main
2
3// Code generated by ./peg/peg delocate.peg DO NOT EDIT.
4
5import (
6	"fmt"
7	"io"
8	"os"
9	"sort"
10	"strconv"
11	"strings"
12)
13
14const endSymbol rune = 1114112
15
16/* The rule types inferred from the grammar are below. */
17type pegRule uint8
18
19const (
20	ruleUnknown pegRule = iota
21	ruleAsmFile
22	ruleStatement
23	ruleGlobalDirective
24	ruleDirective
25	ruleDirectiveName
26	ruleLocationDirective
27	ruleFileDirective
28	ruleLocDirective
29	ruleArgs
30	ruleArg
31	ruleQuotedArg
32	ruleQuotedText
33	ruleLabelContainingDirective
34	ruleLabelContainingDirectiveName
35	ruleSymbolArgs
36	ruleSymbolShift
37	ruleSymbolArg
38	ruleOpenParen
39	ruleCloseParen
40	ruleSymbolType
41	ruleDot
42	ruleTCMarker
43	ruleEscapedChar
44	ruleWS
45	ruleComment
46	ruleLabel
47	ruleSymbolName
48	ruleLocalSymbol
49	ruleLocalLabel
50	ruleLocalLabelRef
51	ruleInstruction
52	ruleInstructionName
53	ruleInstructionArg
54	ruleGOTLocation
55	ruleGOTSymbolOffset
56	ruleAVX512Token
57	ruleTOCRefHigh
58	ruleTOCRefLow
59	ruleIndirectionIndicator
60	ruleRegisterOrConstant
61	ruleARMConstantTweak
62	ruleARMRegister
63	ruleARMVectorRegister
64	ruleMemoryRef
65	ruleSymbolRef
66	ruleLow12BitsSymbolRef
67	ruleARMBaseIndexScale
68	ruleARMGOTLow12
69	ruleARMPostincrement
70	ruleBaseIndexScale
71	ruleOperator
72	ruleOffset
73	ruleSection
74	ruleSegmentRegister
75)
76
77var rul3s = [...]string{
78	"Unknown",
79	"AsmFile",
80	"Statement",
81	"GlobalDirective",
82	"Directive",
83	"DirectiveName",
84	"LocationDirective",
85	"FileDirective",
86	"LocDirective",
87	"Args",
88	"Arg",
89	"QuotedArg",
90	"QuotedText",
91	"LabelContainingDirective",
92	"LabelContainingDirectiveName",
93	"SymbolArgs",
94	"SymbolShift",
95	"SymbolArg",
96	"OpenParen",
97	"CloseParen",
98	"SymbolType",
99	"Dot",
100	"TCMarker",
101	"EscapedChar",
102	"WS",
103	"Comment",
104	"Label",
105	"SymbolName",
106	"LocalSymbol",
107	"LocalLabel",
108	"LocalLabelRef",
109	"Instruction",
110	"InstructionName",
111	"InstructionArg",
112	"GOTLocation",
113	"GOTSymbolOffset",
114	"AVX512Token",
115	"TOCRefHigh",
116	"TOCRefLow",
117	"IndirectionIndicator",
118	"RegisterOrConstant",
119	"ARMConstantTweak",
120	"ARMRegister",
121	"ARMVectorRegister",
122	"MemoryRef",
123	"SymbolRef",
124	"Low12BitsSymbolRef",
125	"ARMBaseIndexScale",
126	"ARMGOTLow12",
127	"ARMPostincrement",
128	"BaseIndexScale",
129	"Operator",
130	"Offset",
131	"Section",
132	"SegmentRegister",
133}
134
135type token32 struct {
136	pegRule
137	begin, end uint32
138}
139
140func (t *token32) String() string {
141	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
142}
143
144type node32 struct {
145	token32
146	up, next *node32
147}
148
149func (node *node32) print(w io.Writer, pretty bool, buffer string) {
150	var print func(node *node32, depth int)
151	print = func(node *node32, depth int) {
152		for node != nil {
153			for c := 0; c < depth; c++ {
154				fmt.Fprintf(w, " ")
155			}
156			rule := rul3s[node.pegRule]
157			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
158			if !pretty {
159				fmt.Fprintf(w, "%v %v\n", rule, quote)
160			} else {
161				fmt.Fprintf(w, "\x1B[36m%v\x1B[m %v\n", rule, quote)
162			}
163			if node.up != nil {
164				print(node.up, depth+1)
165			}
166			node = node.next
167		}
168	}
169	print(node, 0)
170}
171
172func (node *node32) Print(w io.Writer, buffer string) {
173	node.print(w, false, buffer)
174}
175
176func (node *node32) PrettyPrint(w io.Writer, buffer string) {
177	node.print(w, true, buffer)
178}
179
180type tokens32 struct {
181	tree []token32
182}
183
184func (t *tokens32) Trim(length uint32) {
185	t.tree = t.tree[:length]
186}
187
188func (t *tokens32) Print() {
189	for _, token := range t.tree {
190		fmt.Println(token.String())
191	}
192}
193
194func (t *tokens32) AST() *node32 {
195	type element struct {
196		node *node32
197		down *element
198	}
199	tokens := t.Tokens()
200	var stack *element
201	for _, token := range tokens {
202		if token.begin == token.end {
203			continue
204		}
205		node := &node32{token32: token}
206		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
207			stack.node.next = node.up
208			node.up = stack.node
209			stack = stack.down
210		}
211		stack = &element{node: node, down: stack}
212	}
213	if stack != nil {
214		return stack.node
215	}
216	return nil
217}
218
219func (t *tokens32) PrintSyntaxTree(buffer string) {
220	t.AST().Print(os.Stdout, buffer)
221}
222
223func (t *tokens32) WriteSyntaxTree(w io.Writer, buffer string) {
224	t.AST().Print(w, buffer)
225}
226
227func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
228	t.AST().PrettyPrint(os.Stdout, buffer)
229}
230
231func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
232	tree, i := t.tree, int(index)
233	if i >= len(tree) {
234		t.tree = append(tree, token32{pegRule: rule, begin: begin, end: end})
235		return
236	}
237	tree[i] = token32{pegRule: rule, begin: begin, end: end}
238}
239
240func (t *tokens32) Tokens() []token32 {
241	return t.tree
242}
243
244type Asm struct {
245	Buffer string
246	buffer []rune
247	rules  [55]func() bool
248	parse  func(rule ...int) error
249	reset  func()
250	Pretty bool
251	tokens32
252}
253
254func (p *Asm) Parse(rule ...int) error {
255	return p.parse(rule...)
256}
257
258func (p *Asm) Reset() {
259	p.reset()
260}
261
262type textPosition struct {
263	line, symbol int
264}
265
266type textPositionMap map[int]textPosition
267
268func translatePositions(buffer []rune, positions []int) textPositionMap {
269	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
270	sort.Ints(positions)
271
272search:
273	for i, c := range buffer {
274		if c == '\n' {
275			line, symbol = line+1, 0
276		} else {
277			symbol++
278		}
279		if i == positions[j] {
280			translations[positions[j]] = textPosition{line, symbol}
281			for j++; j < length; j++ {
282				if i != positions[j] {
283					continue search
284				}
285			}
286			break search
287		}
288	}
289
290	return translations
291}
292
293type parseError struct {
294	p   *Asm
295	max token32
296}
297
298func (e *parseError) Error() string {
299	tokens, err := []token32{e.max}, "\n"
300	positions, p := make([]int, 2*len(tokens)), 0
301	for _, token := range tokens {
302		positions[p], p = int(token.begin), p+1
303		positions[p], p = int(token.end), p+1
304	}
305	translations := translatePositions(e.p.buffer, positions)
306	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
307	if e.p.Pretty {
308		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
309	}
310	for _, token := range tokens {
311		begin, end := int(token.begin), int(token.end)
312		err += fmt.Sprintf(format,
313			rul3s[token.pegRule],
314			translations[begin].line, translations[begin].symbol,
315			translations[end].line, translations[end].symbol,
316			strconv.Quote(string(e.p.buffer[begin:end])))
317	}
318
319	return err
320}
321
322func (p *Asm) PrintSyntaxTree() {
323	if p.Pretty {
324		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
325	} else {
326		p.tokens32.PrintSyntaxTree(p.Buffer)
327	}
328}
329
330func (p *Asm) WriteSyntaxTree(w io.Writer) {
331	p.tokens32.WriteSyntaxTree(w, p.Buffer)
332}
333
334func (p *Asm) SprintSyntaxTree() string {
335	var bldr strings.Builder
336	p.WriteSyntaxTree(&bldr)
337	return bldr.String()
338}
339
340func Pretty(pretty bool) func(*Asm) error {
341	return func(p *Asm) error {
342		p.Pretty = pretty
343		return nil
344	}
345}
346
347func Size(size int) func(*Asm) error {
348	return func(p *Asm) error {
349		p.tokens32 = tokens32{tree: make([]token32, 0, size)}
350		return nil
351	}
352}
353func (p *Asm) Init(options ...func(*Asm) error) error {
354	var (
355		max                  token32
356		position, tokenIndex uint32
357		buffer               []rune
358	)
359	for _, option := range options {
360		err := option(p)
361		if err != nil {
362			return err
363		}
364	}
365	p.reset = func() {
366		max = token32{}
367		position, tokenIndex = 0, 0
368
369		p.buffer = []rune(p.Buffer)
370		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
371			p.buffer = append(p.buffer, endSymbol)
372		}
373		buffer = p.buffer
374	}
375	p.reset()
376
377	_rules := p.rules
378	tree := p.tokens32
379	p.parse = func(rule ...int) error {
380		r := 1
381		if len(rule) > 0 {
382			r = rule[0]
383		}
384		matches := p.rules[r]()
385		p.tokens32 = tree
386		if matches {
387			p.Trim(tokenIndex)
388			return nil
389		}
390		return &parseError{p, max}
391	}
392
393	add := func(rule pegRule, begin uint32) {
394		tree.Add(rule, begin, position, tokenIndex)
395		tokenIndex++
396		if begin != position && position > max.end {
397			max = token32{rule, begin, position}
398		}
399	}
400
401	matchDot := func() bool {
402		if buffer[position] != endSymbol {
403			position++
404			return true
405		}
406		return false
407	}
408
409	/*matchChar := func(c byte) bool {
410		if buffer[position] == c {
411			position++
412			return true
413		}
414		return false
415	}*/
416
417	/*matchRange := func(lower byte, upper byte) bool {
418		if c := buffer[position]; c >= lower && c <= upper {
419			position++
420			return true
421		}
422		return false
423	}*/
424
425	_rules = [...]func() bool{
426		nil,
427		/* 0 AsmFile <- <(Statement* !.)> */
428		func() bool {
429			position0, tokenIndex0 := position, tokenIndex
430			{
431				position1 := position
432			l2:
433				{
434					position3, tokenIndex3 := position, tokenIndex
435					if !_rules[ruleStatement]() {
436						goto l3
437					}
438					goto l2
439				l3:
440					position, tokenIndex = position3, tokenIndex3
441				}
442				{
443					position4, tokenIndex4 := position, tokenIndex
444					if !matchDot() {
445						goto l4
446					}
447					goto l0
448				l4:
449					position, tokenIndex = position4, tokenIndex4
450				}
451				add(ruleAsmFile, position1)
452			}
453			return true
454		l0:
455			position, tokenIndex = position0, tokenIndex0
456			return false
457		},
458		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
459		func() bool {
460			position5, tokenIndex5 := position, tokenIndex
461			{
462				position6 := position
463				{
464					position7, tokenIndex7 := position, tokenIndex
465					if !_rules[ruleWS]() {
466						goto l7
467					}
468					goto l8
469				l7:
470					position, tokenIndex = position7, tokenIndex7
471				}
472			l8:
473				{
474					position9, tokenIndex9 := position, tokenIndex
475					if !_rules[ruleLabel]() {
476						goto l10
477					}
478					goto l9
479				l10:
480					position, tokenIndex = position9, tokenIndex9
481					{
482						position11, tokenIndex11 := position, tokenIndex
483						if !_rules[ruleGlobalDirective]() {
484							goto l12
485						}
486						goto l11
487					l12:
488						position, tokenIndex = position11, tokenIndex11
489						if !_rules[ruleLocationDirective]() {
490							goto l13
491						}
492						goto l11
493					l13:
494						position, tokenIndex = position11, tokenIndex11
495						if !_rules[ruleLabelContainingDirective]() {
496							goto l14
497						}
498						goto l11
499					l14:
500						position, tokenIndex = position11, tokenIndex11
501						if !_rules[ruleInstruction]() {
502							goto l15
503						}
504						goto l11
505					l15:
506						position, tokenIndex = position11, tokenIndex11
507						if !_rules[ruleDirective]() {
508							goto l16
509						}
510						goto l11
511					l16:
512						position, tokenIndex = position11, tokenIndex11
513						if !_rules[ruleComment]() {
514							goto l17
515						}
516						goto l11
517					l17:
518						position, tokenIndex = position11, tokenIndex11
519					}
520				l11:
521					{
522						position18, tokenIndex18 := position, tokenIndex
523						if !_rules[ruleWS]() {
524							goto l18
525						}
526						goto l19
527					l18:
528						position, tokenIndex = position18, tokenIndex18
529					}
530				l19:
531					{
532						position20, tokenIndex20 := position, tokenIndex
533						{
534							position22, tokenIndex22 := position, tokenIndex
535							if !_rules[ruleComment]() {
536								goto l22
537							}
538							goto l23
539						l22:
540							position, tokenIndex = position22, tokenIndex22
541						}
542					l23:
543						if buffer[position] != rune('\n') {
544							goto l21
545						}
546						position++
547						goto l20
548					l21:
549						position, tokenIndex = position20, tokenIndex20
550						if buffer[position] != rune(';') {
551							goto l5
552						}
553						position++
554					}
555				l20:
556				}
557			l9:
558				add(ruleStatement, position6)
559			}
560			return true
561		l5:
562			position, tokenIndex = position5, tokenIndex5
563			return false
564		},
565		/* 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)> */
566		func() bool {
567			position24, tokenIndex24 := position, tokenIndex
568			{
569				position25 := position
570				{
571					position26, tokenIndex26 := position, tokenIndex
572					if buffer[position] != rune('.') {
573						goto l27
574					}
575					position++
576					{
577						position28, tokenIndex28 := position, tokenIndex
578						if buffer[position] != rune('g') {
579							goto l29
580						}
581						position++
582						goto l28
583					l29:
584						position, tokenIndex = position28, tokenIndex28
585						if buffer[position] != rune('G') {
586							goto l27
587						}
588						position++
589					}
590				l28:
591					{
592						position30, tokenIndex30 := position, tokenIndex
593						if buffer[position] != rune('l') {
594							goto l31
595						}
596						position++
597						goto l30
598					l31:
599						position, tokenIndex = position30, tokenIndex30
600						if buffer[position] != rune('L') {
601							goto l27
602						}
603						position++
604					}
605				l30:
606					{
607						position32, tokenIndex32 := position, tokenIndex
608						if buffer[position] != rune('o') {
609							goto l33
610						}
611						position++
612						goto l32
613					l33:
614						position, tokenIndex = position32, tokenIndex32
615						if buffer[position] != rune('O') {
616							goto l27
617						}
618						position++
619					}
620				l32:
621					{
622						position34, tokenIndex34 := position, tokenIndex
623						if buffer[position] != rune('b') {
624							goto l35
625						}
626						position++
627						goto l34
628					l35:
629						position, tokenIndex = position34, tokenIndex34
630						if buffer[position] != rune('B') {
631							goto l27
632						}
633						position++
634					}
635				l34:
636					{
637						position36, tokenIndex36 := position, tokenIndex
638						if buffer[position] != rune('a') {
639							goto l37
640						}
641						position++
642						goto l36
643					l37:
644						position, tokenIndex = position36, tokenIndex36
645						if buffer[position] != rune('A') {
646							goto l27
647						}
648						position++
649					}
650				l36:
651					{
652						position38, tokenIndex38 := position, tokenIndex
653						if buffer[position] != rune('l') {
654							goto l39
655						}
656						position++
657						goto l38
658					l39:
659						position, tokenIndex = position38, tokenIndex38
660						if buffer[position] != rune('L') {
661							goto l27
662						}
663						position++
664					}
665				l38:
666					goto l26
667				l27:
668					position, tokenIndex = position26, tokenIndex26
669					if buffer[position] != rune('.') {
670						goto l24
671					}
672					position++
673					{
674						position40, tokenIndex40 := position, tokenIndex
675						if buffer[position] != rune('g') {
676							goto l41
677						}
678						position++
679						goto l40
680					l41:
681						position, tokenIndex = position40, tokenIndex40
682						if buffer[position] != rune('G') {
683							goto l24
684						}
685						position++
686					}
687				l40:
688					{
689						position42, tokenIndex42 := position, tokenIndex
690						if buffer[position] != rune('l') {
691							goto l43
692						}
693						position++
694						goto l42
695					l43:
696						position, tokenIndex = position42, tokenIndex42
697						if buffer[position] != rune('L') {
698							goto l24
699						}
700						position++
701					}
702				l42:
703					{
704						position44, tokenIndex44 := position, tokenIndex
705						if buffer[position] != rune('o') {
706							goto l45
707						}
708						position++
709						goto l44
710					l45:
711						position, tokenIndex = position44, tokenIndex44
712						if buffer[position] != rune('O') {
713							goto l24
714						}
715						position++
716					}
717				l44:
718					{
719						position46, tokenIndex46 := position, tokenIndex
720						if buffer[position] != rune('b') {
721							goto l47
722						}
723						position++
724						goto l46
725					l47:
726						position, tokenIndex = position46, tokenIndex46
727						if buffer[position] != rune('B') {
728							goto l24
729						}
730						position++
731					}
732				l46:
733					{
734						position48, tokenIndex48 := position, tokenIndex
735						if buffer[position] != rune('l') {
736							goto l49
737						}
738						position++
739						goto l48
740					l49:
741						position, tokenIndex = position48, tokenIndex48
742						if buffer[position] != rune('L') {
743							goto l24
744						}
745						position++
746					}
747				l48:
748				}
749			l26:
750				if !_rules[ruleWS]() {
751					goto l24
752				}
753				if !_rules[ruleSymbolName]() {
754					goto l24
755				}
756				add(ruleGlobalDirective, position25)
757			}
758			return true
759		l24:
760			position, tokenIndex = position24, tokenIndex24
761			return false
762		},
763		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
764		func() bool {
765			position50, tokenIndex50 := position, tokenIndex
766			{
767				position51 := position
768				if buffer[position] != rune('.') {
769					goto l50
770				}
771				position++
772				if !_rules[ruleDirectiveName]() {
773					goto l50
774				}
775				{
776					position52, tokenIndex52 := position, tokenIndex
777					if !_rules[ruleWS]() {
778						goto l52
779					}
780					if !_rules[ruleArgs]() {
781						goto l52
782					}
783					goto l53
784				l52:
785					position, tokenIndex = position52, tokenIndex52
786				}
787			l53:
788				add(ruleDirective, position51)
789			}
790			return true
791		l50:
792			position, tokenIndex = position50, tokenIndex50
793			return false
794		},
795		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
796		func() bool {
797			position54, tokenIndex54 := position, tokenIndex
798			{
799				position55 := position
800				{
801					position58, tokenIndex58 := position, tokenIndex
802					if c := buffer[position]; c < rune('a') || c > rune('z') {
803						goto l59
804					}
805					position++
806					goto l58
807				l59:
808					position, tokenIndex = position58, tokenIndex58
809					if c := buffer[position]; c < rune('A') || c > rune('Z') {
810						goto l60
811					}
812					position++
813					goto l58
814				l60:
815					position, tokenIndex = position58, tokenIndex58
816					{
817						position62, tokenIndex62 := position, tokenIndex
818						if c := buffer[position]; c < rune('0') || c > rune('9') {
819							goto l63
820						}
821						position++
822						goto l62
823					l63:
824						position, tokenIndex = position62, tokenIndex62
825						if c := buffer[position]; c < rune('0') || c > rune('9') {
826							goto l61
827						}
828						position++
829					}
830				l62:
831					goto l58
832				l61:
833					position, tokenIndex = position58, tokenIndex58
834					if buffer[position] != rune('_') {
835						goto l54
836					}
837					position++
838				}
839			l58:
840			l56:
841				{
842					position57, tokenIndex57 := position, tokenIndex
843					{
844						position64, tokenIndex64 := position, tokenIndex
845						if c := buffer[position]; c < rune('a') || c > rune('z') {
846							goto l65
847						}
848						position++
849						goto l64
850					l65:
851						position, tokenIndex = position64, tokenIndex64
852						if c := buffer[position]; c < rune('A') || c > rune('Z') {
853							goto l66
854						}
855						position++
856						goto l64
857					l66:
858						position, tokenIndex = position64, tokenIndex64
859						{
860							position68, tokenIndex68 := position, tokenIndex
861							if c := buffer[position]; c < rune('0') || c > rune('9') {
862								goto l69
863							}
864							position++
865							goto l68
866						l69:
867							position, tokenIndex = position68, tokenIndex68
868							if c := buffer[position]; c < rune('0') || c > rune('9') {
869								goto l67
870							}
871							position++
872						}
873					l68:
874						goto l64
875					l67:
876						position, tokenIndex = position64, tokenIndex64
877						if buffer[position] != rune('_') {
878							goto l57
879						}
880						position++
881					}
882				l64:
883					goto l56
884				l57:
885					position, tokenIndex = position57, tokenIndex57
886				}
887				add(ruleDirectiveName, position55)
888			}
889			return true
890		l54:
891			position, tokenIndex = position54, tokenIndex54
892			return false
893		},
894		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
895		func() bool {
896			position70, tokenIndex70 := position, tokenIndex
897			{
898				position71 := position
899				{
900					position72, tokenIndex72 := position, tokenIndex
901					if !_rules[ruleFileDirective]() {
902						goto l73
903					}
904					goto l72
905				l73:
906					position, tokenIndex = position72, tokenIndex72
907					if !_rules[ruleLocDirective]() {
908						goto l70
909					}
910				}
911			l72:
912				add(ruleLocationDirective, position71)
913			}
914			return true
915		l70:
916			position, tokenIndex = position70, tokenIndex70
917			return false
918		},
919		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
920		func() bool {
921			position74, tokenIndex74 := position, tokenIndex
922			{
923				position75 := position
924				if buffer[position] != rune('.') {
925					goto l74
926				}
927				position++
928				{
929					position76, tokenIndex76 := position, tokenIndex
930					if buffer[position] != rune('f') {
931						goto l77
932					}
933					position++
934					goto l76
935				l77:
936					position, tokenIndex = position76, tokenIndex76
937					if buffer[position] != rune('F') {
938						goto l74
939					}
940					position++
941				}
942			l76:
943				{
944					position78, tokenIndex78 := position, tokenIndex
945					if buffer[position] != rune('i') {
946						goto l79
947					}
948					position++
949					goto l78
950				l79:
951					position, tokenIndex = position78, tokenIndex78
952					if buffer[position] != rune('I') {
953						goto l74
954					}
955					position++
956				}
957			l78:
958				{
959					position80, tokenIndex80 := position, tokenIndex
960					if buffer[position] != rune('l') {
961						goto l81
962					}
963					position++
964					goto l80
965				l81:
966					position, tokenIndex = position80, tokenIndex80
967					if buffer[position] != rune('L') {
968						goto l74
969					}
970					position++
971				}
972			l80:
973				{
974					position82, tokenIndex82 := position, tokenIndex
975					if buffer[position] != rune('e') {
976						goto l83
977					}
978					position++
979					goto l82
980				l83:
981					position, tokenIndex = position82, tokenIndex82
982					if buffer[position] != rune('E') {
983						goto l74
984					}
985					position++
986				}
987			l82:
988				if !_rules[ruleWS]() {
989					goto l74
990				}
991				{
992					position86, tokenIndex86 := position, tokenIndex
993					{
994						position87, tokenIndex87 := position, tokenIndex
995						if buffer[position] != rune('#') {
996							goto l88
997						}
998						position++
999						goto l87
1000					l88:
1001						position, tokenIndex = position87, tokenIndex87
1002						if buffer[position] != rune('\n') {
1003							goto l86
1004						}
1005						position++
1006					}
1007				l87:
1008					goto l74
1009				l86:
1010					position, tokenIndex = position86, tokenIndex86
1011				}
1012				if !matchDot() {
1013					goto l74
1014				}
1015			l84:
1016				{
1017					position85, tokenIndex85 := position, tokenIndex
1018					{
1019						position89, tokenIndex89 := position, tokenIndex
1020						{
1021							position90, tokenIndex90 := position, tokenIndex
1022							if buffer[position] != rune('#') {
1023								goto l91
1024							}
1025							position++
1026							goto l90
1027						l91:
1028							position, tokenIndex = position90, tokenIndex90
1029							if buffer[position] != rune('\n') {
1030								goto l89
1031							}
1032							position++
1033						}
1034					l90:
1035						goto l85
1036					l89:
1037						position, tokenIndex = position89, tokenIndex89
1038					}
1039					if !matchDot() {
1040						goto l85
1041					}
1042					goto l84
1043				l85:
1044					position, tokenIndex = position85, tokenIndex85
1045				}
1046				add(ruleFileDirective, position75)
1047			}
1048			return true
1049		l74:
1050			position, tokenIndex = position74, tokenIndex74
1051			return false
1052		},
1053		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
1054		func() bool {
1055			position92, tokenIndex92 := position, tokenIndex
1056			{
1057				position93 := position
1058				if buffer[position] != rune('.') {
1059					goto l92
1060				}
1061				position++
1062				{
1063					position94, tokenIndex94 := position, tokenIndex
1064					if buffer[position] != rune('l') {
1065						goto l95
1066					}
1067					position++
1068					goto l94
1069				l95:
1070					position, tokenIndex = position94, tokenIndex94
1071					if buffer[position] != rune('L') {
1072						goto l92
1073					}
1074					position++
1075				}
1076			l94:
1077				{
1078					position96, tokenIndex96 := position, tokenIndex
1079					if buffer[position] != rune('o') {
1080						goto l97
1081					}
1082					position++
1083					goto l96
1084				l97:
1085					position, tokenIndex = position96, tokenIndex96
1086					if buffer[position] != rune('O') {
1087						goto l92
1088					}
1089					position++
1090				}
1091			l96:
1092				{
1093					position98, tokenIndex98 := position, tokenIndex
1094					if buffer[position] != rune('c') {
1095						goto l99
1096					}
1097					position++
1098					goto l98
1099				l99:
1100					position, tokenIndex = position98, tokenIndex98
1101					if buffer[position] != rune('C') {
1102						goto l92
1103					}
1104					position++
1105				}
1106			l98:
1107				if !_rules[ruleWS]() {
1108					goto l92
1109				}
1110				{
1111					position102, tokenIndex102 := position, tokenIndex
1112					{
1113						position103, tokenIndex103 := position, tokenIndex
1114						if buffer[position] != rune('#') {
1115							goto l104
1116						}
1117						position++
1118						goto l103
1119					l104:
1120						position, tokenIndex = position103, tokenIndex103
1121						if buffer[position] != rune('/') {
1122							goto l105
1123						}
1124						position++
1125						goto l103
1126					l105:
1127						position, tokenIndex = position103, tokenIndex103
1128						if buffer[position] != rune('\n') {
1129							goto l102
1130						}
1131						position++
1132					}
1133				l103:
1134					goto l92
1135				l102:
1136					position, tokenIndex = position102, tokenIndex102
1137				}
1138				if !matchDot() {
1139					goto l92
1140				}
1141			l100:
1142				{
1143					position101, tokenIndex101 := position, tokenIndex
1144					{
1145						position106, tokenIndex106 := position, tokenIndex
1146						{
1147							position107, tokenIndex107 := position, tokenIndex
1148							if buffer[position] != rune('#') {
1149								goto l108
1150							}
1151							position++
1152							goto l107
1153						l108:
1154							position, tokenIndex = position107, tokenIndex107
1155							if buffer[position] != rune('/') {
1156								goto l109
1157							}
1158							position++
1159							goto l107
1160						l109:
1161							position, tokenIndex = position107, tokenIndex107
1162							if buffer[position] != rune('\n') {
1163								goto l106
1164							}
1165							position++
1166						}
1167					l107:
1168						goto l101
1169					l106:
1170						position, tokenIndex = position106, tokenIndex106
1171					}
1172					if !matchDot() {
1173						goto l101
1174					}
1175					goto l100
1176				l101:
1177					position, tokenIndex = position101, tokenIndex101
1178				}
1179				add(ruleLocDirective, position93)
1180			}
1181			return true
1182		l92:
1183			position, tokenIndex = position92, tokenIndex92
1184			return false
1185		},
1186		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
1187		func() bool {
1188			position110, tokenIndex110 := position, tokenIndex
1189			{
1190				position111 := position
1191				if !_rules[ruleArg]() {
1192					goto l110
1193				}
1194			l112:
1195				{
1196					position113, tokenIndex113 := position, tokenIndex
1197					{
1198						position114, tokenIndex114 := position, tokenIndex
1199						if !_rules[ruleWS]() {
1200							goto l114
1201						}
1202						goto l115
1203					l114:
1204						position, tokenIndex = position114, tokenIndex114
1205					}
1206				l115:
1207					if buffer[position] != rune(',') {
1208						goto l113
1209					}
1210					position++
1211					{
1212						position116, tokenIndex116 := position, tokenIndex
1213						if !_rules[ruleWS]() {
1214							goto l116
1215						}
1216						goto l117
1217					l116:
1218						position, tokenIndex = position116, tokenIndex116
1219					}
1220				l117:
1221					if !_rules[ruleArg]() {
1222						goto l113
1223					}
1224					goto l112
1225				l113:
1226					position, tokenIndex = position113, tokenIndex113
1227				}
1228				add(ruleArgs, position111)
1229			}
1230			return true
1231		l110:
1232			position, tokenIndex = position110, tokenIndex110
1233			return false
1234		},
1235		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
1236		func() bool {
1237			{
1238				position119 := position
1239				{
1240					position120, tokenIndex120 := position, tokenIndex
1241					if !_rules[ruleQuotedArg]() {
1242						goto l121
1243					}
1244					goto l120
1245				l121:
1246					position, tokenIndex = position120, tokenIndex120
1247				l122:
1248					{
1249						position123, tokenIndex123 := position, tokenIndex
1250						{
1251							position124, tokenIndex124 := position, tokenIndex
1252							if c := buffer[position]; c < rune('0') || c > rune('9') {
1253								goto l125
1254							}
1255							position++
1256							goto l124
1257						l125:
1258							position, tokenIndex = position124, tokenIndex124
1259							if c := buffer[position]; c < rune('0') || c > rune('9') {
1260								goto l126
1261							}
1262							position++
1263							goto l124
1264						l126:
1265							position, tokenIndex = position124, tokenIndex124
1266							{
1267								position128, tokenIndex128 := position, tokenIndex
1268								if c := buffer[position]; c < rune('a') || c > rune('z') {
1269									goto l129
1270								}
1271								position++
1272								goto l128
1273							l129:
1274								position, tokenIndex = position128, tokenIndex128
1275								if c := buffer[position]; c < rune('A') || c > rune('Z') {
1276									goto l127
1277								}
1278								position++
1279							}
1280						l128:
1281							goto l124
1282						l127:
1283							position, tokenIndex = position124, tokenIndex124
1284							if buffer[position] != rune('%') {
1285								goto l130
1286							}
1287							position++
1288							goto l124
1289						l130:
1290							position, tokenIndex = position124, tokenIndex124
1291							if buffer[position] != rune('+') {
1292								goto l131
1293							}
1294							position++
1295							goto l124
1296						l131:
1297							position, tokenIndex = position124, tokenIndex124
1298							if buffer[position] != rune('-') {
1299								goto l132
1300							}
1301							position++
1302							goto l124
1303						l132:
1304							position, tokenIndex = position124, tokenIndex124
1305							if buffer[position] != rune('*') {
1306								goto l133
1307							}
1308							position++
1309							goto l124
1310						l133:
1311							position, tokenIndex = position124, tokenIndex124
1312							if buffer[position] != rune('_') {
1313								goto l134
1314							}
1315							position++
1316							goto l124
1317						l134:
1318							position, tokenIndex = position124, tokenIndex124
1319							if buffer[position] != rune('@') {
1320								goto l135
1321							}
1322							position++
1323							goto l124
1324						l135:
1325							position, tokenIndex = position124, tokenIndex124
1326							if buffer[position] != rune('.') {
1327								goto l123
1328							}
1329							position++
1330						}
1331					l124:
1332						goto l122
1333					l123:
1334						position, tokenIndex = position123, tokenIndex123
1335					}
1336				}
1337			l120:
1338				add(ruleArg, position119)
1339			}
1340			return true
1341		},
1342		/* 10 QuotedArg <- <('"' QuotedText '"')> */
1343		func() bool {
1344			position136, tokenIndex136 := position, tokenIndex
1345			{
1346				position137 := position
1347				if buffer[position] != rune('"') {
1348					goto l136
1349				}
1350				position++
1351				if !_rules[ruleQuotedText]() {
1352					goto l136
1353				}
1354				if buffer[position] != rune('"') {
1355					goto l136
1356				}
1357				position++
1358				add(ruleQuotedArg, position137)
1359			}
1360			return true
1361		l136:
1362			position, tokenIndex = position136, tokenIndex136
1363			return false
1364		},
1365		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
1366		func() bool {
1367			{
1368				position139 := position
1369			l140:
1370				{
1371					position141, tokenIndex141 := position, tokenIndex
1372					{
1373						position142, tokenIndex142 := position, tokenIndex
1374						if !_rules[ruleEscapedChar]() {
1375							goto l143
1376						}
1377						goto l142
1378					l143:
1379						position, tokenIndex = position142, tokenIndex142
1380						{
1381							position144, tokenIndex144 := position, tokenIndex
1382							if buffer[position] != rune('"') {
1383								goto l144
1384							}
1385							position++
1386							goto l141
1387						l144:
1388							position, tokenIndex = position144, tokenIndex144
1389						}
1390						if !matchDot() {
1391							goto l141
1392						}
1393					}
1394				l142:
1395					goto l140
1396				l141:
1397					position, tokenIndex = position141, tokenIndex141
1398				}
1399				add(ruleQuotedText, position139)
1400			}
1401			return true
1402		},
1403		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
1404		func() bool {
1405			position145, tokenIndex145 := position, tokenIndex
1406			{
1407				position146 := position
1408				if !_rules[ruleLabelContainingDirectiveName]() {
1409					goto l145
1410				}
1411				if !_rules[ruleWS]() {
1412					goto l145
1413				}
1414				if !_rules[ruleSymbolArgs]() {
1415					goto l145
1416				}
1417				add(ruleLabelContainingDirective, position146)
1418			}
1419			return true
1420		l145:
1421			position, tokenIndex = position145, tokenIndex145
1422			return false
1423		},
1424		/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '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'))> */
1425		func() bool {
1426			position147, tokenIndex147 := position, tokenIndex
1427			{
1428				position148 := position
1429				{
1430					position149, tokenIndex149 := position, tokenIndex
1431					if buffer[position] != rune('.') {
1432						goto l150
1433					}
1434					position++
1435					{
1436						position151, tokenIndex151 := position, tokenIndex
1437						if buffer[position] != rune('x') {
1438							goto l152
1439						}
1440						position++
1441						goto l151
1442					l152:
1443						position, tokenIndex = position151, tokenIndex151
1444						if buffer[position] != rune('X') {
1445							goto l150
1446						}
1447						position++
1448					}
1449				l151:
1450					{
1451						position153, tokenIndex153 := position, tokenIndex
1452						if buffer[position] != rune('w') {
1453							goto l154
1454						}
1455						position++
1456						goto l153
1457					l154:
1458						position, tokenIndex = position153, tokenIndex153
1459						if buffer[position] != rune('W') {
1460							goto l150
1461						}
1462						position++
1463					}
1464				l153:
1465					{
1466						position155, tokenIndex155 := position, tokenIndex
1467						if buffer[position] != rune('o') {
1468							goto l156
1469						}
1470						position++
1471						goto l155
1472					l156:
1473						position, tokenIndex = position155, tokenIndex155
1474						if buffer[position] != rune('O') {
1475							goto l150
1476						}
1477						position++
1478					}
1479				l155:
1480					{
1481						position157, tokenIndex157 := position, tokenIndex
1482						if buffer[position] != rune('r') {
1483							goto l158
1484						}
1485						position++
1486						goto l157
1487					l158:
1488						position, tokenIndex = position157, tokenIndex157
1489						if buffer[position] != rune('R') {
1490							goto l150
1491						}
1492						position++
1493					}
1494				l157:
1495					{
1496						position159, tokenIndex159 := position, tokenIndex
1497						if buffer[position] != rune('d') {
1498							goto l160
1499						}
1500						position++
1501						goto l159
1502					l160:
1503						position, tokenIndex = position159, tokenIndex159
1504						if buffer[position] != rune('D') {
1505							goto l150
1506						}
1507						position++
1508					}
1509				l159:
1510					goto l149
1511				l150:
1512					position, tokenIndex = position149, tokenIndex149
1513					if buffer[position] != rune('.') {
1514						goto l161
1515					}
1516					position++
1517					{
1518						position162, tokenIndex162 := position, tokenIndex
1519						if buffer[position] != rune('w') {
1520							goto l163
1521						}
1522						position++
1523						goto l162
1524					l163:
1525						position, tokenIndex = position162, tokenIndex162
1526						if buffer[position] != rune('W') {
1527							goto l161
1528						}
1529						position++
1530					}
1531				l162:
1532					{
1533						position164, tokenIndex164 := position, tokenIndex
1534						if buffer[position] != rune('o') {
1535							goto l165
1536						}
1537						position++
1538						goto l164
1539					l165:
1540						position, tokenIndex = position164, tokenIndex164
1541						if buffer[position] != rune('O') {
1542							goto l161
1543						}
1544						position++
1545					}
1546				l164:
1547					{
1548						position166, tokenIndex166 := position, tokenIndex
1549						if buffer[position] != rune('r') {
1550							goto l167
1551						}
1552						position++
1553						goto l166
1554					l167:
1555						position, tokenIndex = position166, tokenIndex166
1556						if buffer[position] != rune('R') {
1557							goto l161
1558						}
1559						position++
1560					}
1561				l166:
1562					{
1563						position168, tokenIndex168 := position, tokenIndex
1564						if buffer[position] != rune('d') {
1565							goto l169
1566						}
1567						position++
1568						goto l168
1569					l169:
1570						position, tokenIndex = position168, tokenIndex168
1571						if buffer[position] != rune('D') {
1572							goto l161
1573						}
1574						position++
1575					}
1576				l168:
1577					goto l149
1578				l161:
1579					position, tokenIndex = position149, tokenIndex149
1580					if buffer[position] != rune('.') {
1581						goto l170
1582					}
1583					position++
1584					{
1585						position171, tokenIndex171 := position, tokenIndex
1586						if buffer[position] != rune('l') {
1587							goto l172
1588						}
1589						position++
1590						goto l171
1591					l172:
1592						position, tokenIndex = position171, tokenIndex171
1593						if buffer[position] != rune('L') {
1594							goto l170
1595						}
1596						position++
1597					}
1598				l171:
1599					{
1600						position173, tokenIndex173 := position, tokenIndex
1601						if buffer[position] != rune('o') {
1602							goto l174
1603						}
1604						position++
1605						goto l173
1606					l174:
1607						position, tokenIndex = position173, tokenIndex173
1608						if buffer[position] != rune('O') {
1609							goto l170
1610						}
1611						position++
1612					}
1613				l173:
1614					{
1615						position175, tokenIndex175 := position, tokenIndex
1616						if buffer[position] != rune('n') {
1617							goto l176
1618						}
1619						position++
1620						goto l175
1621					l176:
1622						position, tokenIndex = position175, tokenIndex175
1623						if buffer[position] != rune('N') {
1624							goto l170
1625						}
1626						position++
1627					}
1628				l175:
1629					{
1630						position177, tokenIndex177 := position, tokenIndex
1631						if buffer[position] != rune('g') {
1632							goto l178
1633						}
1634						position++
1635						goto l177
1636					l178:
1637						position, tokenIndex = position177, tokenIndex177
1638						if buffer[position] != rune('G') {
1639							goto l170
1640						}
1641						position++
1642					}
1643				l177:
1644					goto l149
1645				l170:
1646					position, tokenIndex = position149, tokenIndex149
1647					if buffer[position] != rune('.') {
1648						goto l179
1649					}
1650					position++
1651					{
1652						position180, tokenIndex180 := position, tokenIndex
1653						if buffer[position] != rune('s') {
1654							goto l181
1655						}
1656						position++
1657						goto l180
1658					l181:
1659						position, tokenIndex = position180, tokenIndex180
1660						if buffer[position] != rune('S') {
1661							goto l179
1662						}
1663						position++
1664					}
1665				l180:
1666					{
1667						position182, tokenIndex182 := position, tokenIndex
1668						if buffer[position] != rune('e') {
1669							goto l183
1670						}
1671						position++
1672						goto l182
1673					l183:
1674						position, tokenIndex = position182, tokenIndex182
1675						if buffer[position] != rune('E') {
1676							goto l179
1677						}
1678						position++
1679					}
1680				l182:
1681					{
1682						position184, tokenIndex184 := position, tokenIndex
1683						if buffer[position] != rune('t') {
1684							goto l185
1685						}
1686						position++
1687						goto l184
1688					l185:
1689						position, tokenIndex = position184, tokenIndex184
1690						if buffer[position] != rune('T') {
1691							goto l179
1692						}
1693						position++
1694					}
1695				l184:
1696					goto l149
1697				l179:
1698					position, tokenIndex = position149, tokenIndex149
1699					if buffer[position] != rune('.') {
1700						goto l186
1701					}
1702					position++
1703					{
1704						position187, tokenIndex187 := position, tokenIndex
1705						if buffer[position] != rune('b') {
1706							goto l188
1707						}
1708						position++
1709						goto l187
1710					l188:
1711						position, tokenIndex = position187, tokenIndex187
1712						if buffer[position] != rune('B') {
1713							goto l186
1714						}
1715						position++
1716					}
1717				l187:
1718					{
1719						position189, tokenIndex189 := position, tokenIndex
1720						if buffer[position] != rune('y') {
1721							goto l190
1722						}
1723						position++
1724						goto l189
1725					l190:
1726						position, tokenIndex = position189, tokenIndex189
1727						if buffer[position] != rune('Y') {
1728							goto l186
1729						}
1730						position++
1731					}
1732				l189:
1733					{
1734						position191, tokenIndex191 := position, tokenIndex
1735						if buffer[position] != rune('t') {
1736							goto l192
1737						}
1738						position++
1739						goto l191
1740					l192:
1741						position, tokenIndex = position191, tokenIndex191
1742						if buffer[position] != rune('T') {
1743							goto l186
1744						}
1745						position++
1746					}
1747				l191:
1748					{
1749						position193, tokenIndex193 := position, tokenIndex
1750						if buffer[position] != rune('e') {
1751							goto l194
1752						}
1753						position++
1754						goto l193
1755					l194:
1756						position, tokenIndex = position193, tokenIndex193
1757						if buffer[position] != rune('E') {
1758							goto l186
1759						}
1760						position++
1761					}
1762				l193:
1763					goto l149
1764				l186:
1765					position, tokenIndex = position149, tokenIndex149
1766					if buffer[position] != rune('.') {
1767						goto l195
1768					}
1769					position++
1770					if buffer[position] != rune('8') {
1771						goto l195
1772					}
1773					position++
1774					{
1775						position196, tokenIndex196 := position, tokenIndex
1776						if buffer[position] != rune('b') {
1777							goto l197
1778						}
1779						position++
1780						goto l196
1781					l197:
1782						position, tokenIndex = position196, tokenIndex196
1783						if buffer[position] != rune('B') {
1784							goto l195
1785						}
1786						position++
1787					}
1788				l196:
1789					{
1790						position198, tokenIndex198 := position, tokenIndex
1791						if buffer[position] != rune('y') {
1792							goto l199
1793						}
1794						position++
1795						goto l198
1796					l199:
1797						position, tokenIndex = position198, tokenIndex198
1798						if buffer[position] != rune('Y') {
1799							goto l195
1800						}
1801						position++
1802					}
1803				l198:
1804					{
1805						position200, tokenIndex200 := position, tokenIndex
1806						if buffer[position] != rune('t') {
1807							goto l201
1808						}
1809						position++
1810						goto l200
1811					l201:
1812						position, tokenIndex = position200, tokenIndex200
1813						if buffer[position] != rune('T') {
1814							goto l195
1815						}
1816						position++
1817					}
1818				l200:
1819					{
1820						position202, tokenIndex202 := position, tokenIndex
1821						if buffer[position] != rune('e') {
1822							goto l203
1823						}
1824						position++
1825						goto l202
1826					l203:
1827						position, tokenIndex = position202, tokenIndex202
1828						if buffer[position] != rune('E') {
1829							goto l195
1830						}
1831						position++
1832					}
1833				l202:
1834					goto l149
1835				l195:
1836					position, tokenIndex = position149, tokenIndex149
1837					if buffer[position] != rune('.') {
1838						goto l204
1839					}
1840					position++
1841					if buffer[position] != rune('4') {
1842						goto l204
1843					}
1844					position++
1845					{
1846						position205, tokenIndex205 := position, tokenIndex
1847						if buffer[position] != rune('b') {
1848							goto l206
1849						}
1850						position++
1851						goto l205
1852					l206:
1853						position, tokenIndex = position205, tokenIndex205
1854						if buffer[position] != rune('B') {
1855							goto l204
1856						}
1857						position++
1858					}
1859				l205:
1860					{
1861						position207, tokenIndex207 := position, tokenIndex
1862						if buffer[position] != rune('y') {
1863							goto l208
1864						}
1865						position++
1866						goto l207
1867					l208:
1868						position, tokenIndex = position207, tokenIndex207
1869						if buffer[position] != rune('Y') {
1870							goto l204
1871						}
1872						position++
1873					}
1874				l207:
1875					{
1876						position209, tokenIndex209 := position, tokenIndex
1877						if buffer[position] != rune('t') {
1878							goto l210
1879						}
1880						position++
1881						goto l209
1882					l210:
1883						position, tokenIndex = position209, tokenIndex209
1884						if buffer[position] != rune('T') {
1885							goto l204
1886						}
1887						position++
1888					}
1889				l209:
1890					{
1891						position211, tokenIndex211 := position, tokenIndex
1892						if buffer[position] != rune('e') {
1893							goto l212
1894						}
1895						position++
1896						goto l211
1897					l212:
1898						position, tokenIndex = position211, tokenIndex211
1899						if buffer[position] != rune('E') {
1900							goto l204
1901						}
1902						position++
1903					}
1904				l211:
1905					goto l149
1906				l204:
1907					position, tokenIndex = position149, tokenIndex149
1908					if buffer[position] != rune('.') {
1909						goto l213
1910					}
1911					position++
1912					{
1913						position214, tokenIndex214 := position, tokenIndex
1914						if buffer[position] != rune('q') {
1915							goto l215
1916						}
1917						position++
1918						goto l214
1919					l215:
1920						position, tokenIndex = position214, tokenIndex214
1921						if buffer[position] != rune('Q') {
1922							goto l213
1923						}
1924						position++
1925					}
1926				l214:
1927					{
1928						position216, tokenIndex216 := position, tokenIndex
1929						if buffer[position] != rune('u') {
1930							goto l217
1931						}
1932						position++
1933						goto l216
1934					l217:
1935						position, tokenIndex = position216, tokenIndex216
1936						if buffer[position] != rune('U') {
1937							goto l213
1938						}
1939						position++
1940					}
1941				l216:
1942					{
1943						position218, tokenIndex218 := position, tokenIndex
1944						if buffer[position] != rune('a') {
1945							goto l219
1946						}
1947						position++
1948						goto l218
1949					l219:
1950						position, tokenIndex = position218, tokenIndex218
1951						if buffer[position] != rune('A') {
1952							goto l213
1953						}
1954						position++
1955					}
1956				l218:
1957					{
1958						position220, tokenIndex220 := position, tokenIndex
1959						if buffer[position] != rune('d') {
1960							goto l221
1961						}
1962						position++
1963						goto l220
1964					l221:
1965						position, tokenIndex = position220, tokenIndex220
1966						if buffer[position] != rune('D') {
1967							goto l213
1968						}
1969						position++
1970					}
1971				l220:
1972					goto l149
1973				l213:
1974					position, tokenIndex = position149, tokenIndex149
1975					if buffer[position] != rune('.') {
1976						goto l222
1977					}
1978					position++
1979					{
1980						position223, tokenIndex223 := position, tokenIndex
1981						if buffer[position] != rune('t') {
1982							goto l224
1983						}
1984						position++
1985						goto l223
1986					l224:
1987						position, tokenIndex = position223, tokenIndex223
1988						if buffer[position] != rune('T') {
1989							goto l222
1990						}
1991						position++
1992					}
1993				l223:
1994					{
1995						position225, tokenIndex225 := position, tokenIndex
1996						if buffer[position] != rune('c') {
1997							goto l226
1998						}
1999						position++
2000						goto l225
2001					l226:
2002						position, tokenIndex = position225, tokenIndex225
2003						if buffer[position] != rune('C') {
2004							goto l222
2005						}
2006						position++
2007					}
2008				l225:
2009					goto l149
2010				l222:
2011					position, tokenIndex = position149, tokenIndex149
2012					if buffer[position] != rune('.') {
2013						goto l227
2014					}
2015					position++
2016					{
2017						position228, tokenIndex228 := position, tokenIndex
2018						if buffer[position] != rune('l') {
2019							goto l229
2020						}
2021						position++
2022						goto l228
2023					l229:
2024						position, tokenIndex = position228, tokenIndex228
2025						if buffer[position] != rune('L') {
2026							goto l227
2027						}
2028						position++
2029					}
2030				l228:
2031					{
2032						position230, tokenIndex230 := position, tokenIndex
2033						if buffer[position] != rune('o') {
2034							goto l231
2035						}
2036						position++
2037						goto l230
2038					l231:
2039						position, tokenIndex = position230, tokenIndex230
2040						if buffer[position] != rune('O') {
2041							goto l227
2042						}
2043						position++
2044					}
2045				l230:
2046					{
2047						position232, tokenIndex232 := position, tokenIndex
2048						if buffer[position] != rune('c') {
2049							goto l233
2050						}
2051						position++
2052						goto l232
2053					l233:
2054						position, tokenIndex = position232, tokenIndex232
2055						if buffer[position] != rune('C') {
2056							goto l227
2057						}
2058						position++
2059					}
2060				l232:
2061					{
2062						position234, tokenIndex234 := position, tokenIndex
2063						if buffer[position] != rune('a') {
2064							goto l235
2065						}
2066						position++
2067						goto l234
2068					l235:
2069						position, tokenIndex = position234, tokenIndex234
2070						if buffer[position] != rune('A') {
2071							goto l227
2072						}
2073						position++
2074					}
2075				l234:
2076					{
2077						position236, tokenIndex236 := position, tokenIndex
2078						if buffer[position] != rune('l') {
2079							goto l237
2080						}
2081						position++
2082						goto l236
2083					l237:
2084						position, tokenIndex = position236, tokenIndex236
2085						if buffer[position] != rune('L') {
2086							goto l227
2087						}
2088						position++
2089					}
2090				l236:
2091					{
2092						position238, tokenIndex238 := position, tokenIndex
2093						if buffer[position] != rune('e') {
2094							goto l239
2095						}
2096						position++
2097						goto l238
2098					l239:
2099						position, tokenIndex = position238, tokenIndex238
2100						if buffer[position] != rune('E') {
2101							goto l227
2102						}
2103						position++
2104					}
2105				l238:
2106					{
2107						position240, tokenIndex240 := position, tokenIndex
2108						if buffer[position] != rune('n') {
2109							goto l241
2110						}
2111						position++
2112						goto l240
2113					l241:
2114						position, tokenIndex = position240, tokenIndex240
2115						if buffer[position] != rune('N') {
2116							goto l227
2117						}
2118						position++
2119					}
2120				l240:
2121					{
2122						position242, tokenIndex242 := position, tokenIndex
2123						if buffer[position] != rune('t') {
2124							goto l243
2125						}
2126						position++
2127						goto l242
2128					l243:
2129						position, tokenIndex = position242, tokenIndex242
2130						if buffer[position] != rune('T') {
2131							goto l227
2132						}
2133						position++
2134					}
2135				l242:
2136					{
2137						position244, tokenIndex244 := position, tokenIndex
2138						if buffer[position] != rune('r') {
2139							goto l245
2140						}
2141						position++
2142						goto l244
2143					l245:
2144						position, tokenIndex = position244, tokenIndex244
2145						if buffer[position] != rune('R') {
2146							goto l227
2147						}
2148						position++
2149					}
2150				l244:
2151					{
2152						position246, tokenIndex246 := position, tokenIndex
2153						if buffer[position] != rune('y') {
2154							goto l247
2155						}
2156						position++
2157						goto l246
2158					l247:
2159						position, tokenIndex = position246, tokenIndex246
2160						if buffer[position] != rune('Y') {
2161							goto l227
2162						}
2163						position++
2164					}
2165				l246:
2166					goto l149
2167				l227:
2168					position, tokenIndex = position149, tokenIndex149
2169					if buffer[position] != rune('.') {
2170						goto l248
2171					}
2172					position++
2173					{
2174						position249, tokenIndex249 := position, tokenIndex
2175						if buffer[position] != rune('s') {
2176							goto l250
2177						}
2178						position++
2179						goto l249
2180					l250:
2181						position, tokenIndex = position249, tokenIndex249
2182						if buffer[position] != rune('S') {
2183							goto l248
2184						}
2185						position++
2186					}
2187				l249:
2188					{
2189						position251, tokenIndex251 := position, tokenIndex
2190						if buffer[position] != rune('i') {
2191							goto l252
2192						}
2193						position++
2194						goto l251
2195					l252:
2196						position, tokenIndex = position251, tokenIndex251
2197						if buffer[position] != rune('I') {
2198							goto l248
2199						}
2200						position++
2201					}
2202				l251:
2203					{
2204						position253, tokenIndex253 := position, tokenIndex
2205						if buffer[position] != rune('z') {
2206							goto l254
2207						}
2208						position++
2209						goto l253
2210					l254:
2211						position, tokenIndex = position253, tokenIndex253
2212						if buffer[position] != rune('Z') {
2213							goto l248
2214						}
2215						position++
2216					}
2217				l253:
2218					{
2219						position255, tokenIndex255 := position, tokenIndex
2220						if buffer[position] != rune('e') {
2221							goto l256
2222						}
2223						position++
2224						goto l255
2225					l256:
2226						position, tokenIndex = position255, tokenIndex255
2227						if buffer[position] != rune('E') {
2228							goto l248
2229						}
2230						position++
2231					}
2232				l255:
2233					goto l149
2234				l248:
2235					position, tokenIndex = position149, tokenIndex149
2236					if buffer[position] != rune('.') {
2237						goto l257
2238					}
2239					position++
2240					{
2241						position258, tokenIndex258 := position, tokenIndex
2242						if buffer[position] != rune('t') {
2243							goto l259
2244						}
2245						position++
2246						goto l258
2247					l259:
2248						position, tokenIndex = position258, tokenIndex258
2249						if buffer[position] != rune('T') {
2250							goto l257
2251						}
2252						position++
2253					}
2254				l258:
2255					{
2256						position260, tokenIndex260 := position, tokenIndex
2257						if buffer[position] != rune('y') {
2258							goto l261
2259						}
2260						position++
2261						goto l260
2262					l261:
2263						position, tokenIndex = position260, tokenIndex260
2264						if buffer[position] != rune('Y') {
2265							goto l257
2266						}
2267						position++
2268					}
2269				l260:
2270					{
2271						position262, tokenIndex262 := position, tokenIndex
2272						if buffer[position] != rune('p') {
2273							goto l263
2274						}
2275						position++
2276						goto l262
2277					l263:
2278						position, tokenIndex = position262, tokenIndex262
2279						if buffer[position] != rune('P') {
2280							goto l257
2281						}
2282						position++
2283					}
2284				l262:
2285					{
2286						position264, tokenIndex264 := position, tokenIndex
2287						if buffer[position] != rune('e') {
2288							goto l265
2289						}
2290						position++
2291						goto l264
2292					l265:
2293						position, tokenIndex = position264, tokenIndex264
2294						if buffer[position] != rune('E') {
2295							goto l257
2296						}
2297						position++
2298					}
2299				l264:
2300					goto l149
2301				l257:
2302					position, tokenIndex = position149, tokenIndex149
2303					if buffer[position] != rune('.') {
2304						goto l266
2305					}
2306					position++
2307					{
2308						position267, tokenIndex267 := position, tokenIndex
2309						if buffer[position] != rune('u') {
2310							goto l268
2311						}
2312						position++
2313						goto l267
2314					l268:
2315						position, tokenIndex = position267, tokenIndex267
2316						if buffer[position] != rune('U') {
2317							goto l266
2318						}
2319						position++
2320					}
2321				l267:
2322					{
2323						position269, tokenIndex269 := position, tokenIndex
2324						if buffer[position] != rune('l') {
2325							goto l270
2326						}
2327						position++
2328						goto l269
2329					l270:
2330						position, tokenIndex = position269, tokenIndex269
2331						if buffer[position] != rune('L') {
2332							goto l266
2333						}
2334						position++
2335					}
2336				l269:
2337					{
2338						position271, tokenIndex271 := position, tokenIndex
2339						if buffer[position] != rune('e') {
2340							goto l272
2341						}
2342						position++
2343						goto l271
2344					l272:
2345						position, tokenIndex = position271, tokenIndex271
2346						if buffer[position] != rune('E') {
2347							goto l266
2348						}
2349						position++
2350					}
2351				l271:
2352					{
2353						position273, tokenIndex273 := position, tokenIndex
2354						if buffer[position] != rune('b') {
2355							goto l274
2356						}
2357						position++
2358						goto l273
2359					l274:
2360						position, tokenIndex = position273, tokenIndex273
2361						if buffer[position] != rune('B') {
2362							goto l266
2363						}
2364						position++
2365					}
2366				l273:
2367					if buffer[position] != rune('1') {
2368						goto l266
2369					}
2370					position++
2371					if buffer[position] != rune('2') {
2372						goto l266
2373					}
2374					position++
2375					if buffer[position] != rune('8') {
2376						goto l266
2377					}
2378					position++
2379					goto l149
2380				l266:
2381					position, tokenIndex = position149, tokenIndex149
2382					if buffer[position] != rune('.') {
2383						goto l147
2384					}
2385					position++
2386					{
2387						position275, tokenIndex275 := position, tokenIndex
2388						if buffer[position] != rune('s') {
2389							goto l276
2390						}
2391						position++
2392						goto l275
2393					l276:
2394						position, tokenIndex = position275, tokenIndex275
2395						if buffer[position] != rune('S') {
2396							goto l147
2397						}
2398						position++
2399					}
2400				l275:
2401					{
2402						position277, tokenIndex277 := position, tokenIndex
2403						if buffer[position] != rune('l') {
2404							goto l278
2405						}
2406						position++
2407						goto l277
2408					l278:
2409						position, tokenIndex = position277, tokenIndex277
2410						if buffer[position] != rune('L') {
2411							goto l147
2412						}
2413						position++
2414					}
2415				l277:
2416					{
2417						position279, tokenIndex279 := position, tokenIndex
2418						if buffer[position] != rune('e') {
2419							goto l280
2420						}
2421						position++
2422						goto l279
2423					l280:
2424						position, tokenIndex = position279, tokenIndex279
2425						if buffer[position] != rune('E') {
2426							goto l147
2427						}
2428						position++
2429					}
2430				l279:
2431					{
2432						position281, tokenIndex281 := position, tokenIndex
2433						if buffer[position] != rune('b') {
2434							goto l282
2435						}
2436						position++
2437						goto l281
2438					l282:
2439						position, tokenIndex = position281, tokenIndex281
2440						if buffer[position] != rune('B') {
2441							goto l147
2442						}
2443						position++
2444					}
2445				l281:
2446					if buffer[position] != rune('1') {
2447						goto l147
2448					}
2449					position++
2450					if buffer[position] != rune('2') {
2451						goto l147
2452					}
2453					position++
2454					if buffer[position] != rune('8') {
2455						goto l147
2456					}
2457					position++
2458				}
2459			l149:
2460				add(ruleLabelContainingDirectiveName, position148)
2461			}
2462			return true
2463		l147:
2464			position, tokenIndex = position147, tokenIndex147
2465			return false
2466		},
2467		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
2468		func() bool {
2469			position283, tokenIndex283 := position, tokenIndex
2470			{
2471				position284 := position
2472				if !_rules[ruleSymbolArg]() {
2473					goto l283
2474				}
2475			l285:
2476				{
2477					position286, tokenIndex286 := position, tokenIndex
2478					{
2479						position287, tokenIndex287 := position, tokenIndex
2480						if !_rules[ruleWS]() {
2481							goto l287
2482						}
2483						goto l288
2484					l287:
2485						position, tokenIndex = position287, tokenIndex287
2486					}
2487				l288:
2488					if buffer[position] != rune(',') {
2489						goto l286
2490					}
2491					position++
2492					{
2493						position289, tokenIndex289 := position, tokenIndex
2494						if !_rules[ruleWS]() {
2495							goto l289
2496						}
2497						goto l290
2498					l289:
2499						position, tokenIndex = position289, tokenIndex289
2500					}
2501				l290:
2502					if !_rules[ruleSymbolArg]() {
2503						goto l286
2504					}
2505					goto l285
2506				l286:
2507					position, tokenIndex = position286, tokenIndex286
2508				}
2509				add(ruleSymbolArgs, position284)
2510			}
2511			return true
2512		l283:
2513			position, tokenIndex = position283, tokenIndex283
2514			return false
2515		},
2516		/* 15 SymbolShift <- <((('<' '<') / ('>' '>')) WS? [0-9]+)> */
2517		func() bool {
2518			position291, tokenIndex291 := position, tokenIndex
2519			{
2520				position292 := position
2521				{
2522					position293, tokenIndex293 := position, tokenIndex
2523					if buffer[position] != rune('<') {
2524						goto l294
2525					}
2526					position++
2527					if buffer[position] != rune('<') {
2528						goto l294
2529					}
2530					position++
2531					goto l293
2532				l294:
2533					position, tokenIndex = position293, tokenIndex293
2534					if buffer[position] != rune('>') {
2535						goto l291
2536					}
2537					position++
2538					if buffer[position] != rune('>') {
2539						goto l291
2540					}
2541					position++
2542				}
2543			l293:
2544				{
2545					position295, tokenIndex295 := position, tokenIndex
2546					if !_rules[ruleWS]() {
2547						goto l295
2548					}
2549					goto l296
2550				l295:
2551					position, tokenIndex = position295, tokenIndex295
2552				}
2553			l296:
2554				if c := buffer[position]; c < rune('0') || c > rune('9') {
2555					goto l291
2556				}
2557				position++
2558			l297:
2559				{
2560					position298, tokenIndex298 := position, tokenIndex
2561					if c := buffer[position]; c < rune('0') || c > rune('9') {
2562						goto l298
2563					}
2564					position++
2565					goto l297
2566				l298:
2567					position, tokenIndex = position298, tokenIndex298
2568				}
2569				add(ruleSymbolShift, position292)
2570			}
2571			return true
2572		l291:
2573			position, tokenIndex = position291, tokenIndex291
2574			return false
2575		},
2576		/* 16 SymbolArg <- <((OpenParen WS?)? (Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) (WS? Operator WS? (Offset / LocalSymbol / SymbolName))*) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?)) (WS? CloseParen)? (WS? SymbolShift)?)> */
2577		func() bool {
2578			position299, tokenIndex299 := position, tokenIndex
2579			{
2580				position300 := position
2581				{
2582					position301, tokenIndex301 := position, tokenIndex
2583					if !_rules[ruleOpenParen]() {
2584						goto l301
2585					}
2586					{
2587						position303, tokenIndex303 := position, tokenIndex
2588						if !_rules[ruleWS]() {
2589							goto l303
2590						}
2591						goto l304
2592					l303:
2593						position, tokenIndex = position303, tokenIndex303
2594					}
2595				l304:
2596					goto l302
2597				l301:
2598					position, tokenIndex = position301, tokenIndex301
2599				}
2600			l302:
2601				{
2602					position305, tokenIndex305 := position, tokenIndex
2603					if !_rules[ruleOffset]() {
2604						goto l306
2605					}
2606					goto l305
2607				l306:
2608					position, tokenIndex = position305, tokenIndex305
2609					if !_rules[ruleSymbolType]() {
2610						goto l307
2611					}
2612					goto l305
2613				l307:
2614					position, tokenIndex = position305, tokenIndex305
2615					{
2616						position309, tokenIndex309 := position, tokenIndex
2617						if !_rules[ruleOffset]() {
2618							goto l310
2619						}
2620						goto l309
2621					l310:
2622						position, tokenIndex = position309, tokenIndex309
2623						if !_rules[ruleLocalSymbol]() {
2624							goto l311
2625						}
2626						goto l309
2627					l311:
2628						position, tokenIndex = position309, tokenIndex309
2629						if !_rules[ruleSymbolName]() {
2630							goto l312
2631						}
2632						goto l309
2633					l312:
2634						position, tokenIndex = position309, tokenIndex309
2635						if !_rules[ruleDot]() {
2636							goto l308
2637						}
2638					}
2639				l309:
2640				l313:
2641					{
2642						position314, tokenIndex314 := position, tokenIndex
2643						{
2644							position315, tokenIndex315 := position, tokenIndex
2645							if !_rules[ruleWS]() {
2646								goto l315
2647							}
2648							goto l316
2649						l315:
2650							position, tokenIndex = position315, tokenIndex315
2651						}
2652					l316:
2653						if !_rules[ruleOperator]() {
2654							goto l314
2655						}
2656						{
2657							position317, tokenIndex317 := position, tokenIndex
2658							if !_rules[ruleWS]() {
2659								goto l317
2660							}
2661							goto l318
2662						l317:
2663							position, tokenIndex = position317, tokenIndex317
2664						}
2665					l318:
2666						{
2667							position319, tokenIndex319 := position, tokenIndex
2668							if !_rules[ruleOffset]() {
2669								goto l320
2670							}
2671							goto l319
2672						l320:
2673							position, tokenIndex = position319, tokenIndex319
2674							if !_rules[ruleLocalSymbol]() {
2675								goto l321
2676							}
2677							goto l319
2678						l321:
2679							position, tokenIndex = position319, tokenIndex319
2680							if !_rules[ruleSymbolName]() {
2681								goto l314
2682							}
2683						}
2684					l319:
2685						goto l313
2686					l314:
2687						position, tokenIndex = position314, tokenIndex314
2688					}
2689					goto l305
2690				l308:
2691					position, tokenIndex = position305, tokenIndex305
2692					if !_rules[ruleLocalSymbol]() {
2693						goto l322
2694					}
2695					{
2696						position323, tokenIndex323 := position, tokenIndex
2697						if !_rules[ruleTCMarker]() {
2698							goto l323
2699						}
2700						goto l324
2701					l323:
2702						position, tokenIndex = position323, tokenIndex323
2703					}
2704				l324:
2705					goto l305
2706				l322:
2707					position, tokenIndex = position305, tokenIndex305
2708					if !_rules[ruleSymbolName]() {
2709						goto l325
2710					}
2711					if !_rules[ruleOffset]() {
2712						goto l325
2713					}
2714					goto l305
2715				l325:
2716					position, tokenIndex = position305, tokenIndex305
2717					if !_rules[ruleSymbolName]() {
2718						goto l299
2719					}
2720					{
2721						position326, tokenIndex326 := position, tokenIndex
2722						if !_rules[ruleTCMarker]() {
2723							goto l326
2724						}
2725						goto l327
2726					l326:
2727						position, tokenIndex = position326, tokenIndex326
2728					}
2729				l327:
2730				}
2731			l305:
2732				{
2733					position328, tokenIndex328 := position, tokenIndex
2734					{
2735						position330, tokenIndex330 := position, tokenIndex
2736						if !_rules[ruleWS]() {
2737							goto l330
2738						}
2739						goto l331
2740					l330:
2741						position, tokenIndex = position330, tokenIndex330
2742					}
2743				l331:
2744					if !_rules[ruleCloseParen]() {
2745						goto l328
2746					}
2747					goto l329
2748				l328:
2749					position, tokenIndex = position328, tokenIndex328
2750				}
2751			l329:
2752				{
2753					position332, tokenIndex332 := position, tokenIndex
2754					{
2755						position334, tokenIndex334 := position, tokenIndex
2756						if !_rules[ruleWS]() {
2757							goto l334
2758						}
2759						goto l335
2760					l334:
2761						position, tokenIndex = position334, tokenIndex334
2762					}
2763				l335:
2764					if !_rules[ruleSymbolShift]() {
2765						goto l332
2766					}
2767					goto l333
2768				l332:
2769					position, tokenIndex = position332, tokenIndex332
2770				}
2771			l333:
2772				add(ruleSymbolArg, position300)
2773			}
2774			return true
2775		l299:
2776			position, tokenIndex = position299, tokenIndex299
2777			return false
2778		},
2779		/* 17 OpenParen <- <'('> */
2780		func() bool {
2781			position336, tokenIndex336 := position, tokenIndex
2782			{
2783				position337 := position
2784				if buffer[position] != rune('(') {
2785					goto l336
2786				}
2787				position++
2788				add(ruleOpenParen, position337)
2789			}
2790			return true
2791		l336:
2792			position, tokenIndex = position336, tokenIndex336
2793			return false
2794		},
2795		/* 18 CloseParen <- <')'> */
2796		func() bool {
2797			position338, tokenIndex338 := position, tokenIndex
2798			{
2799				position339 := position
2800				if buffer[position] != rune(')') {
2801					goto l338
2802				}
2803				position++
2804				add(ruleCloseParen, position339)
2805			}
2806			return true
2807		l338:
2808			position, tokenIndex = position338, tokenIndex338
2809			return false
2810		},
2811		/* 19 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
2812		func() bool {
2813			position340, tokenIndex340 := position, tokenIndex
2814			{
2815				position341 := position
2816				{
2817					position342, tokenIndex342 := position, tokenIndex
2818					if buffer[position] != rune('@') {
2819						goto l343
2820					}
2821					position++
2822					goto l342
2823				l343:
2824					position, tokenIndex = position342, tokenIndex342
2825					if buffer[position] != rune('%') {
2826						goto l340
2827					}
2828					position++
2829				}
2830			l342:
2831				{
2832					position344, tokenIndex344 := position, tokenIndex
2833					if buffer[position] != rune('f') {
2834						goto l345
2835					}
2836					position++
2837					if buffer[position] != rune('u') {
2838						goto l345
2839					}
2840					position++
2841					if buffer[position] != rune('n') {
2842						goto l345
2843					}
2844					position++
2845					if buffer[position] != rune('c') {
2846						goto l345
2847					}
2848					position++
2849					if buffer[position] != rune('t') {
2850						goto l345
2851					}
2852					position++
2853					if buffer[position] != rune('i') {
2854						goto l345
2855					}
2856					position++
2857					if buffer[position] != rune('o') {
2858						goto l345
2859					}
2860					position++
2861					if buffer[position] != rune('n') {
2862						goto l345
2863					}
2864					position++
2865					goto l344
2866				l345:
2867					position, tokenIndex = position344, tokenIndex344
2868					if buffer[position] != rune('o') {
2869						goto l340
2870					}
2871					position++
2872					if buffer[position] != rune('b') {
2873						goto l340
2874					}
2875					position++
2876					if buffer[position] != rune('j') {
2877						goto l340
2878					}
2879					position++
2880					if buffer[position] != rune('e') {
2881						goto l340
2882					}
2883					position++
2884					if buffer[position] != rune('c') {
2885						goto l340
2886					}
2887					position++
2888					if buffer[position] != rune('t') {
2889						goto l340
2890					}
2891					position++
2892				}
2893			l344:
2894				add(ruleSymbolType, position341)
2895			}
2896			return true
2897		l340:
2898			position, tokenIndex = position340, tokenIndex340
2899			return false
2900		},
2901		/* 20 Dot <- <'.'> */
2902		func() bool {
2903			position346, tokenIndex346 := position, tokenIndex
2904			{
2905				position347 := position
2906				if buffer[position] != rune('.') {
2907					goto l346
2908				}
2909				position++
2910				add(ruleDot, position347)
2911			}
2912			return true
2913		l346:
2914			position, tokenIndex = position346, tokenIndex346
2915			return false
2916		},
2917		/* 21 TCMarker <- <('[' 'T' 'C' ']')> */
2918		func() bool {
2919			position348, tokenIndex348 := position, tokenIndex
2920			{
2921				position349 := position
2922				if buffer[position] != rune('[') {
2923					goto l348
2924				}
2925				position++
2926				if buffer[position] != rune('T') {
2927					goto l348
2928				}
2929				position++
2930				if buffer[position] != rune('C') {
2931					goto l348
2932				}
2933				position++
2934				if buffer[position] != rune(']') {
2935					goto l348
2936				}
2937				position++
2938				add(ruleTCMarker, position349)
2939			}
2940			return true
2941		l348:
2942			position, tokenIndex = position348, tokenIndex348
2943			return false
2944		},
2945		/* 22 EscapedChar <- <('\\' .)> */
2946		func() bool {
2947			position350, tokenIndex350 := position, tokenIndex
2948			{
2949				position351 := position
2950				if buffer[position] != rune('\\') {
2951					goto l350
2952				}
2953				position++
2954				if !matchDot() {
2955					goto l350
2956				}
2957				add(ruleEscapedChar, position351)
2958			}
2959			return true
2960		l350:
2961			position, tokenIndex = position350, tokenIndex350
2962			return false
2963		},
2964		/* 23 WS <- <(' ' / '\t')+> */
2965		func() bool {
2966			position352, tokenIndex352 := position, tokenIndex
2967			{
2968				position353 := position
2969				{
2970					position356, tokenIndex356 := position, tokenIndex
2971					if buffer[position] != rune(' ') {
2972						goto l357
2973					}
2974					position++
2975					goto l356
2976				l357:
2977					position, tokenIndex = position356, tokenIndex356
2978					if buffer[position] != rune('\t') {
2979						goto l352
2980					}
2981					position++
2982				}
2983			l356:
2984			l354:
2985				{
2986					position355, tokenIndex355 := position, tokenIndex
2987					{
2988						position358, tokenIndex358 := position, tokenIndex
2989						if buffer[position] != rune(' ') {
2990							goto l359
2991						}
2992						position++
2993						goto l358
2994					l359:
2995						position, tokenIndex = position358, tokenIndex358
2996						if buffer[position] != rune('\t') {
2997							goto l355
2998						}
2999						position++
3000					}
3001				l358:
3002					goto l354
3003				l355:
3004					position, tokenIndex = position355, tokenIndex355
3005				}
3006				add(ruleWS, position353)
3007			}
3008			return true
3009		l352:
3010			position, tokenIndex = position352, tokenIndex352
3011			return false
3012		},
3013		/* 24 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
3014		func() bool {
3015			position360, tokenIndex360 := position, tokenIndex
3016			{
3017				position361 := position
3018				{
3019					position362, tokenIndex362 := position, tokenIndex
3020					if buffer[position] != rune('/') {
3021						goto l363
3022					}
3023					position++
3024					if buffer[position] != rune('/') {
3025						goto l363
3026					}
3027					position++
3028					goto l362
3029				l363:
3030					position, tokenIndex = position362, tokenIndex362
3031					if buffer[position] != rune('#') {
3032						goto l360
3033					}
3034					position++
3035				}
3036			l362:
3037			l364:
3038				{
3039					position365, tokenIndex365 := position, tokenIndex
3040					{
3041						position366, tokenIndex366 := position, tokenIndex
3042						if buffer[position] != rune('\n') {
3043							goto l366
3044						}
3045						position++
3046						goto l365
3047					l366:
3048						position, tokenIndex = position366, tokenIndex366
3049					}
3050					if !matchDot() {
3051						goto l365
3052					}
3053					goto l364
3054				l365:
3055					position, tokenIndex = position365, tokenIndex365
3056				}
3057				add(ruleComment, position361)
3058			}
3059			return true
3060		l360:
3061			position, tokenIndex = position360, tokenIndex360
3062			return false
3063		},
3064		/* 25 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
3065		func() bool {
3066			position367, tokenIndex367 := position, tokenIndex
3067			{
3068				position368 := position
3069				{
3070					position369, tokenIndex369 := position, tokenIndex
3071					if !_rules[ruleLocalSymbol]() {
3072						goto l370
3073					}
3074					goto l369
3075				l370:
3076					position, tokenIndex = position369, tokenIndex369
3077					if !_rules[ruleLocalLabel]() {
3078						goto l371
3079					}
3080					goto l369
3081				l371:
3082					position, tokenIndex = position369, tokenIndex369
3083					if !_rules[ruleSymbolName]() {
3084						goto l367
3085					}
3086				}
3087			l369:
3088				if buffer[position] != rune(':') {
3089					goto l367
3090				}
3091				position++
3092				add(ruleLabel, position368)
3093			}
3094			return true
3095		l367:
3096			position, tokenIndex = position367, tokenIndex367
3097			return false
3098		},
3099		/* 26 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
3100		func() bool {
3101			position372, tokenIndex372 := position, tokenIndex
3102			{
3103				position373 := position
3104				{
3105					position374, tokenIndex374 := position, tokenIndex
3106					if c := buffer[position]; c < rune('a') || c > rune('z') {
3107						goto l375
3108					}
3109					position++
3110					goto l374
3111				l375:
3112					position, tokenIndex = position374, tokenIndex374
3113					if c := buffer[position]; c < rune('A') || c > rune('Z') {
3114						goto l376
3115					}
3116					position++
3117					goto l374
3118				l376:
3119					position, tokenIndex = position374, tokenIndex374
3120					if buffer[position] != rune('.') {
3121						goto l377
3122					}
3123					position++
3124					goto l374
3125				l377:
3126					position, tokenIndex = position374, tokenIndex374
3127					if buffer[position] != rune('_') {
3128						goto l372
3129					}
3130					position++
3131				}
3132			l374:
3133			l378:
3134				{
3135					position379, tokenIndex379 := position, tokenIndex
3136					{
3137						position380, tokenIndex380 := position, tokenIndex
3138						if c := buffer[position]; c < rune('a') || c > rune('z') {
3139							goto l381
3140						}
3141						position++
3142						goto l380
3143					l381:
3144						position, tokenIndex = position380, tokenIndex380
3145						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3146							goto l382
3147						}
3148						position++
3149						goto l380
3150					l382:
3151						position, tokenIndex = position380, tokenIndex380
3152						if buffer[position] != rune('.') {
3153							goto l383
3154						}
3155						position++
3156						goto l380
3157					l383:
3158						position, tokenIndex = position380, tokenIndex380
3159						{
3160							position385, tokenIndex385 := position, tokenIndex
3161							if c := buffer[position]; c < rune('0') || c > rune('9') {
3162								goto l386
3163							}
3164							position++
3165							goto l385
3166						l386:
3167							position, tokenIndex = position385, tokenIndex385
3168							if c := buffer[position]; c < rune('0') || c > rune('9') {
3169								goto l384
3170							}
3171							position++
3172						}
3173					l385:
3174						goto l380
3175					l384:
3176						position, tokenIndex = position380, tokenIndex380
3177						if buffer[position] != rune('$') {
3178							goto l387
3179						}
3180						position++
3181						goto l380
3182					l387:
3183						position, tokenIndex = position380, tokenIndex380
3184						if buffer[position] != rune('_') {
3185							goto l379
3186						}
3187						position++
3188					}
3189				l380:
3190					goto l378
3191				l379:
3192					position, tokenIndex = position379, tokenIndex379
3193				}
3194				add(ruleSymbolName, position373)
3195			}
3196			return true
3197		l372:
3198			position, tokenIndex = position372, tokenIndex372
3199			return false
3200		},
3201		/* 27 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
3202		func() bool {
3203			position388, tokenIndex388 := position, tokenIndex
3204			{
3205				position389 := position
3206				if buffer[position] != rune('.') {
3207					goto l388
3208				}
3209				position++
3210				if buffer[position] != rune('L') {
3211					goto l388
3212				}
3213				position++
3214				{
3215					position392, tokenIndex392 := position, tokenIndex
3216					if c := buffer[position]; c < rune('a') || c > rune('z') {
3217						goto l393
3218					}
3219					position++
3220					goto l392
3221				l393:
3222					position, tokenIndex = position392, tokenIndex392
3223					if c := buffer[position]; c < rune('A') || c > rune('Z') {
3224						goto l394
3225					}
3226					position++
3227					goto l392
3228				l394:
3229					position, tokenIndex = position392, tokenIndex392
3230					{
3231						position396, tokenIndex396 := position, tokenIndex
3232						if c := buffer[position]; c < rune('a') || c > rune('z') {
3233							goto l397
3234						}
3235						position++
3236						goto l396
3237					l397:
3238						position, tokenIndex = position396, tokenIndex396
3239						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3240							goto l395
3241						}
3242						position++
3243					}
3244				l396:
3245					goto l392
3246				l395:
3247					position, tokenIndex = position392, tokenIndex392
3248					if buffer[position] != rune('.') {
3249						goto l398
3250					}
3251					position++
3252					goto l392
3253				l398:
3254					position, tokenIndex = position392, tokenIndex392
3255					{
3256						position400, tokenIndex400 := position, tokenIndex
3257						if c := buffer[position]; c < rune('0') || c > rune('9') {
3258							goto l401
3259						}
3260						position++
3261						goto l400
3262					l401:
3263						position, tokenIndex = position400, tokenIndex400
3264						if c := buffer[position]; c < rune('0') || c > rune('9') {
3265							goto l399
3266						}
3267						position++
3268					}
3269				l400:
3270					goto l392
3271				l399:
3272					position, tokenIndex = position392, tokenIndex392
3273					if buffer[position] != rune('$') {
3274						goto l402
3275					}
3276					position++
3277					goto l392
3278				l402:
3279					position, tokenIndex = position392, tokenIndex392
3280					if buffer[position] != rune('_') {
3281						goto l388
3282					}
3283					position++
3284				}
3285			l392:
3286			l390:
3287				{
3288					position391, tokenIndex391 := position, tokenIndex
3289					{
3290						position403, tokenIndex403 := position, tokenIndex
3291						if c := buffer[position]; c < rune('a') || c > rune('z') {
3292							goto l404
3293						}
3294						position++
3295						goto l403
3296					l404:
3297						position, tokenIndex = position403, tokenIndex403
3298						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3299							goto l405
3300						}
3301						position++
3302						goto l403
3303					l405:
3304						position, tokenIndex = position403, tokenIndex403
3305						{
3306							position407, tokenIndex407 := position, tokenIndex
3307							if c := buffer[position]; c < rune('a') || c > rune('z') {
3308								goto l408
3309							}
3310							position++
3311							goto l407
3312						l408:
3313							position, tokenIndex = position407, tokenIndex407
3314							if c := buffer[position]; c < rune('A') || c > rune('Z') {
3315								goto l406
3316							}
3317							position++
3318						}
3319					l407:
3320						goto l403
3321					l406:
3322						position, tokenIndex = position403, tokenIndex403
3323						if buffer[position] != rune('.') {
3324							goto l409
3325						}
3326						position++
3327						goto l403
3328					l409:
3329						position, tokenIndex = position403, tokenIndex403
3330						{
3331							position411, tokenIndex411 := position, tokenIndex
3332							if c := buffer[position]; c < rune('0') || c > rune('9') {
3333								goto l412
3334							}
3335							position++
3336							goto l411
3337						l412:
3338							position, tokenIndex = position411, tokenIndex411
3339							if c := buffer[position]; c < rune('0') || c > rune('9') {
3340								goto l410
3341							}
3342							position++
3343						}
3344					l411:
3345						goto l403
3346					l410:
3347						position, tokenIndex = position403, tokenIndex403
3348						if buffer[position] != rune('$') {
3349							goto l413
3350						}
3351						position++
3352						goto l403
3353					l413:
3354						position, tokenIndex = position403, tokenIndex403
3355						if buffer[position] != rune('_') {
3356							goto l391
3357						}
3358						position++
3359					}
3360				l403:
3361					goto l390
3362				l391:
3363					position, tokenIndex = position391, tokenIndex391
3364				}
3365				add(ruleLocalSymbol, position389)
3366			}
3367			return true
3368		l388:
3369			position, tokenIndex = position388, tokenIndex388
3370			return false
3371		},
3372		/* 28 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
3373		func() bool {
3374			position414, tokenIndex414 := position, tokenIndex
3375			{
3376				position415 := position
3377				if c := buffer[position]; c < rune('0') || c > rune('9') {
3378					goto l414
3379				}
3380				position++
3381			l416:
3382				{
3383					position417, tokenIndex417 := position, tokenIndex
3384					{
3385						position418, tokenIndex418 := position, tokenIndex
3386						if c := buffer[position]; c < rune('0') || c > rune('9') {
3387							goto l419
3388						}
3389						position++
3390						goto l418
3391					l419:
3392						position, tokenIndex = position418, tokenIndex418
3393						if buffer[position] != rune('$') {
3394							goto l417
3395						}
3396						position++
3397					}
3398				l418:
3399					goto l416
3400				l417:
3401					position, tokenIndex = position417, tokenIndex417
3402				}
3403				add(ruleLocalLabel, position415)
3404			}
3405			return true
3406		l414:
3407			position, tokenIndex = position414, tokenIndex414
3408			return false
3409		},
3410		/* 29 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
3411		func() bool {
3412			position420, tokenIndex420 := position, tokenIndex
3413			{
3414				position421 := position
3415				if c := buffer[position]; c < rune('0') || c > rune('9') {
3416					goto l420
3417				}
3418				position++
3419			l422:
3420				{
3421					position423, tokenIndex423 := position, tokenIndex
3422					{
3423						position424, tokenIndex424 := position, tokenIndex
3424						if c := buffer[position]; c < rune('0') || c > rune('9') {
3425							goto l425
3426						}
3427						position++
3428						goto l424
3429					l425:
3430						position, tokenIndex = position424, tokenIndex424
3431						if buffer[position] != rune('$') {
3432							goto l423
3433						}
3434						position++
3435					}
3436				l424:
3437					goto l422
3438				l423:
3439					position, tokenIndex = position423, tokenIndex423
3440				}
3441				{
3442					position426, tokenIndex426 := position, tokenIndex
3443					if buffer[position] != rune('b') {
3444						goto l427
3445					}
3446					position++
3447					goto l426
3448				l427:
3449					position, tokenIndex = position426, tokenIndex426
3450					if buffer[position] != rune('f') {
3451						goto l420
3452					}
3453					position++
3454				}
3455			l426:
3456				add(ruleLocalLabelRef, position421)
3457			}
3458			return true
3459		l420:
3460			position, tokenIndex = position420, tokenIndex420
3461			return false
3462		},
3463		/* 30 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
3464		func() bool {
3465			position428, tokenIndex428 := position, tokenIndex
3466			{
3467				position429 := position
3468				if !_rules[ruleInstructionName]() {
3469					goto l428
3470				}
3471				{
3472					position430, tokenIndex430 := position, tokenIndex
3473					if !_rules[ruleWS]() {
3474						goto l430
3475					}
3476					if !_rules[ruleInstructionArg]() {
3477						goto l430
3478					}
3479				l432:
3480					{
3481						position433, tokenIndex433 := position, tokenIndex
3482						{
3483							position434, tokenIndex434 := position, tokenIndex
3484							if !_rules[ruleWS]() {
3485								goto l434
3486							}
3487							goto l435
3488						l434:
3489							position, tokenIndex = position434, tokenIndex434
3490						}
3491					l435:
3492						if buffer[position] != rune(',') {
3493							goto l433
3494						}
3495						position++
3496						{
3497							position436, tokenIndex436 := position, tokenIndex
3498							if !_rules[ruleWS]() {
3499								goto l436
3500							}
3501							goto l437
3502						l436:
3503							position, tokenIndex = position436, tokenIndex436
3504						}
3505					l437:
3506						if !_rules[ruleInstructionArg]() {
3507							goto l433
3508						}
3509						goto l432
3510					l433:
3511						position, tokenIndex = position433, tokenIndex433
3512					}
3513					goto l431
3514				l430:
3515					position, tokenIndex = position430, tokenIndex430
3516				}
3517			l431:
3518				add(ruleInstruction, position429)
3519			}
3520			return true
3521		l428:
3522			position, tokenIndex = position428, tokenIndex428
3523			return false
3524		},
3525		/* 31 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
3526		func() bool {
3527			position438, tokenIndex438 := position, tokenIndex
3528			{
3529				position439 := position
3530				{
3531					position440, tokenIndex440 := position, tokenIndex
3532					if c := buffer[position]; c < rune('a') || c > rune('z') {
3533						goto l441
3534					}
3535					position++
3536					goto l440
3537				l441:
3538					position, tokenIndex = position440, tokenIndex440
3539					if c := buffer[position]; c < rune('A') || c > rune('Z') {
3540						goto l438
3541					}
3542					position++
3543				}
3544			l440:
3545			l442:
3546				{
3547					position443, tokenIndex443 := position, tokenIndex
3548					{
3549						position444, tokenIndex444 := position, tokenIndex
3550						if c := buffer[position]; c < rune('a') || c > rune('z') {
3551							goto l445
3552						}
3553						position++
3554						goto l444
3555					l445:
3556						position, tokenIndex = position444, tokenIndex444
3557						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3558							goto l446
3559						}
3560						position++
3561						goto l444
3562					l446:
3563						position, tokenIndex = position444, tokenIndex444
3564						if buffer[position] != rune('.') {
3565							goto l447
3566						}
3567						position++
3568						goto l444
3569					l447:
3570						position, tokenIndex = position444, tokenIndex444
3571						{
3572							position448, tokenIndex448 := position, tokenIndex
3573							if c := buffer[position]; c < rune('0') || c > rune('9') {
3574								goto l449
3575							}
3576							position++
3577							goto l448
3578						l449:
3579							position, tokenIndex = position448, tokenIndex448
3580							if c := buffer[position]; c < rune('0') || c > rune('9') {
3581								goto l443
3582							}
3583							position++
3584						}
3585					l448:
3586					}
3587				l444:
3588					goto l442
3589				l443:
3590					position, tokenIndex = position443, tokenIndex443
3591				}
3592				{
3593					position450, tokenIndex450 := position, tokenIndex
3594					{
3595						position452, tokenIndex452 := position, tokenIndex
3596						if buffer[position] != rune('.') {
3597							goto l453
3598						}
3599						position++
3600						goto l452
3601					l453:
3602						position, tokenIndex = position452, tokenIndex452
3603						if buffer[position] != rune('+') {
3604							goto l454
3605						}
3606						position++
3607						goto l452
3608					l454:
3609						position, tokenIndex = position452, tokenIndex452
3610						if buffer[position] != rune('-') {
3611							goto l450
3612						}
3613						position++
3614					}
3615				l452:
3616					goto l451
3617				l450:
3618					position, tokenIndex = position450, tokenIndex450
3619				}
3620			l451:
3621				add(ruleInstructionName, position439)
3622			}
3623			return true
3624		l438:
3625			position, tokenIndex = position438, tokenIndex438
3626			return false
3627		},
3628		/* 32 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
3629		func() bool {
3630			position455, tokenIndex455 := position, tokenIndex
3631			{
3632				position456 := position
3633				{
3634					position457, tokenIndex457 := position, tokenIndex
3635					if !_rules[ruleIndirectionIndicator]() {
3636						goto l457
3637					}
3638					goto l458
3639				l457:
3640					position, tokenIndex = position457, tokenIndex457
3641				}
3642			l458:
3643				{
3644					position459, tokenIndex459 := position, tokenIndex
3645					if !_rules[ruleARMConstantTweak]() {
3646						goto l460
3647					}
3648					goto l459
3649				l460:
3650					position, tokenIndex = position459, tokenIndex459
3651					if !_rules[ruleRegisterOrConstant]() {
3652						goto l461
3653					}
3654					goto l459
3655				l461:
3656					position, tokenIndex = position459, tokenIndex459
3657					if !_rules[ruleLocalLabelRef]() {
3658						goto l462
3659					}
3660					goto l459
3661				l462:
3662					position, tokenIndex = position459, tokenIndex459
3663					if !_rules[ruleTOCRefHigh]() {
3664						goto l463
3665					}
3666					goto l459
3667				l463:
3668					position, tokenIndex = position459, tokenIndex459
3669					if !_rules[ruleTOCRefLow]() {
3670						goto l464
3671					}
3672					goto l459
3673				l464:
3674					position, tokenIndex = position459, tokenIndex459
3675					if !_rules[ruleGOTLocation]() {
3676						goto l465
3677					}
3678					goto l459
3679				l465:
3680					position, tokenIndex = position459, tokenIndex459
3681					if !_rules[ruleGOTSymbolOffset]() {
3682						goto l466
3683					}
3684					goto l459
3685				l466:
3686					position, tokenIndex = position459, tokenIndex459
3687					if !_rules[ruleMemoryRef]() {
3688						goto l455
3689					}
3690				}
3691			l459:
3692			l467:
3693				{
3694					position468, tokenIndex468 := position, tokenIndex
3695					if !_rules[ruleAVX512Token]() {
3696						goto l468
3697					}
3698					goto l467
3699				l468:
3700					position, tokenIndex = position468, tokenIndex468
3701				}
3702				add(ruleInstructionArg, position456)
3703			}
3704			return true
3705		l455:
3706			position, tokenIndex = position455, tokenIndex455
3707			return false
3708		},
3709		/* 33 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
3710		func() bool {
3711			position469, tokenIndex469 := position, tokenIndex
3712			{
3713				position470 := position
3714				if buffer[position] != rune('$') {
3715					goto l469
3716				}
3717				position++
3718				if buffer[position] != rune('_') {
3719					goto l469
3720				}
3721				position++
3722				if buffer[position] != rune('G') {
3723					goto l469
3724				}
3725				position++
3726				if buffer[position] != rune('L') {
3727					goto l469
3728				}
3729				position++
3730				if buffer[position] != rune('O') {
3731					goto l469
3732				}
3733				position++
3734				if buffer[position] != rune('B') {
3735					goto l469
3736				}
3737				position++
3738				if buffer[position] != rune('A') {
3739					goto l469
3740				}
3741				position++
3742				if buffer[position] != rune('L') {
3743					goto l469
3744				}
3745				position++
3746				if buffer[position] != rune('_') {
3747					goto l469
3748				}
3749				position++
3750				if buffer[position] != rune('O') {
3751					goto l469
3752				}
3753				position++
3754				if buffer[position] != rune('F') {
3755					goto l469
3756				}
3757				position++
3758				if buffer[position] != rune('F') {
3759					goto l469
3760				}
3761				position++
3762				if buffer[position] != rune('S') {
3763					goto l469
3764				}
3765				position++
3766				if buffer[position] != rune('E') {
3767					goto l469
3768				}
3769				position++
3770				if buffer[position] != rune('T') {
3771					goto l469
3772				}
3773				position++
3774				if buffer[position] != rune('_') {
3775					goto l469
3776				}
3777				position++
3778				if buffer[position] != rune('T') {
3779					goto l469
3780				}
3781				position++
3782				if buffer[position] != rune('A') {
3783					goto l469
3784				}
3785				position++
3786				if buffer[position] != rune('B') {
3787					goto l469
3788				}
3789				position++
3790				if buffer[position] != rune('L') {
3791					goto l469
3792				}
3793				position++
3794				if buffer[position] != rune('E') {
3795					goto l469
3796				}
3797				position++
3798				if buffer[position] != rune('_') {
3799					goto l469
3800				}
3801				position++
3802				if buffer[position] != rune('-') {
3803					goto l469
3804				}
3805				position++
3806				if !_rules[ruleLocalSymbol]() {
3807					goto l469
3808				}
3809				add(ruleGOTLocation, position470)
3810			}
3811			return true
3812		l469:
3813			position, tokenIndex = position469, tokenIndex469
3814			return false
3815		},
3816		/* 34 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
3817		func() bool {
3818			position471, tokenIndex471 := position, tokenIndex
3819			{
3820				position472 := position
3821				{
3822					position473, tokenIndex473 := position, tokenIndex
3823					if buffer[position] != rune('$') {
3824						goto l474
3825					}
3826					position++
3827					if !_rules[ruleSymbolName]() {
3828						goto l474
3829					}
3830					if buffer[position] != rune('@') {
3831						goto l474
3832					}
3833					position++
3834					if buffer[position] != rune('G') {
3835						goto l474
3836					}
3837					position++
3838					if buffer[position] != rune('O') {
3839						goto l474
3840					}
3841					position++
3842					if buffer[position] != rune('T') {
3843						goto l474
3844					}
3845					position++
3846					{
3847						position475, tokenIndex475 := position, tokenIndex
3848						if buffer[position] != rune('O') {
3849							goto l475
3850						}
3851						position++
3852						if buffer[position] != rune('F') {
3853							goto l475
3854						}
3855						position++
3856						if buffer[position] != rune('F') {
3857							goto l475
3858						}
3859						position++
3860						goto l476
3861					l475:
3862						position, tokenIndex = position475, tokenIndex475
3863					}
3864				l476:
3865					goto l473
3866				l474:
3867					position, tokenIndex = position473, tokenIndex473
3868					if buffer[position] != rune(':') {
3869						goto l471
3870					}
3871					position++
3872					{
3873						position477, tokenIndex477 := position, tokenIndex
3874						if buffer[position] != rune('g') {
3875							goto l478
3876						}
3877						position++
3878						goto l477
3879					l478:
3880						position, tokenIndex = position477, tokenIndex477
3881						if buffer[position] != rune('G') {
3882							goto l471
3883						}
3884						position++
3885					}
3886				l477:
3887					{
3888						position479, tokenIndex479 := position, tokenIndex
3889						if buffer[position] != rune('o') {
3890							goto l480
3891						}
3892						position++
3893						goto l479
3894					l480:
3895						position, tokenIndex = position479, tokenIndex479
3896						if buffer[position] != rune('O') {
3897							goto l471
3898						}
3899						position++
3900					}
3901				l479:
3902					{
3903						position481, tokenIndex481 := position, tokenIndex
3904						if buffer[position] != rune('t') {
3905							goto l482
3906						}
3907						position++
3908						goto l481
3909					l482:
3910						position, tokenIndex = position481, tokenIndex481
3911						if buffer[position] != rune('T') {
3912							goto l471
3913						}
3914						position++
3915					}
3916				l481:
3917					if buffer[position] != rune(':') {
3918						goto l471
3919					}
3920					position++
3921					if !_rules[ruleSymbolName]() {
3922						goto l471
3923					}
3924				}
3925			l473:
3926				add(ruleGOTSymbolOffset, position472)
3927			}
3928			return true
3929		l471:
3930			position, tokenIndex = position471, tokenIndex471
3931			return false
3932		},
3933		/* 35 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
3934		func() bool {
3935			position483, tokenIndex483 := position, tokenIndex
3936			{
3937				position484 := position
3938				{
3939					position485, tokenIndex485 := position, tokenIndex
3940					if !_rules[ruleWS]() {
3941						goto l485
3942					}
3943					goto l486
3944				l485:
3945					position, tokenIndex = position485, tokenIndex485
3946				}
3947			l486:
3948				if buffer[position] != rune('{') {
3949					goto l483
3950				}
3951				position++
3952				{
3953					position487, tokenIndex487 := position, tokenIndex
3954					if buffer[position] != rune('%') {
3955						goto l487
3956					}
3957					position++
3958					goto l488
3959				l487:
3960					position, tokenIndex = position487, tokenIndex487
3961				}
3962			l488:
3963			l489:
3964				{
3965					position490, tokenIndex490 := position, tokenIndex
3966					{
3967						position491, tokenIndex491 := position, tokenIndex
3968						if c := buffer[position]; c < rune('0') || c > rune('9') {
3969							goto l492
3970						}
3971						position++
3972						goto l491
3973					l492:
3974						position, tokenIndex = position491, tokenIndex491
3975						if c := buffer[position]; c < rune('a') || c > rune('z') {
3976							goto l490
3977						}
3978						position++
3979					}
3980				l491:
3981					goto l489
3982				l490:
3983					position, tokenIndex = position490, tokenIndex490
3984				}
3985				if buffer[position] != rune('}') {
3986					goto l483
3987				}
3988				position++
3989				add(ruleAVX512Token, position484)
3990			}
3991			return true
3992		l483:
3993			position, tokenIndex = position483, tokenIndex483
3994			return false
3995		},
3996		/* 36 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
3997		func() bool {
3998			position493, tokenIndex493 := position, tokenIndex
3999			{
4000				position494 := position
4001				if buffer[position] != rune('.') {
4002					goto l493
4003				}
4004				position++
4005				if buffer[position] != rune('T') {
4006					goto l493
4007				}
4008				position++
4009				if buffer[position] != rune('O') {
4010					goto l493
4011				}
4012				position++
4013				if buffer[position] != rune('C') {
4014					goto l493
4015				}
4016				position++
4017				if buffer[position] != rune('.') {
4018					goto l493
4019				}
4020				position++
4021				if buffer[position] != rune('-') {
4022					goto l493
4023				}
4024				position++
4025				{
4026					position495, tokenIndex495 := position, tokenIndex
4027					if buffer[position] != rune('0') {
4028						goto l496
4029					}
4030					position++
4031					if buffer[position] != rune('b') {
4032						goto l496
4033					}
4034					position++
4035					goto l495
4036				l496:
4037					position, tokenIndex = position495, tokenIndex495
4038					if buffer[position] != rune('.') {
4039						goto l493
4040					}
4041					position++
4042					if buffer[position] != rune('L') {
4043						goto l493
4044					}
4045					position++
4046					{
4047						position499, tokenIndex499 := position, tokenIndex
4048						if c := buffer[position]; c < rune('a') || c > rune('z') {
4049							goto l500
4050						}
4051						position++
4052						goto l499
4053					l500:
4054						position, tokenIndex = position499, tokenIndex499
4055						if c := buffer[position]; c < rune('A') || c > rune('Z') {
4056							goto l501
4057						}
4058						position++
4059						goto l499
4060					l501:
4061						position, tokenIndex = position499, tokenIndex499
4062						if buffer[position] != rune('_') {
4063							goto l502
4064						}
4065						position++
4066						goto l499
4067					l502:
4068						position, tokenIndex = position499, tokenIndex499
4069						if c := buffer[position]; c < rune('0') || c > rune('9') {
4070							goto l493
4071						}
4072						position++
4073					}
4074				l499:
4075				l497:
4076					{
4077						position498, tokenIndex498 := position, tokenIndex
4078						{
4079							position503, tokenIndex503 := position, tokenIndex
4080							if c := buffer[position]; c < rune('a') || c > rune('z') {
4081								goto l504
4082							}
4083							position++
4084							goto l503
4085						l504:
4086							position, tokenIndex = position503, tokenIndex503
4087							if c := buffer[position]; c < rune('A') || c > rune('Z') {
4088								goto l505
4089							}
4090							position++
4091							goto l503
4092						l505:
4093							position, tokenIndex = position503, tokenIndex503
4094							if buffer[position] != rune('_') {
4095								goto l506
4096							}
4097							position++
4098							goto l503
4099						l506:
4100							position, tokenIndex = position503, tokenIndex503
4101							if c := buffer[position]; c < rune('0') || c > rune('9') {
4102								goto l498
4103							}
4104							position++
4105						}
4106					l503:
4107						goto l497
4108					l498:
4109						position, tokenIndex = position498, tokenIndex498
4110					}
4111				}
4112			l495:
4113				if buffer[position] != rune('@') {
4114					goto l493
4115				}
4116				position++
4117				{
4118					position507, tokenIndex507 := position, tokenIndex
4119					if buffer[position] != rune('h') {
4120						goto l508
4121					}
4122					position++
4123					goto l507
4124				l508:
4125					position, tokenIndex = position507, tokenIndex507
4126					if buffer[position] != rune('H') {
4127						goto l493
4128					}
4129					position++
4130				}
4131			l507:
4132				{
4133					position509, tokenIndex509 := position, tokenIndex
4134					if buffer[position] != rune('a') {
4135						goto l510
4136					}
4137					position++
4138					goto l509
4139				l510:
4140					position, tokenIndex = position509, tokenIndex509
4141					if buffer[position] != rune('A') {
4142						goto l493
4143					}
4144					position++
4145				}
4146			l509:
4147				add(ruleTOCRefHigh, position494)
4148			}
4149			return true
4150		l493:
4151			position, tokenIndex = position493, tokenIndex493
4152			return false
4153		},
4154		/* 37 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
4155		func() bool {
4156			position511, tokenIndex511 := position, tokenIndex
4157			{
4158				position512 := position
4159				if buffer[position] != rune('.') {
4160					goto l511
4161				}
4162				position++
4163				if buffer[position] != rune('T') {
4164					goto l511
4165				}
4166				position++
4167				if buffer[position] != rune('O') {
4168					goto l511
4169				}
4170				position++
4171				if buffer[position] != rune('C') {
4172					goto l511
4173				}
4174				position++
4175				if buffer[position] != rune('.') {
4176					goto l511
4177				}
4178				position++
4179				if buffer[position] != rune('-') {
4180					goto l511
4181				}
4182				position++
4183				{
4184					position513, tokenIndex513 := position, tokenIndex
4185					if buffer[position] != rune('0') {
4186						goto l514
4187					}
4188					position++
4189					if buffer[position] != rune('b') {
4190						goto l514
4191					}
4192					position++
4193					goto l513
4194				l514:
4195					position, tokenIndex = position513, tokenIndex513
4196					if buffer[position] != rune('.') {
4197						goto l511
4198					}
4199					position++
4200					if buffer[position] != rune('L') {
4201						goto l511
4202					}
4203					position++
4204					{
4205						position517, tokenIndex517 := position, tokenIndex
4206						if c := buffer[position]; c < rune('a') || c > rune('z') {
4207							goto l518
4208						}
4209						position++
4210						goto l517
4211					l518:
4212						position, tokenIndex = position517, tokenIndex517
4213						if c := buffer[position]; c < rune('A') || c > rune('Z') {
4214							goto l519
4215						}
4216						position++
4217						goto l517
4218					l519:
4219						position, tokenIndex = position517, tokenIndex517
4220						if buffer[position] != rune('_') {
4221							goto l520
4222						}
4223						position++
4224						goto l517
4225					l520:
4226						position, tokenIndex = position517, tokenIndex517
4227						if c := buffer[position]; c < rune('0') || c > rune('9') {
4228							goto l511
4229						}
4230						position++
4231					}
4232				l517:
4233				l515:
4234					{
4235						position516, tokenIndex516 := position, tokenIndex
4236						{
4237							position521, tokenIndex521 := position, tokenIndex
4238							if c := buffer[position]; c < rune('a') || c > rune('z') {
4239								goto l522
4240							}
4241							position++
4242							goto l521
4243						l522:
4244							position, tokenIndex = position521, tokenIndex521
4245							if c := buffer[position]; c < rune('A') || c > rune('Z') {
4246								goto l523
4247							}
4248							position++
4249							goto l521
4250						l523:
4251							position, tokenIndex = position521, tokenIndex521
4252							if buffer[position] != rune('_') {
4253								goto l524
4254							}
4255							position++
4256							goto l521
4257						l524:
4258							position, tokenIndex = position521, tokenIndex521
4259							if c := buffer[position]; c < rune('0') || c > rune('9') {
4260								goto l516
4261							}
4262							position++
4263						}
4264					l521:
4265						goto l515
4266					l516:
4267						position, tokenIndex = position516, tokenIndex516
4268					}
4269				}
4270			l513:
4271				if buffer[position] != rune('@') {
4272					goto l511
4273				}
4274				position++
4275				{
4276					position525, tokenIndex525 := position, tokenIndex
4277					if buffer[position] != rune('l') {
4278						goto l526
4279					}
4280					position++
4281					goto l525
4282				l526:
4283					position, tokenIndex = position525, tokenIndex525
4284					if buffer[position] != rune('L') {
4285						goto l511
4286					}
4287					position++
4288				}
4289			l525:
4290				add(ruleTOCRefLow, position512)
4291			}
4292			return true
4293		l511:
4294			position, tokenIndex = position511, tokenIndex511
4295			return false
4296		},
4297		/* 38 IndirectionIndicator <- <'*'> */
4298		func() bool {
4299			position527, tokenIndex527 := position, tokenIndex
4300			{
4301				position528 := position
4302				if buffer[position] != rune('*') {
4303					goto l527
4304				}
4305				position++
4306				add(ruleIndirectionIndicator, position528)
4307			}
4308			return true
4309		l527:
4310			position, tokenIndex = position527, tokenIndex527
4311			return false
4312		},
4313		/* 39 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
4314		func() bool {
4315			position529, tokenIndex529 := position, tokenIndex
4316			{
4317				position530 := position
4318				{
4319					position531, tokenIndex531 := position, tokenIndex
4320					if buffer[position] != rune('%') {
4321						goto l532
4322					}
4323					position++
4324					{
4325						position533, tokenIndex533 := position, tokenIndex
4326						if c := buffer[position]; c < rune('a') || c > rune('z') {
4327							goto l534
4328						}
4329						position++
4330						goto l533
4331					l534:
4332						position, tokenIndex = position533, tokenIndex533
4333						if c := buffer[position]; c < rune('A') || c > rune('Z') {
4334							goto l532
4335						}
4336						position++
4337					}
4338				l533:
4339				l535:
4340					{
4341						position536, tokenIndex536 := position, tokenIndex
4342						{
4343							position537, tokenIndex537 := position, tokenIndex
4344							if c := buffer[position]; c < rune('a') || c > rune('z') {
4345								goto l538
4346							}
4347							position++
4348							goto l537
4349						l538:
4350							position, tokenIndex = position537, tokenIndex537
4351							if c := buffer[position]; c < rune('A') || c > rune('Z') {
4352								goto l539
4353							}
4354							position++
4355							goto l537
4356						l539:
4357							position, tokenIndex = position537, tokenIndex537
4358							{
4359								position540, tokenIndex540 := position, tokenIndex
4360								if c := buffer[position]; c < rune('0') || c > rune('9') {
4361									goto l541
4362								}
4363								position++
4364								goto l540
4365							l541:
4366								position, tokenIndex = position540, tokenIndex540
4367								if c := buffer[position]; c < rune('0') || c > rune('9') {
4368									goto l536
4369								}
4370								position++
4371							}
4372						l540:
4373						}
4374					l537:
4375						goto l535
4376					l536:
4377						position, tokenIndex = position536, tokenIndex536
4378					}
4379					goto l531
4380				l532:
4381					position, tokenIndex = position531, tokenIndex531
4382					{
4383						position543, tokenIndex543 := position, tokenIndex
4384						if buffer[position] != rune('$') {
4385							goto l543
4386						}
4387						position++
4388						goto l544
4389					l543:
4390						position, tokenIndex = position543, tokenIndex543
4391					}
4392				l544:
4393					{
4394						position545, tokenIndex545 := position, tokenIndex
4395						if !_rules[ruleOffset]() {
4396							goto l546
4397						}
4398						if !_rules[ruleOffset]() {
4399							goto l546
4400						}
4401						goto l545
4402					l546:
4403						position, tokenIndex = position545, tokenIndex545
4404						if !_rules[ruleOffset]() {
4405							goto l542
4406						}
4407					}
4408				l545:
4409					goto l531
4410				l542:
4411					position, tokenIndex = position531, tokenIndex531
4412					if buffer[position] != rune('#') {
4413						goto l547
4414					}
4415					position++
4416					if !_rules[ruleOffset]() {
4417						goto l547
4418					}
4419					{
4420						position548, tokenIndex548 := position, tokenIndex
4421						if buffer[position] != rune('*') {
4422							goto l548
4423						}
4424						position++
4425						if c := buffer[position]; c < rune('0') || c > rune('9') {
4426							goto l548
4427						}
4428						position++
4429					l550:
4430						{
4431							position551, tokenIndex551 := position, tokenIndex
4432							if c := buffer[position]; c < rune('0') || c > rune('9') {
4433								goto l551
4434							}
4435							position++
4436							goto l550
4437						l551:
4438							position, tokenIndex = position551, tokenIndex551
4439						}
4440						{
4441							position552, tokenIndex552 := position, tokenIndex
4442							if buffer[position] != rune('-') {
4443								goto l552
4444							}
4445							position++
4446							if c := buffer[position]; c < rune('0') || c > rune('9') {
4447								goto l552
4448							}
4449							position++
4450						l554:
4451							{
4452								position555, tokenIndex555 := position, tokenIndex
4453								if c := buffer[position]; c < rune('0') || c > rune('9') {
4454									goto l555
4455								}
4456								position++
4457								goto l554
4458							l555:
4459								position, tokenIndex = position555, tokenIndex555
4460							}
4461							goto l553
4462						l552:
4463							position, tokenIndex = position552, tokenIndex552
4464						}
4465					l553:
4466						goto l549
4467					l548:
4468						position, tokenIndex = position548, tokenIndex548
4469					}
4470				l549:
4471					goto l531
4472				l547:
4473					position, tokenIndex = position531, tokenIndex531
4474					if buffer[position] != rune('#') {
4475						goto l556
4476					}
4477					position++
4478					{
4479						position557, tokenIndex557 := position, tokenIndex
4480						if buffer[position] != rune('~') {
4481							goto l557
4482						}
4483						position++
4484						goto l558
4485					l557:
4486						position, tokenIndex = position557, tokenIndex557
4487					}
4488				l558:
4489					if buffer[position] != rune('(') {
4490						goto l556
4491					}
4492					position++
4493					if c := buffer[position]; c < rune('0') || c > rune('9') {
4494						goto l556
4495					}
4496					position++
4497					{
4498						position559, tokenIndex559 := position, tokenIndex
4499						if !_rules[ruleWS]() {
4500							goto l559
4501						}
4502						goto l560
4503					l559:
4504						position, tokenIndex = position559, tokenIndex559
4505					}
4506				l560:
4507					if buffer[position] != rune('<') {
4508						goto l556
4509					}
4510					position++
4511					if buffer[position] != rune('<') {
4512						goto l556
4513					}
4514					position++
4515					{
4516						position561, tokenIndex561 := position, tokenIndex
4517						if !_rules[ruleWS]() {
4518							goto l561
4519						}
4520						goto l562
4521					l561:
4522						position, tokenIndex = position561, tokenIndex561
4523					}
4524				l562:
4525					if c := buffer[position]; c < rune('0') || c > rune('9') {
4526						goto l556
4527					}
4528					position++
4529					if buffer[position] != rune(')') {
4530						goto l556
4531					}
4532					position++
4533					goto l531
4534				l556:
4535					position, tokenIndex = position531, tokenIndex531
4536					if !_rules[ruleARMRegister]() {
4537						goto l529
4538					}
4539				}
4540			l531:
4541				{
4542					position563, tokenIndex563 := position, tokenIndex
4543					{
4544						position564, tokenIndex564 := position, tokenIndex
4545						if buffer[position] != rune('f') {
4546							goto l565
4547						}
4548						position++
4549						goto l564
4550					l565:
4551						position, tokenIndex = position564, tokenIndex564
4552						if buffer[position] != rune('b') {
4553							goto l566
4554						}
4555						position++
4556						goto l564
4557					l566:
4558						position, tokenIndex = position564, tokenIndex564
4559						if buffer[position] != rune(':') {
4560							goto l567
4561						}
4562						position++
4563						goto l564
4564					l567:
4565						position, tokenIndex = position564, tokenIndex564
4566						if buffer[position] != rune('(') {
4567							goto l568
4568						}
4569						position++
4570						goto l564
4571					l568:
4572						position, tokenIndex = position564, tokenIndex564
4573						if buffer[position] != rune('+') {
4574							goto l569
4575						}
4576						position++
4577						goto l564
4578					l569:
4579						position, tokenIndex = position564, tokenIndex564
4580						if buffer[position] != rune('-') {
4581							goto l563
4582						}
4583						position++
4584					}
4585				l564:
4586					goto l529
4587				l563:
4588					position, tokenIndex = position563, tokenIndex563
4589				}
4590				add(ruleRegisterOrConstant, position530)
4591			}
4592			return true
4593		l529:
4594			position, tokenIndex = position529, tokenIndex529
4595			return false
4596		},
4597		/* 40 ARMConstantTweak <- <(((('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
4598		func() bool {
4599			position570, tokenIndex570 := position, tokenIndex
4600			{
4601				position571 := position
4602				{
4603					position572, tokenIndex572 := position, tokenIndex
4604					{
4605						position574, tokenIndex574 := position, tokenIndex
4606						if buffer[position] != rune('l') {
4607							goto l575
4608						}
4609						position++
4610						goto l574
4611					l575:
4612						position, tokenIndex = position574, tokenIndex574
4613						if buffer[position] != rune('L') {
4614							goto l573
4615						}
4616						position++
4617					}
4618				l574:
4619					{
4620						position576, tokenIndex576 := position, tokenIndex
4621						if buffer[position] != rune('s') {
4622							goto l577
4623						}
4624						position++
4625						goto l576
4626					l577:
4627						position, tokenIndex = position576, tokenIndex576
4628						if buffer[position] != rune('S') {
4629							goto l573
4630						}
4631						position++
4632					}
4633				l576:
4634					{
4635						position578, tokenIndex578 := position, tokenIndex
4636						if buffer[position] != rune('l') {
4637							goto l579
4638						}
4639						position++
4640						goto l578
4641					l579:
4642						position, tokenIndex = position578, tokenIndex578
4643						if buffer[position] != rune('L') {
4644							goto l573
4645						}
4646						position++
4647					}
4648				l578:
4649					goto l572
4650				l573:
4651					position, tokenIndex = position572, tokenIndex572
4652					{
4653						position581, tokenIndex581 := position, tokenIndex
4654						if buffer[position] != rune('s') {
4655							goto l582
4656						}
4657						position++
4658						goto l581
4659					l582:
4660						position, tokenIndex = position581, tokenIndex581
4661						if buffer[position] != rune('S') {
4662							goto l580
4663						}
4664						position++
4665					}
4666				l581:
4667					{
4668						position583, tokenIndex583 := position, tokenIndex
4669						if buffer[position] != rune('x') {
4670							goto l584
4671						}
4672						position++
4673						goto l583
4674					l584:
4675						position, tokenIndex = position583, tokenIndex583
4676						if buffer[position] != rune('X') {
4677							goto l580
4678						}
4679						position++
4680					}
4681				l583:
4682					{
4683						position585, tokenIndex585 := position, tokenIndex
4684						if buffer[position] != rune('t') {
4685							goto l586
4686						}
4687						position++
4688						goto l585
4689					l586:
4690						position, tokenIndex = position585, tokenIndex585
4691						if buffer[position] != rune('T') {
4692							goto l580
4693						}
4694						position++
4695					}
4696				l585:
4697					{
4698						position587, tokenIndex587 := position, tokenIndex
4699						if buffer[position] != rune('w') {
4700							goto l588
4701						}
4702						position++
4703						goto l587
4704					l588:
4705						position, tokenIndex = position587, tokenIndex587
4706						if buffer[position] != rune('W') {
4707							goto l580
4708						}
4709						position++
4710					}
4711				l587:
4712					goto l572
4713				l580:
4714					position, tokenIndex = position572, tokenIndex572
4715					{
4716						position590, tokenIndex590 := position, tokenIndex
4717						if buffer[position] != rune('s') {
4718							goto l591
4719						}
4720						position++
4721						goto l590
4722					l591:
4723						position, tokenIndex = position590, tokenIndex590
4724						if buffer[position] != rune('S') {
4725							goto l589
4726						}
4727						position++
4728					}
4729				l590:
4730					{
4731						position592, tokenIndex592 := position, tokenIndex
4732						if buffer[position] != rune('x') {
4733							goto l593
4734						}
4735						position++
4736						goto l592
4737					l593:
4738						position, tokenIndex = position592, tokenIndex592
4739						if buffer[position] != rune('X') {
4740							goto l589
4741						}
4742						position++
4743					}
4744				l592:
4745					{
4746						position594, tokenIndex594 := position, tokenIndex
4747						if buffer[position] != rune('t') {
4748							goto l595
4749						}
4750						position++
4751						goto l594
4752					l595:
4753						position, tokenIndex = position594, tokenIndex594
4754						if buffer[position] != rune('T') {
4755							goto l589
4756						}
4757						position++
4758					}
4759				l594:
4760					{
4761						position596, tokenIndex596 := position, tokenIndex
4762						if buffer[position] != rune('b') {
4763							goto l597
4764						}
4765						position++
4766						goto l596
4767					l597:
4768						position, tokenIndex = position596, tokenIndex596
4769						if buffer[position] != rune('B') {
4770							goto l589
4771						}
4772						position++
4773					}
4774				l596:
4775					goto l572
4776				l589:
4777					position, tokenIndex = position572, tokenIndex572
4778					{
4779						position599, tokenIndex599 := position, tokenIndex
4780						if buffer[position] != rune('u') {
4781							goto l600
4782						}
4783						position++
4784						goto l599
4785					l600:
4786						position, tokenIndex = position599, tokenIndex599
4787						if buffer[position] != rune('U') {
4788							goto l598
4789						}
4790						position++
4791					}
4792				l599:
4793					{
4794						position601, tokenIndex601 := position, tokenIndex
4795						if buffer[position] != rune('x') {
4796							goto l602
4797						}
4798						position++
4799						goto l601
4800					l602:
4801						position, tokenIndex = position601, tokenIndex601
4802						if buffer[position] != rune('X') {
4803							goto l598
4804						}
4805						position++
4806					}
4807				l601:
4808					{
4809						position603, tokenIndex603 := position, tokenIndex
4810						if buffer[position] != rune('t') {
4811							goto l604
4812						}
4813						position++
4814						goto l603
4815					l604:
4816						position, tokenIndex = position603, tokenIndex603
4817						if buffer[position] != rune('T') {
4818							goto l598
4819						}
4820						position++
4821					}
4822				l603:
4823					{
4824						position605, tokenIndex605 := position, tokenIndex
4825						if buffer[position] != rune('w') {
4826							goto l606
4827						}
4828						position++
4829						goto l605
4830					l606:
4831						position, tokenIndex = position605, tokenIndex605
4832						if buffer[position] != rune('W') {
4833							goto l598
4834						}
4835						position++
4836					}
4837				l605:
4838					goto l572
4839				l598:
4840					position, tokenIndex = position572, tokenIndex572
4841					{
4842						position608, tokenIndex608 := position, tokenIndex
4843						if buffer[position] != rune('u') {
4844							goto l609
4845						}
4846						position++
4847						goto l608
4848					l609:
4849						position, tokenIndex = position608, tokenIndex608
4850						if buffer[position] != rune('U') {
4851							goto l607
4852						}
4853						position++
4854					}
4855				l608:
4856					{
4857						position610, tokenIndex610 := position, tokenIndex
4858						if buffer[position] != rune('x') {
4859							goto l611
4860						}
4861						position++
4862						goto l610
4863					l611:
4864						position, tokenIndex = position610, tokenIndex610
4865						if buffer[position] != rune('X') {
4866							goto l607
4867						}
4868						position++
4869					}
4870				l610:
4871					{
4872						position612, tokenIndex612 := position, tokenIndex
4873						if buffer[position] != rune('t') {
4874							goto l613
4875						}
4876						position++
4877						goto l612
4878					l613:
4879						position, tokenIndex = position612, tokenIndex612
4880						if buffer[position] != rune('T') {
4881							goto l607
4882						}
4883						position++
4884					}
4885				l612:
4886					{
4887						position614, tokenIndex614 := position, tokenIndex
4888						if buffer[position] != rune('b') {
4889							goto l615
4890						}
4891						position++
4892						goto l614
4893					l615:
4894						position, tokenIndex = position614, tokenIndex614
4895						if buffer[position] != rune('B') {
4896							goto l607
4897						}
4898						position++
4899					}
4900				l614:
4901					goto l572
4902				l607:
4903					position, tokenIndex = position572, tokenIndex572
4904					{
4905						position617, tokenIndex617 := position, tokenIndex
4906						if buffer[position] != rune('l') {
4907							goto l618
4908						}
4909						position++
4910						goto l617
4911					l618:
4912						position, tokenIndex = position617, tokenIndex617
4913						if buffer[position] != rune('L') {
4914							goto l616
4915						}
4916						position++
4917					}
4918				l617:
4919					{
4920						position619, tokenIndex619 := position, tokenIndex
4921						if buffer[position] != rune('s') {
4922							goto l620
4923						}
4924						position++
4925						goto l619
4926					l620:
4927						position, tokenIndex = position619, tokenIndex619
4928						if buffer[position] != rune('S') {
4929							goto l616
4930						}
4931						position++
4932					}
4933				l619:
4934					{
4935						position621, tokenIndex621 := position, tokenIndex
4936						if buffer[position] != rune('r') {
4937							goto l622
4938						}
4939						position++
4940						goto l621
4941					l622:
4942						position, tokenIndex = position621, tokenIndex621
4943						if buffer[position] != rune('R') {
4944							goto l616
4945						}
4946						position++
4947					}
4948				l621:
4949					goto l572
4950				l616:
4951					position, tokenIndex = position572, tokenIndex572
4952					{
4953						position624, tokenIndex624 := position, tokenIndex
4954						if buffer[position] != rune('r') {
4955							goto l625
4956						}
4957						position++
4958						goto l624
4959					l625:
4960						position, tokenIndex = position624, tokenIndex624
4961						if buffer[position] != rune('R') {
4962							goto l623
4963						}
4964						position++
4965					}
4966				l624:
4967					{
4968						position626, tokenIndex626 := position, tokenIndex
4969						if buffer[position] != rune('o') {
4970							goto l627
4971						}
4972						position++
4973						goto l626
4974					l627:
4975						position, tokenIndex = position626, tokenIndex626
4976						if buffer[position] != rune('O') {
4977							goto l623
4978						}
4979						position++
4980					}
4981				l626:
4982					{
4983						position628, tokenIndex628 := position, tokenIndex
4984						if buffer[position] != rune('r') {
4985							goto l629
4986						}
4987						position++
4988						goto l628
4989					l629:
4990						position, tokenIndex = position628, tokenIndex628
4991						if buffer[position] != rune('R') {
4992							goto l623
4993						}
4994						position++
4995					}
4996				l628:
4997					goto l572
4998				l623:
4999					position, tokenIndex = position572, tokenIndex572
5000					{
5001						position630, tokenIndex630 := position, tokenIndex
5002						if buffer[position] != rune('a') {
5003							goto l631
5004						}
5005						position++
5006						goto l630
5007					l631:
5008						position, tokenIndex = position630, tokenIndex630
5009						if buffer[position] != rune('A') {
5010							goto l570
5011						}
5012						position++
5013					}
5014				l630:
5015					{
5016						position632, tokenIndex632 := position, tokenIndex
5017						if buffer[position] != rune('s') {
5018							goto l633
5019						}
5020						position++
5021						goto l632
5022					l633:
5023						position, tokenIndex = position632, tokenIndex632
5024						if buffer[position] != rune('S') {
5025							goto l570
5026						}
5027						position++
5028					}
5029				l632:
5030					{
5031						position634, tokenIndex634 := position, tokenIndex
5032						if buffer[position] != rune('r') {
5033							goto l635
5034						}
5035						position++
5036						goto l634
5037					l635:
5038						position, tokenIndex = position634, tokenIndex634
5039						if buffer[position] != rune('R') {
5040							goto l570
5041						}
5042						position++
5043					}
5044				l634:
5045				}
5046			l572:
5047				{
5048					position636, tokenIndex636 := position, tokenIndex
5049					if !_rules[ruleWS]() {
5050						goto l636
5051					}
5052					if buffer[position] != rune('#') {
5053						goto l636
5054					}
5055					position++
5056					if !_rules[ruleOffset]() {
5057						goto l636
5058					}
5059					goto l637
5060				l636:
5061					position, tokenIndex = position636, tokenIndex636
5062				}
5063			l637:
5064				add(ruleARMConstantTweak, position571)
5065			}
5066			return true
5067		l570:
5068			position, tokenIndex = position570, tokenIndex570
5069			return false
5070		},
5071		/* 41 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
5072		func() bool {
5073			position638, tokenIndex638 := position, tokenIndex
5074			{
5075				position639 := position
5076				{
5077					position640, tokenIndex640 := position, tokenIndex
5078					{
5079						position642, tokenIndex642 := position, tokenIndex
5080						if buffer[position] != rune('s') {
5081							goto l643
5082						}
5083						position++
5084						goto l642
5085					l643:
5086						position, tokenIndex = position642, tokenIndex642
5087						if buffer[position] != rune('S') {
5088							goto l641
5089						}
5090						position++
5091					}
5092				l642:
5093					{
5094						position644, tokenIndex644 := position, tokenIndex
5095						if buffer[position] != rune('p') {
5096							goto l645
5097						}
5098						position++
5099						goto l644
5100					l645:
5101						position, tokenIndex = position644, tokenIndex644
5102						if buffer[position] != rune('P') {
5103							goto l641
5104						}
5105						position++
5106					}
5107				l644:
5108					goto l640
5109				l641:
5110					position, tokenIndex = position640, tokenIndex640
5111					{
5112						position647, tokenIndex647 := position, tokenIndex
5113						if buffer[position] != rune('x') {
5114							goto l648
5115						}
5116						position++
5117						goto l647
5118					l648:
5119						position, tokenIndex = position647, tokenIndex647
5120						if buffer[position] != rune('w') {
5121							goto l649
5122						}
5123						position++
5124						goto l647
5125					l649:
5126						position, tokenIndex = position647, tokenIndex647
5127						if buffer[position] != rune('d') {
5128							goto l650
5129						}
5130						position++
5131						goto l647
5132					l650:
5133						position, tokenIndex = position647, tokenIndex647
5134						if buffer[position] != rune('q') {
5135							goto l651
5136						}
5137						position++
5138						goto l647
5139					l651:
5140						position, tokenIndex = position647, tokenIndex647
5141						if buffer[position] != rune('s') {
5142							goto l646
5143						}
5144						position++
5145					}
5146				l647:
5147					if c := buffer[position]; c < rune('0') || c > rune('9') {
5148						goto l646
5149					}
5150					position++
5151					{
5152						position652, tokenIndex652 := position, tokenIndex
5153						if c := buffer[position]; c < rune('0') || c > rune('9') {
5154							goto l652
5155						}
5156						position++
5157						goto l653
5158					l652:
5159						position, tokenIndex = position652, tokenIndex652
5160					}
5161				l653:
5162					goto l640
5163				l646:
5164					position, tokenIndex = position640, tokenIndex640
5165					{
5166						position655, tokenIndex655 := position, tokenIndex
5167						if buffer[position] != rune('x') {
5168							goto l656
5169						}
5170						position++
5171						goto l655
5172					l656:
5173						position, tokenIndex = position655, tokenIndex655
5174						if buffer[position] != rune('X') {
5175							goto l654
5176						}
5177						position++
5178					}
5179				l655:
5180					{
5181						position657, tokenIndex657 := position, tokenIndex
5182						if buffer[position] != rune('z') {
5183							goto l658
5184						}
5185						position++
5186						goto l657
5187					l658:
5188						position, tokenIndex = position657, tokenIndex657
5189						if buffer[position] != rune('Z') {
5190							goto l654
5191						}
5192						position++
5193					}
5194				l657:
5195					{
5196						position659, tokenIndex659 := position, tokenIndex
5197						if buffer[position] != rune('r') {
5198							goto l660
5199						}
5200						position++
5201						goto l659
5202					l660:
5203						position, tokenIndex = position659, tokenIndex659
5204						if buffer[position] != rune('R') {
5205							goto l654
5206						}
5207						position++
5208					}
5209				l659:
5210					goto l640
5211				l654:
5212					position, tokenIndex = position640, tokenIndex640
5213					{
5214						position662, tokenIndex662 := position, tokenIndex
5215						if buffer[position] != rune('w') {
5216							goto l663
5217						}
5218						position++
5219						goto l662
5220					l663:
5221						position, tokenIndex = position662, tokenIndex662
5222						if buffer[position] != rune('W') {
5223							goto l661
5224						}
5225						position++
5226					}
5227				l662:
5228					{
5229						position664, tokenIndex664 := position, tokenIndex
5230						if buffer[position] != rune('z') {
5231							goto l665
5232						}
5233						position++
5234						goto l664
5235					l665:
5236						position, tokenIndex = position664, tokenIndex664
5237						if buffer[position] != rune('Z') {
5238							goto l661
5239						}
5240						position++
5241					}
5242				l664:
5243					{
5244						position666, tokenIndex666 := position, tokenIndex
5245						if buffer[position] != rune('r') {
5246							goto l667
5247						}
5248						position++
5249						goto l666
5250					l667:
5251						position, tokenIndex = position666, tokenIndex666
5252						if buffer[position] != rune('R') {
5253							goto l661
5254						}
5255						position++
5256					}
5257				l666:
5258					goto l640
5259				l661:
5260					position, tokenIndex = position640, tokenIndex640
5261					if !_rules[ruleARMVectorRegister]() {
5262						goto l668
5263					}
5264					goto l640
5265				l668:
5266					position, tokenIndex = position640, tokenIndex640
5267					if buffer[position] != rune('{') {
5268						goto l638
5269					}
5270					position++
5271					{
5272						position669, tokenIndex669 := position, tokenIndex
5273						if !_rules[ruleWS]() {
5274							goto l669
5275						}
5276						goto l670
5277					l669:
5278						position, tokenIndex = position669, tokenIndex669
5279					}
5280				l670:
5281					if !_rules[ruleARMVectorRegister]() {
5282						goto l638
5283					}
5284				l671:
5285					{
5286						position672, tokenIndex672 := position, tokenIndex
5287						if buffer[position] != rune(',') {
5288							goto l672
5289						}
5290						position++
5291						{
5292							position673, tokenIndex673 := position, tokenIndex
5293							if !_rules[ruleWS]() {
5294								goto l673
5295							}
5296							goto l674
5297						l673:
5298							position, tokenIndex = position673, tokenIndex673
5299						}
5300					l674:
5301						if !_rules[ruleARMVectorRegister]() {
5302							goto l672
5303						}
5304						goto l671
5305					l672:
5306						position, tokenIndex = position672, tokenIndex672
5307					}
5308					{
5309						position675, tokenIndex675 := position, tokenIndex
5310						if !_rules[ruleWS]() {
5311							goto l675
5312						}
5313						goto l676
5314					l675:
5315						position, tokenIndex = position675, tokenIndex675
5316					}
5317				l676:
5318					if buffer[position] != rune('}') {
5319						goto l638
5320					}
5321					position++
5322					{
5323						position677, tokenIndex677 := position, tokenIndex
5324						if buffer[position] != rune('[') {
5325							goto l677
5326						}
5327						position++
5328						if c := buffer[position]; c < rune('0') || c > rune('9') {
5329							goto l677
5330						}
5331						position++
5332						{
5333							position679, tokenIndex679 := position, tokenIndex
5334							if c := buffer[position]; c < rune('0') || c > rune('9') {
5335								goto l679
5336							}
5337							position++
5338							goto l680
5339						l679:
5340							position, tokenIndex = position679, tokenIndex679
5341						}
5342					l680:
5343						if buffer[position] != rune(']') {
5344							goto l677
5345						}
5346						position++
5347						goto l678
5348					l677:
5349						position, tokenIndex = position677, tokenIndex677
5350					}
5351				l678:
5352				}
5353			l640:
5354				add(ruleARMRegister, position639)
5355			}
5356			return true
5357		l638:
5358			position, tokenIndex = position638, tokenIndex638
5359			return false
5360		},
5361		/* 42 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
5362		func() bool {
5363			position681, tokenIndex681 := position, tokenIndex
5364			{
5365				position682 := position
5366				{
5367					position683, tokenIndex683 := position, tokenIndex
5368					if buffer[position] != rune('v') {
5369						goto l684
5370					}
5371					position++
5372					goto l683
5373				l684:
5374					position, tokenIndex = position683, tokenIndex683
5375					if buffer[position] != rune('V') {
5376						goto l681
5377					}
5378					position++
5379				}
5380			l683:
5381				if c := buffer[position]; c < rune('0') || c > rune('9') {
5382					goto l681
5383				}
5384				position++
5385				{
5386					position685, tokenIndex685 := position, tokenIndex
5387					if c := buffer[position]; c < rune('0') || c > rune('9') {
5388						goto l685
5389					}
5390					position++
5391					goto l686
5392				l685:
5393					position, tokenIndex = position685, tokenIndex685
5394				}
5395			l686:
5396				{
5397					position687, tokenIndex687 := position, tokenIndex
5398					if buffer[position] != rune('.') {
5399						goto l687
5400					}
5401					position++
5402				l689:
5403					{
5404						position690, tokenIndex690 := position, tokenIndex
5405						if c := buffer[position]; c < rune('0') || c > rune('9') {
5406							goto l690
5407						}
5408						position++
5409						goto l689
5410					l690:
5411						position, tokenIndex = position690, tokenIndex690
5412					}
5413					{
5414						position691, tokenIndex691 := position, tokenIndex
5415						if buffer[position] != rune('b') {
5416							goto l692
5417						}
5418						position++
5419						goto l691
5420					l692:
5421						position, tokenIndex = position691, tokenIndex691
5422						if buffer[position] != rune('s') {
5423							goto l693
5424						}
5425						position++
5426						goto l691
5427					l693:
5428						position, tokenIndex = position691, tokenIndex691
5429						if buffer[position] != rune('d') {
5430							goto l694
5431						}
5432						position++
5433						goto l691
5434					l694:
5435						position, tokenIndex = position691, tokenIndex691
5436						if buffer[position] != rune('h') {
5437							goto l695
5438						}
5439						position++
5440						goto l691
5441					l695:
5442						position, tokenIndex = position691, tokenIndex691
5443						if buffer[position] != rune('q') {
5444							goto l687
5445						}
5446						position++
5447					}
5448				l691:
5449					{
5450						position696, tokenIndex696 := position, tokenIndex
5451						if buffer[position] != rune('[') {
5452							goto l696
5453						}
5454						position++
5455						if c := buffer[position]; c < rune('0') || c > rune('9') {
5456							goto l696
5457						}
5458						position++
5459						{
5460							position698, tokenIndex698 := position, tokenIndex
5461							if c := buffer[position]; c < rune('0') || c > rune('9') {
5462								goto l698
5463							}
5464							position++
5465							goto l699
5466						l698:
5467							position, tokenIndex = position698, tokenIndex698
5468						}
5469					l699:
5470						if buffer[position] != rune(']') {
5471							goto l696
5472						}
5473						position++
5474						goto l697
5475					l696:
5476						position, tokenIndex = position696, tokenIndex696
5477					}
5478				l697:
5479					goto l688
5480				l687:
5481					position, tokenIndex = position687, tokenIndex687
5482				}
5483			l688:
5484				add(ruleARMVectorRegister, position682)
5485			}
5486			return true
5487		l681:
5488			position, tokenIndex = position681, tokenIndex681
5489			return false
5490		},
5491		/* 43 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
5492		func() bool {
5493			position700, tokenIndex700 := position, tokenIndex
5494			{
5495				position701 := position
5496				{
5497					position702, tokenIndex702 := position, tokenIndex
5498					if !_rules[ruleSymbolRef]() {
5499						goto l703
5500					}
5501					if !_rules[ruleBaseIndexScale]() {
5502						goto l703
5503					}
5504					goto l702
5505				l703:
5506					position, tokenIndex = position702, tokenIndex702
5507					if !_rules[ruleSymbolRef]() {
5508						goto l704
5509					}
5510					goto l702
5511				l704:
5512					position, tokenIndex = position702, tokenIndex702
5513					if !_rules[ruleLow12BitsSymbolRef]() {
5514						goto l705
5515					}
5516					goto l702
5517				l705:
5518					position, tokenIndex = position702, tokenIndex702
5519				l707:
5520					{
5521						position708, tokenIndex708 := position, tokenIndex
5522						if !_rules[ruleOffset]() {
5523							goto l708
5524						}
5525						goto l707
5526					l708:
5527						position, tokenIndex = position708, tokenIndex708
5528					}
5529					if !_rules[ruleBaseIndexScale]() {
5530						goto l706
5531					}
5532					goto l702
5533				l706:
5534					position, tokenIndex = position702, tokenIndex702
5535					if !_rules[ruleSegmentRegister]() {
5536						goto l709
5537					}
5538					if !_rules[ruleOffset]() {
5539						goto l709
5540					}
5541					if !_rules[ruleBaseIndexScale]() {
5542						goto l709
5543					}
5544					goto l702
5545				l709:
5546					position, tokenIndex = position702, tokenIndex702
5547					if !_rules[ruleSegmentRegister]() {
5548						goto l710
5549					}
5550					if !_rules[ruleBaseIndexScale]() {
5551						goto l710
5552					}
5553					goto l702
5554				l710:
5555					position, tokenIndex = position702, tokenIndex702
5556					if !_rules[ruleSegmentRegister]() {
5557						goto l711
5558					}
5559					if !_rules[ruleOffset]() {
5560						goto l711
5561					}
5562					goto l702
5563				l711:
5564					position, tokenIndex = position702, tokenIndex702
5565					if !_rules[ruleARMBaseIndexScale]() {
5566						goto l712
5567					}
5568					goto l702
5569				l712:
5570					position, tokenIndex = position702, tokenIndex702
5571					if !_rules[ruleBaseIndexScale]() {
5572						goto l700
5573					}
5574				}
5575			l702:
5576				add(ruleMemoryRef, position701)
5577			}
5578			return true
5579		l700:
5580			position, tokenIndex = position700, tokenIndex700
5581			return false
5582		},
5583		/* 44 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
5584		func() bool {
5585			position713, tokenIndex713 := position, tokenIndex
5586			{
5587				position714 := position
5588				{
5589					position715, tokenIndex715 := position, tokenIndex
5590				l717:
5591					{
5592						position718, tokenIndex718 := position, tokenIndex
5593						if !_rules[ruleOffset]() {
5594							goto l718
5595						}
5596						goto l717
5597					l718:
5598						position, tokenIndex = position718, tokenIndex718
5599					}
5600					if buffer[position] != rune('+') {
5601						goto l715
5602					}
5603					position++
5604					goto l716
5605				l715:
5606					position, tokenIndex = position715, tokenIndex715
5607				}
5608			l716:
5609				{
5610					position719, tokenIndex719 := position, tokenIndex
5611					if !_rules[ruleLocalSymbol]() {
5612						goto l720
5613					}
5614					goto l719
5615				l720:
5616					position, tokenIndex = position719, tokenIndex719
5617					if !_rules[ruleSymbolName]() {
5618						goto l713
5619					}
5620				}
5621			l719:
5622			l721:
5623				{
5624					position722, tokenIndex722 := position, tokenIndex
5625					if !_rules[ruleOffset]() {
5626						goto l722
5627					}
5628					goto l721
5629				l722:
5630					position, tokenIndex = position722, tokenIndex722
5631				}
5632				{
5633					position723, tokenIndex723 := position, tokenIndex
5634					if buffer[position] != rune('@') {
5635						goto l723
5636					}
5637					position++
5638					if !_rules[ruleSection]() {
5639						goto l723
5640					}
5641				l725:
5642					{
5643						position726, tokenIndex726 := position, tokenIndex
5644						if !_rules[ruleOffset]() {
5645							goto l726
5646						}
5647						goto l725
5648					l726:
5649						position, tokenIndex = position726, tokenIndex726
5650					}
5651					goto l724
5652				l723:
5653					position, tokenIndex = position723, tokenIndex723
5654				}
5655			l724:
5656				add(ruleSymbolRef, position714)
5657			}
5658			return true
5659		l713:
5660			position, tokenIndex = position713, tokenIndex713
5661			return false
5662		},
5663		/* 45 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
5664		func() bool {
5665			position727, tokenIndex727 := position, tokenIndex
5666			{
5667				position728 := position
5668				if buffer[position] != rune(':') {
5669					goto l727
5670				}
5671				position++
5672				{
5673					position729, tokenIndex729 := position, tokenIndex
5674					if buffer[position] != rune('l') {
5675						goto l730
5676					}
5677					position++
5678					goto l729
5679				l730:
5680					position, tokenIndex = position729, tokenIndex729
5681					if buffer[position] != rune('L') {
5682						goto l727
5683					}
5684					position++
5685				}
5686			l729:
5687				{
5688					position731, tokenIndex731 := position, tokenIndex
5689					if buffer[position] != rune('o') {
5690						goto l732
5691					}
5692					position++
5693					goto l731
5694				l732:
5695					position, tokenIndex = position731, tokenIndex731
5696					if buffer[position] != rune('O') {
5697						goto l727
5698					}
5699					position++
5700				}
5701			l731:
5702				if buffer[position] != rune('1') {
5703					goto l727
5704				}
5705				position++
5706				if buffer[position] != rune('2') {
5707					goto l727
5708				}
5709				position++
5710				if buffer[position] != rune(':') {
5711					goto l727
5712				}
5713				position++
5714				{
5715					position733, tokenIndex733 := position, tokenIndex
5716					if !_rules[ruleLocalSymbol]() {
5717						goto l734
5718					}
5719					goto l733
5720				l734:
5721					position, tokenIndex = position733, tokenIndex733
5722					if !_rules[ruleSymbolName]() {
5723						goto l727
5724					}
5725				}
5726			l733:
5727				{
5728					position735, tokenIndex735 := position, tokenIndex
5729					if !_rules[ruleOffset]() {
5730						goto l735
5731					}
5732					goto l736
5733				l735:
5734					position, tokenIndex = position735, tokenIndex735
5735				}
5736			l736:
5737				add(ruleLow12BitsSymbolRef, position728)
5738			}
5739			return true
5740		l727:
5741			position, tokenIndex = position727, tokenIndex727
5742			return false
5743		},
5744		/* 46 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
5745		func() bool {
5746			position737, tokenIndex737 := position, tokenIndex
5747			{
5748				position738 := position
5749				if buffer[position] != rune('[') {
5750					goto l737
5751				}
5752				position++
5753				if !_rules[ruleARMRegister]() {
5754					goto l737
5755				}
5756				{
5757					position739, tokenIndex739 := position, tokenIndex
5758					if buffer[position] != rune(',') {
5759						goto l739
5760					}
5761					position++
5762					{
5763						position741, tokenIndex741 := position, tokenIndex
5764						if !_rules[ruleWS]() {
5765							goto l741
5766						}
5767						goto l742
5768					l741:
5769						position, tokenIndex = position741, tokenIndex741
5770					}
5771				l742:
5772					{
5773						position743, tokenIndex743 := position, tokenIndex
5774						if buffer[position] != rune('#') {
5775							goto l744
5776						}
5777						position++
5778						if !_rules[ruleOffset]() {
5779							goto l744
5780						}
5781						{
5782							position745, tokenIndex745 := position, tokenIndex
5783							{
5784								position747, tokenIndex747 := position, tokenIndex
5785								if buffer[position] != rune('*') {
5786									goto l748
5787								}
5788								position++
5789								if c := buffer[position]; c < rune('0') || c > rune('9') {
5790									goto l748
5791								}
5792								position++
5793							l749:
5794								{
5795									position750, tokenIndex750 := position, tokenIndex
5796									if c := buffer[position]; c < rune('0') || c > rune('9') {
5797										goto l750
5798									}
5799									position++
5800									goto l749
5801								l750:
5802									position, tokenIndex = position750, tokenIndex750
5803								}
5804								goto l747
5805							l748:
5806								position, tokenIndex = position747, tokenIndex747
5807								if buffer[position] != rune('*') {
5808									goto l751
5809								}
5810								position++
5811								if buffer[position] != rune('(') {
5812									goto l751
5813								}
5814								position++
5815								if c := buffer[position]; c < rune('0') || c > rune('9') {
5816									goto l751
5817								}
5818								position++
5819							l752:
5820								{
5821									position753, tokenIndex753 := position, tokenIndex
5822									if c := buffer[position]; c < rune('0') || c > rune('9') {
5823										goto l753
5824									}
5825									position++
5826									goto l752
5827								l753:
5828									position, tokenIndex = position753, tokenIndex753
5829								}
5830								if !_rules[ruleOperator]() {
5831									goto l751
5832								}
5833								if c := buffer[position]; c < rune('0') || c > rune('9') {
5834									goto l751
5835								}
5836								position++
5837							l754:
5838								{
5839									position755, tokenIndex755 := position, tokenIndex
5840									if c := buffer[position]; c < rune('0') || c > rune('9') {
5841										goto l755
5842									}
5843									position++
5844									goto l754
5845								l755:
5846									position, tokenIndex = position755, tokenIndex755
5847								}
5848								if buffer[position] != rune(')') {
5849									goto l751
5850								}
5851								position++
5852								goto l747
5853							l751:
5854								position, tokenIndex = position747, tokenIndex747
5855							l756:
5856								{
5857									position757, tokenIndex757 := position, tokenIndex
5858									if buffer[position] != rune('+') {
5859										goto l757
5860									}
5861									position++
5862									if c := buffer[position]; c < rune('0') || c > rune('9') {
5863										goto l757
5864									}
5865									position++
5866								l758:
5867									{
5868										position759, tokenIndex759 := position, tokenIndex
5869										if c := buffer[position]; c < rune('0') || c > rune('9') {
5870											goto l759
5871										}
5872										position++
5873										goto l758
5874									l759:
5875										position, tokenIndex = position759, tokenIndex759
5876									}
5877									goto l756
5878								l757:
5879									position, tokenIndex = position757, tokenIndex757
5880								}
5881							}
5882						l747:
5883							goto l746
5884
5885							position, tokenIndex = position745, tokenIndex745
5886						}
5887					l746:
5888						goto l743
5889					l744:
5890						position, tokenIndex = position743, tokenIndex743
5891						if !_rules[ruleARMGOTLow12]() {
5892							goto l760
5893						}
5894						goto l743
5895					l760:
5896						position, tokenIndex = position743, tokenIndex743
5897						if !_rules[ruleLow12BitsSymbolRef]() {
5898							goto l761
5899						}
5900						goto l743
5901					l761:
5902						position, tokenIndex = position743, tokenIndex743
5903						if !_rules[ruleARMRegister]() {
5904							goto l739
5905						}
5906					}
5907				l743:
5908					{
5909						position762, tokenIndex762 := position, tokenIndex
5910						if buffer[position] != rune(',') {
5911							goto l762
5912						}
5913						position++
5914						{
5915							position764, tokenIndex764 := position, tokenIndex
5916							if !_rules[ruleWS]() {
5917								goto l764
5918							}
5919							goto l765
5920						l764:
5921							position, tokenIndex = position764, tokenIndex764
5922						}
5923					l765:
5924						if !_rules[ruleARMConstantTweak]() {
5925							goto l762
5926						}
5927						goto l763
5928					l762:
5929						position, tokenIndex = position762, tokenIndex762
5930					}
5931				l763:
5932					goto l740
5933				l739:
5934					position, tokenIndex = position739, tokenIndex739
5935				}
5936			l740:
5937				if buffer[position] != rune(']') {
5938					goto l737
5939				}
5940				position++
5941				{
5942					position766, tokenIndex766 := position, tokenIndex
5943					if !_rules[ruleARMPostincrement]() {
5944						goto l766
5945					}
5946					goto l767
5947				l766:
5948					position, tokenIndex = position766, tokenIndex766
5949				}
5950			l767:
5951				add(ruleARMBaseIndexScale, position738)
5952			}
5953			return true
5954		l737:
5955			position, tokenIndex = position737, tokenIndex737
5956			return false
5957		},
5958		/* 47 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
5959		func() bool {
5960			position768, tokenIndex768 := position, tokenIndex
5961			{
5962				position769 := position
5963				if buffer[position] != rune(':') {
5964					goto l768
5965				}
5966				position++
5967				{
5968					position770, tokenIndex770 := position, tokenIndex
5969					if buffer[position] != rune('g') {
5970						goto l771
5971					}
5972					position++
5973					goto l770
5974				l771:
5975					position, tokenIndex = position770, tokenIndex770
5976					if buffer[position] != rune('G') {
5977						goto l768
5978					}
5979					position++
5980				}
5981			l770:
5982				{
5983					position772, tokenIndex772 := position, tokenIndex
5984					if buffer[position] != rune('o') {
5985						goto l773
5986					}
5987					position++
5988					goto l772
5989				l773:
5990					position, tokenIndex = position772, tokenIndex772
5991					if buffer[position] != rune('O') {
5992						goto l768
5993					}
5994					position++
5995				}
5996			l772:
5997				{
5998					position774, tokenIndex774 := position, tokenIndex
5999					if buffer[position] != rune('t') {
6000						goto l775
6001					}
6002					position++
6003					goto l774
6004				l775:
6005					position, tokenIndex = position774, tokenIndex774
6006					if buffer[position] != rune('T') {
6007						goto l768
6008					}
6009					position++
6010				}
6011			l774:
6012				if buffer[position] != rune('_') {
6013					goto l768
6014				}
6015				position++
6016				{
6017					position776, tokenIndex776 := position, tokenIndex
6018					if buffer[position] != rune('l') {
6019						goto l777
6020					}
6021					position++
6022					goto l776
6023				l777:
6024					position, tokenIndex = position776, tokenIndex776
6025					if buffer[position] != rune('L') {
6026						goto l768
6027					}
6028					position++
6029				}
6030			l776:
6031				{
6032					position778, tokenIndex778 := position, tokenIndex
6033					if buffer[position] != rune('o') {
6034						goto l779
6035					}
6036					position++
6037					goto l778
6038				l779:
6039					position, tokenIndex = position778, tokenIndex778
6040					if buffer[position] != rune('O') {
6041						goto l768
6042					}
6043					position++
6044				}
6045			l778:
6046				if buffer[position] != rune('1') {
6047					goto l768
6048				}
6049				position++
6050				if buffer[position] != rune('2') {
6051					goto l768
6052				}
6053				position++
6054				if buffer[position] != rune(':') {
6055					goto l768
6056				}
6057				position++
6058				if !_rules[ruleSymbolName]() {
6059					goto l768
6060				}
6061				add(ruleARMGOTLow12, position769)
6062			}
6063			return true
6064		l768:
6065			position, tokenIndex = position768, tokenIndex768
6066			return false
6067		},
6068		/* 48 ARMPostincrement <- <'!'> */
6069		func() bool {
6070			position780, tokenIndex780 := position, tokenIndex
6071			{
6072				position781 := position
6073				if buffer[position] != rune('!') {
6074					goto l780
6075				}
6076				position++
6077				add(ruleARMPostincrement, position781)
6078			}
6079			return true
6080		l780:
6081			position, tokenIndex = position780, tokenIndex780
6082			return false
6083		},
6084		/* 49 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
6085		func() bool {
6086			position782, tokenIndex782 := position, tokenIndex
6087			{
6088				position783 := position
6089				if buffer[position] != rune('(') {
6090					goto l782
6091				}
6092				position++
6093				{
6094					position784, tokenIndex784 := position, tokenIndex
6095					if !_rules[ruleRegisterOrConstant]() {
6096						goto l784
6097					}
6098					goto l785
6099				l784:
6100					position, tokenIndex = position784, tokenIndex784
6101				}
6102			l785:
6103				{
6104					position786, tokenIndex786 := position, tokenIndex
6105					if !_rules[ruleWS]() {
6106						goto l786
6107					}
6108					goto l787
6109				l786:
6110					position, tokenIndex = position786, tokenIndex786
6111				}
6112			l787:
6113				{
6114					position788, tokenIndex788 := position, tokenIndex
6115					if buffer[position] != rune(',') {
6116						goto l788
6117					}
6118					position++
6119					{
6120						position790, tokenIndex790 := position, tokenIndex
6121						if !_rules[ruleWS]() {
6122							goto l790
6123						}
6124						goto l791
6125					l790:
6126						position, tokenIndex = position790, tokenIndex790
6127					}
6128				l791:
6129					if !_rules[ruleRegisterOrConstant]() {
6130						goto l788
6131					}
6132					{
6133						position792, tokenIndex792 := position, tokenIndex
6134						if !_rules[ruleWS]() {
6135							goto l792
6136						}
6137						goto l793
6138					l792:
6139						position, tokenIndex = position792, tokenIndex792
6140					}
6141				l793:
6142					{
6143						position794, tokenIndex794 := position, tokenIndex
6144						if buffer[position] != rune(',') {
6145							goto l794
6146						}
6147						position++
6148						if c := buffer[position]; c < rune('0') || c > rune('9') {
6149							goto l794
6150						}
6151						position++
6152					l796:
6153						{
6154							position797, tokenIndex797 := position, tokenIndex
6155							if c := buffer[position]; c < rune('0') || c > rune('9') {
6156								goto l797
6157							}
6158							position++
6159							goto l796
6160						l797:
6161							position, tokenIndex = position797, tokenIndex797
6162						}
6163						goto l795
6164					l794:
6165						position, tokenIndex = position794, tokenIndex794
6166					}
6167				l795:
6168					goto l789
6169				l788:
6170					position, tokenIndex = position788, tokenIndex788
6171				}
6172			l789:
6173				if buffer[position] != rune(')') {
6174					goto l782
6175				}
6176				position++
6177				add(ruleBaseIndexScale, position783)
6178			}
6179			return true
6180		l782:
6181			position, tokenIndex = position782, tokenIndex782
6182			return false
6183		},
6184		/* 50 Operator <- <('+' / '-')> */
6185		func() bool {
6186			position798, tokenIndex798 := position, tokenIndex
6187			{
6188				position799 := position
6189				{
6190					position800, tokenIndex800 := position, tokenIndex
6191					if buffer[position] != rune('+') {
6192						goto l801
6193					}
6194					position++
6195					goto l800
6196				l801:
6197					position, tokenIndex = position800, tokenIndex800
6198					if buffer[position] != rune('-') {
6199						goto l798
6200					}
6201					position++
6202				}
6203			l800:
6204				add(ruleOperator, position799)
6205			}
6206			return true
6207		l798:
6208			position, tokenIndex = position798, tokenIndex798
6209			return false
6210		},
6211		/* 51 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
6212		func() bool {
6213			position802, tokenIndex802 := position, tokenIndex
6214			{
6215				position803 := position
6216				{
6217					position804, tokenIndex804 := position, tokenIndex
6218					if buffer[position] != rune('+') {
6219						goto l804
6220					}
6221					position++
6222					goto l805
6223				l804:
6224					position, tokenIndex = position804, tokenIndex804
6225				}
6226			l805:
6227				{
6228					position806, tokenIndex806 := position, tokenIndex
6229					if buffer[position] != rune('-') {
6230						goto l806
6231					}
6232					position++
6233					goto l807
6234				l806:
6235					position, tokenIndex = position806, tokenIndex806
6236				}
6237			l807:
6238				{
6239					position808, tokenIndex808 := position, tokenIndex
6240					if buffer[position] != rune('0') {
6241						goto l809
6242					}
6243					position++
6244					{
6245						position810, tokenIndex810 := position, tokenIndex
6246						if buffer[position] != rune('b') {
6247							goto l811
6248						}
6249						position++
6250						goto l810
6251					l811:
6252						position, tokenIndex = position810, tokenIndex810
6253						if buffer[position] != rune('B') {
6254							goto l809
6255						}
6256						position++
6257					}
6258				l810:
6259					{
6260						position814, tokenIndex814 := position, tokenIndex
6261						if buffer[position] != rune('0') {
6262							goto l815
6263						}
6264						position++
6265						goto l814
6266					l815:
6267						position, tokenIndex = position814, tokenIndex814
6268						if buffer[position] != rune('1') {
6269							goto l809
6270						}
6271						position++
6272					}
6273				l814:
6274				l812:
6275					{
6276						position813, tokenIndex813 := position, tokenIndex
6277						{
6278							position816, tokenIndex816 := position, tokenIndex
6279							if buffer[position] != rune('0') {
6280								goto l817
6281							}
6282							position++
6283							goto l816
6284						l817:
6285							position, tokenIndex = position816, tokenIndex816
6286							if buffer[position] != rune('1') {
6287								goto l813
6288							}
6289							position++
6290						}
6291					l816:
6292						goto l812
6293					l813:
6294						position, tokenIndex = position813, tokenIndex813
6295					}
6296					goto l808
6297				l809:
6298					position, tokenIndex = position808, tokenIndex808
6299					if buffer[position] != rune('0') {
6300						goto l818
6301					}
6302					position++
6303					{
6304						position819, tokenIndex819 := position, tokenIndex
6305						if buffer[position] != rune('x') {
6306							goto l820
6307						}
6308						position++
6309						goto l819
6310					l820:
6311						position, tokenIndex = position819, tokenIndex819
6312						if buffer[position] != rune('X') {
6313							goto l818
6314						}
6315						position++
6316					}
6317				l819:
6318					{
6319						position823, tokenIndex823 := position, tokenIndex
6320						if c := buffer[position]; c < rune('0') || c > rune('9') {
6321							goto l824
6322						}
6323						position++
6324						goto l823
6325					l824:
6326						position, tokenIndex = position823, tokenIndex823
6327						if c := buffer[position]; c < rune('0') || c > rune('9') {
6328							goto l825
6329						}
6330						position++
6331						goto l823
6332					l825:
6333						position, tokenIndex = position823, tokenIndex823
6334						{
6335							position826, tokenIndex826 := position, tokenIndex
6336							if c := buffer[position]; c < rune('a') || c > rune('f') {
6337								goto l827
6338							}
6339							position++
6340							goto l826
6341						l827:
6342							position, tokenIndex = position826, tokenIndex826
6343							if c := buffer[position]; c < rune('A') || c > rune('F') {
6344								goto l818
6345							}
6346							position++
6347						}
6348					l826:
6349					}
6350				l823:
6351				l821:
6352					{
6353						position822, tokenIndex822 := position, tokenIndex
6354						{
6355							position828, tokenIndex828 := position, tokenIndex
6356							if c := buffer[position]; c < rune('0') || c > rune('9') {
6357								goto l829
6358							}
6359							position++
6360							goto l828
6361						l829:
6362							position, tokenIndex = position828, tokenIndex828
6363							if c := buffer[position]; c < rune('0') || c > rune('9') {
6364								goto l830
6365							}
6366							position++
6367							goto l828
6368						l830:
6369							position, tokenIndex = position828, tokenIndex828
6370							{
6371								position831, tokenIndex831 := position, tokenIndex
6372								if c := buffer[position]; c < rune('a') || c > rune('f') {
6373									goto l832
6374								}
6375								position++
6376								goto l831
6377							l832:
6378								position, tokenIndex = position831, tokenIndex831
6379								if c := buffer[position]; c < rune('A') || c > rune('F') {
6380									goto l822
6381								}
6382								position++
6383							}
6384						l831:
6385						}
6386					l828:
6387						goto l821
6388					l822:
6389						position, tokenIndex = position822, tokenIndex822
6390					}
6391					goto l808
6392				l818:
6393					position, tokenIndex = position808, tokenIndex808
6394					if c := buffer[position]; c < rune('0') || c > rune('9') {
6395						goto l802
6396					}
6397					position++
6398				l833:
6399					{
6400						position834, tokenIndex834 := position, tokenIndex
6401						if c := buffer[position]; c < rune('0') || c > rune('9') {
6402							goto l834
6403						}
6404						position++
6405						goto l833
6406					l834:
6407						position, tokenIndex = position834, tokenIndex834
6408					}
6409				}
6410			l808:
6411				add(ruleOffset, position803)
6412			}
6413			return true
6414		l802:
6415			position, tokenIndex = position802, tokenIndex802
6416			return false
6417		},
6418		/* 52 Section <- <([a-z] / [A-Z] / '@')+> */
6419		func() bool {
6420			position835, tokenIndex835 := position, tokenIndex
6421			{
6422				position836 := position
6423				{
6424					position839, tokenIndex839 := position, tokenIndex
6425					if c := buffer[position]; c < rune('a') || c > rune('z') {
6426						goto l840
6427					}
6428					position++
6429					goto l839
6430				l840:
6431					position, tokenIndex = position839, tokenIndex839
6432					if c := buffer[position]; c < rune('A') || c > rune('Z') {
6433						goto l841
6434					}
6435					position++
6436					goto l839
6437				l841:
6438					position, tokenIndex = position839, tokenIndex839
6439					if buffer[position] != rune('@') {
6440						goto l835
6441					}
6442					position++
6443				}
6444			l839:
6445			l837:
6446				{
6447					position838, tokenIndex838 := position, tokenIndex
6448					{
6449						position842, tokenIndex842 := position, tokenIndex
6450						if c := buffer[position]; c < rune('a') || c > rune('z') {
6451							goto l843
6452						}
6453						position++
6454						goto l842
6455					l843:
6456						position, tokenIndex = position842, tokenIndex842
6457						if c := buffer[position]; c < rune('A') || c > rune('Z') {
6458							goto l844
6459						}
6460						position++
6461						goto l842
6462					l844:
6463						position, tokenIndex = position842, tokenIndex842
6464						if buffer[position] != rune('@') {
6465							goto l838
6466						}
6467						position++
6468					}
6469				l842:
6470					goto l837
6471				l838:
6472					position, tokenIndex = position838, tokenIndex838
6473				}
6474				add(ruleSection, position836)
6475			}
6476			return true
6477		l835:
6478			position, tokenIndex = position835, tokenIndex835
6479			return false
6480		},
6481		/* 53 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
6482		func() bool {
6483			position845, tokenIndex845 := position, tokenIndex
6484			{
6485				position846 := position
6486				if buffer[position] != rune('%') {
6487					goto l845
6488				}
6489				position++
6490				{
6491					position847, tokenIndex847 := position, tokenIndex
6492					if c := buffer[position]; c < rune('c') || c > rune('g') {
6493						goto l848
6494					}
6495					position++
6496					goto l847
6497				l848:
6498					position, tokenIndex = position847, tokenIndex847
6499					if buffer[position] != rune('s') {
6500						goto l845
6501					}
6502					position++
6503				}
6504			l847:
6505				if buffer[position] != rune('s') {
6506					goto l845
6507				}
6508				position++
6509				if buffer[position] != rune(':') {
6510					goto l845
6511				}
6512				position++
6513				add(ruleSegmentRegister, position846)
6514			}
6515			return true
6516		l845:
6517			position, tokenIndex = position845, tokenIndex845
6518			return false
6519		},
6520	}
6521	p.rules = _rules
6522	return nil
6523}
6524