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