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