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