boringssl/util/fipstools/delocate/delocate.peg.go
Adam Langley b018908475 Better handle AVX-512 assembly syntax.
https://boringssl-review.googlesource.com/c/boringssl/+/24945 was mistaken in
that it thought that these AVX-512 assembly extensions were an
instruction-level thing, whereas they actually appear to be an argument-level
modifier.

This change parses them as such and unbreaks some AVX-512 instructions that can
be emitted by compilers with certain combinations of flags.

Change-Id: I9af5a4fec21f55d3198a248c9175252e229c355a
Reviewed-on: https://boringssl-review.googlesource.com/c/32484
Commit-Queue: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
2018-10-15 23:31:23 +00:00

4065 lines
90 KiB
Go

package main
//go:generate peg delocate.peg
import (
"fmt"
"math"
"sort"
"strconv"
)
const endSymbol rune = 1114112
/* The rule types inferred from the grammar are below. */
type pegRule uint8
const (
ruleUnknown pegRule = iota
ruleAsmFile
ruleStatement
ruleGlobalDirective
ruleDirective
ruleDirectiveName
ruleLocationDirective
ruleArgs
ruleArg
ruleQuotedArg
ruleQuotedText
ruleLabelContainingDirective
ruleLabelContainingDirectiveName
ruleSymbolArgs
ruleSymbolArg
ruleSymbolType
ruleDot
ruleTCMarker
ruleEscapedChar
ruleWS
ruleComment
ruleLabel
ruleSymbolName
ruleLocalSymbol
ruleLocalLabel
ruleLocalLabelRef
ruleInstruction
ruleInstructionName
ruleInstructionArg
ruleAVX512Token
ruleTOCRefHigh
ruleTOCRefLow
ruleIndirectionIndicator
ruleRegisterOrConstant
ruleMemoryRef
ruleSymbolRef
ruleBaseIndexScale
ruleOperator
ruleOffset
ruleSection
ruleSegmentRegister
)
var rul3s = [...]string{
"Unknown",
"AsmFile",
"Statement",
"GlobalDirective",
"Directive",
"DirectiveName",
"LocationDirective",
"Args",
"Arg",
"QuotedArg",
"QuotedText",
"LabelContainingDirective",
"LabelContainingDirectiveName",
"SymbolArgs",
"SymbolArg",
"SymbolType",
"Dot",
"TCMarker",
"EscapedChar",
"WS",
"Comment",
"Label",
"SymbolName",
"LocalSymbol",
"LocalLabel",
"LocalLabelRef",
"Instruction",
"InstructionName",
"InstructionArg",
"AVX512Token",
"TOCRefHigh",
"TOCRefLow",
"IndirectionIndicator",
"RegisterOrConstant",
"MemoryRef",
"SymbolRef",
"BaseIndexScale",
"Operator",
"Offset",
"Section",
"SegmentRegister",
}
type token32 struct {
pegRule
begin, end uint32
}
func (t *token32) String() string {
return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
}
type node32 struct {
token32
up, next *node32
}
func (node *node32) print(pretty bool, buffer string) {
var print func(node *node32, depth int)
print = func(node *node32, depth int) {
for node != nil {
for c := 0; c < depth; c++ {
fmt.Printf(" ")
}
rule := rul3s[node.pegRule]
quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
if !pretty {
fmt.Printf("%v %v\n", rule, quote)
} else {
fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
}
if node.up != nil {
print(node.up, depth+1)
}
node = node.next
}
}
print(node, 0)
}
func (node *node32) Print(buffer string) {
node.print(false, buffer)
}
func (node *node32) PrettyPrint(buffer string) {
node.print(true, buffer)
}
type tokens32 struct {
tree []token32
}
func (t *tokens32) Trim(length uint32) {
t.tree = t.tree[:length]
}
func (t *tokens32) Print() {
for _, token := range t.tree {
fmt.Println(token.String())
}
}
func (t *tokens32) AST() *node32 {
type element struct {
node *node32
down *element
}
tokens := t.Tokens()
var stack *element
for _, token := range tokens {
if token.begin == token.end {
continue
}
node := &node32{token32: token}
for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
stack.node.next = node.up
node.up = stack.node
stack = stack.down
}
stack = &element{node: node, down: stack}
}
if stack != nil {
return stack.node
}
return nil
}
func (t *tokens32) PrintSyntaxTree(buffer string) {
t.AST().Print(buffer)
}
func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
t.AST().PrettyPrint(buffer)
}
func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
if tree := t.tree; int(index) >= len(tree) {
expanded := make([]token32, 2*len(tree))
copy(expanded, tree)
t.tree = expanded
}
t.tree[index] = token32{
pegRule: rule,
begin: begin,
end: end,
}
}
func (t *tokens32) Tokens() []token32 {
return t.tree
}
type Asm struct {
Buffer string
buffer []rune
rules [41]func() bool
parse func(rule ...int) error
reset func()
Pretty bool
tokens32
}
func (p *Asm) Parse(rule ...int) error {
return p.parse(rule...)
}
func (p *Asm) Reset() {
p.reset()
}
type textPosition struct {
line, symbol int
}
type textPositionMap map[int]textPosition
func translatePositions(buffer []rune, positions []int) textPositionMap {
length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
sort.Ints(positions)
search:
for i, c := range buffer {
if c == '\n' {
line, symbol = line+1, 0
} else {
symbol++
}
if i == positions[j] {
translations[positions[j]] = textPosition{line, symbol}
for j++; j < length; j++ {
if i != positions[j] {
continue search
}
}
break search
}
}
return translations
}
type parseError struct {
p *Asm
max token32
}
func (e *parseError) Error() string {
tokens, error := []token32{e.max}, "\n"
positions, p := make([]int, 2*len(tokens)), 0
for _, token := range tokens {
positions[p], p = int(token.begin), p+1
positions[p], p = int(token.end), p+1
}
translations := translatePositions(e.p.buffer, positions)
format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
if e.p.Pretty {
format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
}
for _, token := range tokens {
begin, end := int(token.begin), int(token.end)
error += fmt.Sprintf(format,
rul3s[token.pegRule],
translations[begin].line, translations[begin].symbol,
translations[end].line, translations[end].symbol,
strconv.Quote(string(e.p.buffer[begin:end])))
}
return error
}
func (p *Asm) PrintSyntaxTree() {
if p.Pretty {
p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
} else {
p.tokens32.PrintSyntaxTree(p.Buffer)
}
}
func (p *Asm) Init() {
var (
max token32
position, tokenIndex uint32
buffer []rune
)
p.reset = func() {
max = token32{}
position, tokenIndex = 0, 0
p.buffer = []rune(p.Buffer)
if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
p.buffer = append(p.buffer, endSymbol)
}
buffer = p.buffer
}
p.reset()
_rules := p.rules
tree := tokens32{tree: make([]token32, math.MaxInt16)}
p.parse = func(rule ...int) error {
r := 1
if len(rule) > 0 {
r = rule[0]
}
matches := p.rules[r]()
p.tokens32 = tree
if matches {
p.Trim(tokenIndex)
return nil
}
return &parseError{p, max}
}
add := func(rule pegRule, begin uint32) {
tree.Add(rule, begin, position, tokenIndex)
tokenIndex++
if begin != position && position > max.end {
max = token32{rule, begin, position}
}
}
matchDot := func() bool {
if buffer[position] != endSymbol {
position++
return true
}
return false
}
/*matchChar := func(c byte) bool {
if buffer[position] == c {
position++
return true
}
return false
}*/
/*matchRange := func(lower byte, upper byte) bool {
if c := buffer[position]; c >= lower && c <= upper {
position++
return true
}
return false
}*/
_rules = [...]func() bool{
nil,
/* 0 AsmFile <- <(Statement* !.)> */
func() bool {
position0, tokenIndex0 := position, tokenIndex
{
position1 := position
l2:
{
position3, tokenIndex3 := position, tokenIndex
if !_rules[ruleStatement]() {
goto l3
}
goto l2
l3:
position, tokenIndex = position3, tokenIndex3
}
{
position4, tokenIndex4 := position, tokenIndex
if !matchDot() {
goto l4
}
goto l0
l4:
position, tokenIndex = position4, tokenIndex4
}
add(ruleAsmFile, position1)
}
return true
l0:
position, tokenIndex = position0, tokenIndex0
return false
},
/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
func() bool {
position5, tokenIndex5 := position, tokenIndex
{
position6 := position
{
position7, tokenIndex7 := position, tokenIndex
if !_rules[ruleWS]() {
goto l7
}
goto l8
l7:
position, tokenIndex = position7, tokenIndex7
}
l8:
{
position9, tokenIndex9 := position, tokenIndex
if !_rules[ruleLabel]() {
goto l10
}
goto l9
l10:
position, tokenIndex = position9, tokenIndex9
{
position11, tokenIndex11 := position, tokenIndex
if !_rules[ruleGlobalDirective]() {
goto l12
}
goto l11
l12:
position, tokenIndex = position11, tokenIndex11
if !_rules[ruleLocationDirective]() {
goto l13
}
goto l11
l13:
position, tokenIndex = position11, tokenIndex11
if !_rules[ruleLabelContainingDirective]() {
goto l14
}
goto l11
l14:
position, tokenIndex = position11, tokenIndex11
if !_rules[ruleInstruction]() {
goto l15
}
goto l11
l15:
position, tokenIndex = position11, tokenIndex11
if !_rules[ruleDirective]() {
goto l16
}
goto l11
l16:
position, tokenIndex = position11, tokenIndex11
if !_rules[ruleComment]() {
goto l17
}
goto l11
l17:
position, tokenIndex = position11, tokenIndex11
}
l11:
{
position18, tokenIndex18 := position, tokenIndex
if !_rules[ruleWS]() {
goto l18
}
goto l19
l18:
position, tokenIndex = position18, tokenIndex18
}
l19:
{
position20, tokenIndex20 := position, tokenIndex
{
position22, tokenIndex22 := position, tokenIndex
if !_rules[ruleComment]() {
goto l22
}
goto l23
l22:
position, tokenIndex = position22, tokenIndex22
}
l23:
if buffer[position] != rune('\n') {
goto l21
}
position++
goto l20
l21:
position, tokenIndex = position20, tokenIndex20
if buffer[position] != rune(';') {
goto l5
}
position++
}
l20:
}
l9:
add(ruleStatement, position6)
}
return true
l5:
position, tokenIndex = position5, tokenIndex5
return false
},
/* 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)> */
func() bool {
position24, tokenIndex24 := position, tokenIndex
{
position25 := position
{
position26, tokenIndex26 := position, tokenIndex
if buffer[position] != rune('.') {
goto l27
}
position++
{
position28, tokenIndex28 := position, tokenIndex
if buffer[position] != rune('g') {
goto l29
}
position++
goto l28
l29:
position, tokenIndex = position28, tokenIndex28
if buffer[position] != rune('G') {
goto l27
}
position++
}
l28:
{
position30, tokenIndex30 := position, tokenIndex
if buffer[position] != rune('l') {
goto l31
}
position++
goto l30
l31:
position, tokenIndex = position30, tokenIndex30
if buffer[position] != rune('L') {
goto l27
}
position++
}
l30:
{
position32, tokenIndex32 := position, tokenIndex
if buffer[position] != rune('o') {
goto l33
}
position++
goto l32
l33:
position, tokenIndex = position32, tokenIndex32
if buffer[position] != rune('O') {
goto l27
}
position++
}
l32:
{
position34, tokenIndex34 := position, tokenIndex
if buffer[position] != rune('b') {
goto l35
}
position++
goto l34
l35:
position, tokenIndex = position34, tokenIndex34
if buffer[position] != rune('B') {
goto l27
}
position++
}
l34:
{
position36, tokenIndex36 := position, tokenIndex
if buffer[position] != rune('a') {
goto l37
}
position++
goto l36
l37:
position, tokenIndex = position36, tokenIndex36
if buffer[position] != rune('A') {
goto l27
}
position++
}
l36:
{
position38, tokenIndex38 := position, tokenIndex
if buffer[position] != rune('l') {
goto l39
}
position++
goto l38
l39:
position, tokenIndex = position38, tokenIndex38
if buffer[position] != rune('L') {
goto l27
}
position++
}
l38:
goto l26
l27:
position, tokenIndex = position26, tokenIndex26
if buffer[position] != rune('.') {
goto l24
}
position++
{
position40, tokenIndex40 := position, tokenIndex
if buffer[position] != rune('g') {
goto l41
}
position++
goto l40
l41:
position, tokenIndex = position40, tokenIndex40
if buffer[position] != rune('G') {
goto l24
}
position++
}
l40:
{
position42, tokenIndex42 := position, tokenIndex
if buffer[position] != rune('l') {
goto l43
}
position++
goto l42
l43:
position, tokenIndex = position42, tokenIndex42
if buffer[position] != rune('L') {
goto l24
}
position++
}
l42:
{
position44, tokenIndex44 := position, tokenIndex
if buffer[position] != rune('o') {
goto l45
}
position++
goto l44
l45:
position, tokenIndex = position44, tokenIndex44
if buffer[position] != rune('O') {
goto l24
}
position++
}
l44:
{
position46, tokenIndex46 := position, tokenIndex
if buffer[position] != rune('b') {
goto l47
}
position++
goto l46
l47:
position, tokenIndex = position46, tokenIndex46
if buffer[position] != rune('B') {
goto l24
}
position++
}
l46:
{
position48, tokenIndex48 := position, tokenIndex
if buffer[position] != rune('l') {
goto l49
}
position++
goto l48
l49:
position, tokenIndex = position48, tokenIndex48
if buffer[position] != rune('L') {
goto l24
}
position++
}
l48:
}
l26:
if !_rules[ruleWS]() {
goto l24
}
if !_rules[ruleSymbolName]() {
goto l24
}
add(ruleGlobalDirective, position25)
}
return true
l24:
position, tokenIndex = position24, tokenIndex24
return false
},
/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
func() bool {
position50, tokenIndex50 := position, tokenIndex
{
position51 := position
if buffer[position] != rune('.') {
goto l50
}
position++
if !_rules[ruleDirectiveName]() {
goto l50
}
{
position52, tokenIndex52 := position, tokenIndex
if !_rules[ruleWS]() {
goto l52
}
if !_rules[ruleArgs]() {
goto l52
}
goto l53
l52:
position, tokenIndex = position52, tokenIndex52
}
l53:
add(ruleDirective, position51)
}
return true
l50:
position, tokenIndex = position50, tokenIndex50
return false
},
/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
func() bool {
position54, tokenIndex54 := position, tokenIndex
{
position55 := position
{
position58, tokenIndex58 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l59
}
position++
goto l58
l59:
position, tokenIndex = position58, tokenIndex58
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l60
}
position++
goto l58
l60:
position, tokenIndex = position58, tokenIndex58
{
position62, tokenIndex62 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l63
}
position++
goto l62
l63:
position, tokenIndex = position62, tokenIndex62
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l61
}
position++
}
l62:
goto l58
l61:
position, tokenIndex = position58, tokenIndex58
if buffer[position] != rune('_') {
goto l54
}
position++
}
l58:
l56:
{
position57, tokenIndex57 := position, tokenIndex
{
position64, tokenIndex64 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l65
}
position++
goto l64
l65:
position, tokenIndex = position64, tokenIndex64
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l66
}
position++
goto l64
l66:
position, tokenIndex = position64, tokenIndex64
{
position68, tokenIndex68 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l69
}
position++
goto l68
l69:
position, tokenIndex = position68, tokenIndex68
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l67
}
position++
}
l68:
goto l64
l67:
position, tokenIndex = position64, tokenIndex64
if buffer[position] != rune('_') {
goto l57
}
position++
}
l64:
goto l56
l57:
position, tokenIndex = position57, tokenIndex57
}
add(ruleDirectiveName, position55)
}
return true
l54:
position, tokenIndex = position54, tokenIndex54
return false
},
/* 5 LocationDirective <- <((('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C'))) WS (!('#' / '\n') .)+)> */
func() bool {
position70, tokenIndex70 := position, tokenIndex
{
position71 := position
{
position72, tokenIndex72 := position, tokenIndex
if buffer[position] != rune('.') {
goto l73
}
position++
{
position74, tokenIndex74 := position, tokenIndex
if buffer[position] != rune('f') {
goto l75
}
position++
goto l74
l75:
position, tokenIndex = position74, tokenIndex74
if buffer[position] != rune('F') {
goto l73
}
position++
}
l74:
{
position76, tokenIndex76 := position, tokenIndex
if buffer[position] != rune('i') {
goto l77
}
position++
goto l76
l77:
position, tokenIndex = position76, tokenIndex76
if buffer[position] != rune('I') {
goto l73
}
position++
}
l76:
{
position78, tokenIndex78 := position, tokenIndex
if buffer[position] != rune('l') {
goto l79
}
position++
goto l78
l79:
position, tokenIndex = position78, tokenIndex78
if buffer[position] != rune('L') {
goto l73
}
position++
}
l78:
{
position80, tokenIndex80 := position, tokenIndex
if buffer[position] != rune('e') {
goto l81
}
position++
goto l80
l81:
position, tokenIndex = position80, tokenIndex80
if buffer[position] != rune('E') {
goto l73
}
position++
}
l80:
goto l72
l73:
position, tokenIndex = position72, tokenIndex72
if buffer[position] != rune('.') {
goto l70
}
position++
{
position82, tokenIndex82 := position, tokenIndex
if buffer[position] != rune('l') {
goto l83
}
position++
goto l82
l83:
position, tokenIndex = position82, tokenIndex82
if buffer[position] != rune('L') {
goto l70
}
position++
}
l82:
{
position84, tokenIndex84 := position, tokenIndex
if buffer[position] != rune('o') {
goto l85
}
position++
goto l84
l85:
position, tokenIndex = position84, tokenIndex84
if buffer[position] != rune('O') {
goto l70
}
position++
}
l84:
{
position86, tokenIndex86 := position, tokenIndex
if buffer[position] != rune('c') {
goto l87
}
position++
goto l86
l87:
position, tokenIndex = position86, tokenIndex86
if buffer[position] != rune('C') {
goto l70
}
position++
}
l86:
}
l72:
if !_rules[ruleWS]() {
goto l70
}
{
position90, tokenIndex90 := position, tokenIndex
{
position91, tokenIndex91 := position, tokenIndex
if buffer[position] != rune('#') {
goto l92
}
position++
goto l91
l92:
position, tokenIndex = position91, tokenIndex91
if buffer[position] != rune('\n') {
goto l90
}
position++
}
l91:
goto l70
l90:
position, tokenIndex = position90, tokenIndex90
}
if !matchDot() {
goto l70
}
l88:
{
position89, tokenIndex89 := position, tokenIndex
{
position93, tokenIndex93 := position, tokenIndex
{
position94, tokenIndex94 := position, tokenIndex
if buffer[position] != rune('#') {
goto l95
}
position++
goto l94
l95:
position, tokenIndex = position94, tokenIndex94
if buffer[position] != rune('\n') {
goto l93
}
position++
}
l94:
goto l89
l93:
position, tokenIndex = position93, tokenIndex93
}
if !matchDot() {
goto l89
}
goto l88
l89:
position, tokenIndex = position89, tokenIndex89
}
add(ruleLocationDirective, position71)
}
return true
l70:
position, tokenIndex = position70, tokenIndex70
return false
},
/* 6 Args <- <(Arg (WS? ',' WS? Arg)*)> */
func() bool {
position96, tokenIndex96 := position, tokenIndex
{
position97 := position
if !_rules[ruleArg]() {
goto l96
}
l98:
{
position99, tokenIndex99 := position, tokenIndex
{
position100, tokenIndex100 := position, tokenIndex
if !_rules[ruleWS]() {
goto l100
}
goto l101
l100:
position, tokenIndex = position100, tokenIndex100
}
l101:
if buffer[position] != rune(',') {
goto l99
}
position++
{
position102, tokenIndex102 := position, tokenIndex
if !_rules[ruleWS]() {
goto l102
}
goto l103
l102:
position, tokenIndex = position102, tokenIndex102
}
l103:
if !_rules[ruleArg]() {
goto l99
}
goto l98
l99:
position, tokenIndex = position99, tokenIndex99
}
add(ruleArgs, position97)
}
return true
l96:
position, tokenIndex = position96, tokenIndex96
return false
},
/* 7 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
func() bool {
{
position105 := position
{
position106, tokenIndex106 := position, tokenIndex
if !_rules[ruleQuotedArg]() {
goto l107
}
goto l106
l107:
position, tokenIndex = position106, tokenIndex106
l108:
{
position109, tokenIndex109 := position, tokenIndex
{
position110, tokenIndex110 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l111
}
position++
goto l110
l111:
position, tokenIndex = position110, tokenIndex110
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l112
}
position++
goto l110
l112:
position, tokenIndex = position110, tokenIndex110
{
position114, tokenIndex114 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l115
}
position++
goto l114
l115:
position, tokenIndex = position114, tokenIndex114
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l113
}
position++
}
l114:
goto l110
l113:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('%') {
goto l116
}
position++
goto l110
l116:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('+') {
goto l117
}
position++
goto l110
l117:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('-') {
goto l118
}
position++
goto l110
l118:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('*') {
goto l119
}
position++
goto l110
l119:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('_') {
goto l120
}
position++
goto l110
l120:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('@') {
goto l121
}
position++
goto l110
l121:
position, tokenIndex = position110, tokenIndex110
if buffer[position] != rune('.') {
goto l109
}
position++
}
l110:
goto l108
l109:
position, tokenIndex = position109, tokenIndex109
}
}
l106:
add(ruleArg, position105)
}
return true
},
/* 8 QuotedArg <- <('"' QuotedText '"')> */
func() bool {
position122, tokenIndex122 := position, tokenIndex
{
position123 := position
if buffer[position] != rune('"') {
goto l122
}
position++
if !_rules[ruleQuotedText]() {
goto l122
}
if buffer[position] != rune('"') {
goto l122
}
position++
add(ruleQuotedArg, position123)
}
return true
l122:
position, tokenIndex = position122, tokenIndex122
return false
},
/* 9 QuotedText <- <(EscapedChar / (!'"' .))*> */
func() bool {
{
position125 := position
l126:
{
position127, tokenIndex127 := position, tokenIndex
{
position128, tokenIndex128 := position, tokenIndex
if !_rules[ruleEscapedChar]() {
goto l129
}
goto l128
l129:
position, tokenIndex = position128, tokenIndex128
{
position130, tokenIndex130 := position, tokenIndex
if buffer[position] != rune('"') {
goto l130
}
position++
goto l127
l130:
position, tokenIndex = position130, tokenIndex130
}
if !matchDot() {
goto l127
}
}
l128:
goto l126
l127:
position, tokenIndex = position127, tokenIndex127
}
add(ruleQuotedText, position125)
}
return true
},
/* 10 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
func() bool {
position131, tokenIndex131 := position, tokenIndex
{
position132 := position
if !_rules[ruleLabelContainingDirectiveName]() {
goto l131
}
if !_rules[ruleWS]() {
goto l131
}
if !_rules[ruleSymbolArgs]() {
goto l131
}
add(ruleLabelContainingDirective, position132)
}
return true
l131:
position, tokenIndex = position131, tokenIndex131
return false
},
/* 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')))> */
func() bool {
position133, tokenIndex133 := position, tokenIndex
{
position134 := position
{
position135, tokenIndex135 := position, tokenIndex
if buffer[position] != rune('.') {
goto l136
}
position++
{
position137, tokenIndex137 := position, tokenIndex
if buffer[position] != rune('l') {
goto l138
}
position++
goto l137
l138:
position, tokenIndex = position137, tokenIndex137
if buffer[position] != rune('L') {
goto l136
}
position++
}
l137:
{
position139, tokenIndex139 := position, tokenIndex
if buffer[position] != rune('o') {
goto l140
}
position++
goto l139
l140:
position, tokenIndex = position139, tokenIndex139
if buffer[position] != rune('O') {
goto l136
}
position++
}
l139:
{
position141, tokenIndex141 := position, tokenIndex
if buffer[position] != rune('n') {
goto l142
}
position++
goto l141
l142:
position, tokenIndex = position141, tokenIndex141
if buffer[position] != rune('N') {
goto l136
}
position++
}
l141:
{
position143, tokenIndex143 := position, tokenIndex
if buffer[position] != rune('g') {
goto l144
}
position++
goto l143
l144:
position, tokenIndex = position143, tokenIndex143
if buffer[position] != rune('G') {
goto l136
}
position++
}
l143:
goto l135
l136:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l145
}
position++
{
position146, tokenIndex146 := position, tokenIndex
if buffer[position] != rune('s') {
goto l147
}
position++
goto l146
l147:
position, tokenIndex = position146, tokenIndex146
if buffer[position] != rune('S') {
goto l145
}
position++
}
l146:
{
position148, tokenIndex148 := position, tokenIndex
if buffer[position] != rune('e') {
goto l149
}
position++
goto l148
l149:
position, tokenIndex = position148, tokenIndex148
if buffer[position] != rune('E') {
goto l145
}
position++
}
l148:
{
position150, tokenIndex150 := position, tokenIndex
if buffer[position] != rune('t') {
goto l151
}
position++
goto l150
l151:
position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('T') {
goto l145
}
position++
}
l150:
goto l135
l145:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l152
}
position++
if buffer[position] != rune('8') {
goto l152
}
position++
{
position153, tokenIndex153 := position, tokenIndex
if buffer[position] != rune('b') {
goto l154
}
position++
goto l153
l154:
position, tokenIndex = position153, tokenIndex153
if buffer[position] != rune('B') {
goto l152
}
position++
}
l153:
{
position155, tokenIndex155 := position, tokenIndex
if buffer[position] != rune('y') {
goto l156
}
position++
goto l155
l156:
position, tokenIndex = position155, tokenIndex155
if buffer[position] != rune('Y') {
goto l152
}
position++
}
l155:
{
position157, tokenIndex157 := position, tokenIndex
if buffer[position] != rune('t') {
goto l158
}
position++
goto l157
l158:
position, tokenIndex = position157, tokenIndex157
if buffer[position] != rune('T') {
goto l152
}
position++
}
l157:
{
position159, tokenIndex159 := position, tokenIndex
if buffer[position] != rune('e') {
goto l160
}
position++
goto l159
l160:
position, tokenIndex = position159, tokenIndex159
if buffer[position] != rune('E') {
goto l152
}
position++
}
l159:
goto l135
l152:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l161
}
position++
if buffer[position] != rune('4') {
goto l161
}
position++
{
position162, tokenIndex162 := position, tokenIndex
if buffer[position] != rune('b') {
goto l163
}
position++
goto l162
l163:
position, tokenIndex = position162, tokenIndex162
if buffer[position] != rune('B') {
goto l161
}
position++
}
l162:
{
position164, tokenIndex164 := position, tokenIndex
if buffer[position] != rune('y') {
goto l165
}
position++
goto l164
l165:
position, tokenIndex = position164, tokenIndex164
if buffer[position] != rune('Y') {
goto l161
}
position++
}
l164:
{
position166, tokenIndex166 := position, tokenIndex
if buffer[position] != rune('t') {
goto l167
}
position++
goto l166
l167:
position, tokenIndex = position166, tokenIndex166
if buffer[position] != rune('T') {
goto l161
}
position++
}
l166:
{
position168, tokenIndex168 := position, tokenIndex
if buffer[position] != rune('e') {
goto l169
}
position++
goto l168
l169:
position, tokenIndex = position168, tokenIndex168
if buffer[position] != rune('E') {
goto l161
}
position++
}
l168:
goto l135
l161:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l170
}
position++
{
position171, tokenIndex171 := position, tokenIndex
if buffer[position] != rune('q') {
goto l172
}
position++
goto l171
l172:
position, tokenIndex = position171, tokenIndex171
if buffer[position] != rune('Q') {
goto l170
}
position++
}
l171:
{
position173, tokenIndex173 := position, tokenIndex
if buffer[position] != rune('u') {
goto l174
}
position++
goto l173
l174:
position, tokenIndex = position173, tokenIndex173
if buffer[position] != rune('U') {
goto l170
}
position++
}
l173:
{
position175, tokenIndex175 := position, tokenIndex
if buffer[position] != rune('a') {
goto l176
}
position++
goto l175
l176:
position, tokenIndex = position175, tokenIndex175
if buffer[position] != rune('A') {
goto l170
}
position++
}
l175:
{
position177, tokenIndex177 := position, tokenIndex
if buffer[position] != rune('d') {
goto l178
}
position++
goto l177
l178:
position, tokenIndex = position177, tokenIndex177
if buffer[position] != rune('D') {
goto l170
}
position++
}
l177:
goto l135
l170:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l179
}
position++
{
position180, tokenIndex180 := position, tokenIndex
if buffer[position] != rune('t') {
goto l181
}
position++
goto l180
l181:
position, tokenIndex = position180, tokenIndex180
if buffer[position] != rune('T') {
goto l179
}
position++
}
l180:
{
position182, tokenIndex182 := position, tokenIndex
if buffer[position] != rune('c') {
goto l183
}
position++
goto l182
l183:
position, tokenIndex = position182, tokenIndex182
if buffer[position] != rune('C') {
goto l179
}
position++
}
l182:
goto l135
l179:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l184
}
position++
{
position185, tokenIndex185 := position, tokenIndex
if buffer[position] != rune('l') {
goto l186
}
position++
goto l185
l186:
position, tokenIndex = position185, tokenIndex185
if buffer[position] != rune('L') {
goto l184
}
position++
}
l185:
{
position187, tokenIndex187 := position, tokenIndex
if buffer[position] != rune('o') {
goto l188
}
position++
goto l187
l188:
position, tokenIndex = position187, tokenIndex187
if buffer[position] != rune('O') {
goto l184
}
position++
}
l187:
{
position189, tokenIndex189 := position, tokenIndex
if buffer[position] != rune('c') {
goto l190
}
position++
goto l189
l190:
position, tokenIndex = position189, tokenIndex189
if buffer[position] != rune('C') {
goto l184
}
position++
}
l189:
{
position191, tokenIndex191 := position, tokenIndex
if buffer[position] != rune('a') {
goto l192
}
position++
goto l191
l192:
position, tokenIndex = position191, tokenIndex191
if buffer[position] != rune('A') {
goto l184
}
position++
}
l191:
{
position193, tokenIndex193 := position, tokenIndex
if buffer[position] != rune('l') {
goto l194
}
position++
goto l193
l194:
position, tokenIndex = position193, tokenIndex193
if buffer[position] != rune('L') {
goto l184
}
position++
}
l193:
{
position195, tokenIndex195 := position, tokenIndex
if buffer[position] != rune('e') {
goto l196
}
position++
goto l195
l196:
position, tokenIndex = position195, tokenIndex195
if buffer[position] != rune('E') {
goto l184
}
position++
}
l195:
{
position197, tokenIndex197 := position, tokenIndex
if buffer[position] != rune('n') {
goto l198
}
position++
goto l197
l198:
position, tokenIndex = position197, tokenIndex197
if buffer[position] != rune('N') {
goto l184
}
position++
}
l197:
{
position199, tokenIndex199 := position, tokenIndex
if buffer[position] != rune('t') {
goto l200
}
position++
goto l199
l200:
position, tokenIndex = position199, tokenIndex199
if buffer[position] != rune('T') {
goto l184
}
position++
}
l199:
{
position201, tokenIndex201 := position, tokenIndex
if buffer[position] != rune('r') {
goto l202
}
position++
goto l201
l202:
position, tokenIndex = position201, tokenIndex201
if buffer[position] != rune('R') {
goto l184
}
position++
}
l201:
{
position203, tokenIndex203 := position, tokenIndex
if buffer[position] != rune('y') {
goto l204
}
position++
goto l203
l204:
position, tokenIndex = position203, tokenIndex203
if buffer[position] != rune('Y') {
goto l184
}
position++
}
l203:
goto l135
l184:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l205
}
position++
{
position206, tokenIndex206 := position, tokenIndex
if buffer[position] != rune('s') {
goto l207
}
position++
goto l206
l207:
position, tokenIndex = position206, tokenIndex206
if buffer[position] != rune('S') {
goto l205
}
position++
}
l206:
{
position208, tokenIndex208 := position, tokenIndex
if buffer[position] != rune('i') {
goto l209
}
position++
goto l208
l209:
position, tokenIndex = position208, tokenIndex208
if buffer[position] != rune('I') {
goto l205
}
position++
}
l208:
{
position210, tokenIndex210 := position, tokenIndex
if buffer[position] != rune('z') {
goto l211
}
position++
goto l210
l211:
position, tokenIndex = position210, tokenIndex210
if buffer[position] != rune('Z') {
goto l205
}
position++
}
l210:
{
position212, tokenIndex212 := position, tokenIndex
if buffer[position] != rune('e') {
goto l213
}
position++
goto l212
l213:
position, tokenIndex = position212, tokenIndex212
if buffer[position] != rune('E') {
goto l205
}
position++
}
l212:
goto l135
l205:
position, tokenIndex = position135, tokenIndex135
if buffer[position] != rune('.') {
goto l133
}
position++
{
position214, tokenIndex214 := position, tokenIndex
if buffer[position] != rune('t') {
goto l215
}
position++
goto l214
l215:
position, tokenIndex = position214, tokenIndex214
if buffer[position] != rune('T') {
goto l133
}
position++
}
l214:
{
position216, tokenIndex216 := position, tokenIndex
if buffer[position] != rune('y') {
goto l217
}
position++
goto l216
l217:
position, tokenIndex = position216, tokenIndex216
if buffer[position] != rune('Y') {
goto l133
}
position++
}
l216:
{
position218, tokenIndex218 := position, tokenIndex
if buffer[position] != rune('p') {
goto l219
}
position++
goto l218
l219:
position, tokenIndex = position218, tokenIndex218
if buffer[position] != rune('P') {
goto l133
}
position++
}
l218:
{
position220, tokenIndex220 := position, tokenIndex
if buffer[position] != rune('e') {
goto l221
}
position++
goto l220
l221:
position, tokenIndex = position220, tokenIndex220
if buffer[position] != rune('E') {
goto l133
}
position++
}
l220:
}
l135:
add(ruleLabelContainingDirectiveName, position134)
}
return true
l133:
position, tokenIndex = position133, tokenIndex133
return false
},
/* 12 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
func() bool {
position222, tokenIndex222 := position, tokenIndex
{
position223 := position
if !_rules[ruleSymbolArg]() {
goto l222
}
l224:
{
position225, tokenIndex225 := position, tokenIndex
{
position226, tokenIndex226 := position, tokenIndex
if !_rules[ruleWS]() {
goto l226
}
goto l227
l226:
position, tokenIndex = position226, tokenIndex226
}
l227:
if buffer[position] != rune(',') {
goto l225
}
position++
{
position228, tokenIndex228 := position, tokenIndex
if !_rules[ruleWS]() {
goto l228
}
goto l229
l228:
position, tokenIndex = position228, tokenIndex228
}
l229:
if !_rules[ruleSymbolArg]() {
goto l225
}
goto l224
l225:
position, tokenIndex = position225, tokenIndex225
}
add(ruleSymbolArgs, position223)
}
return true
l222:
position, tokenIndex = position222, tokenIndex222
return false
},
/* 13 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
func() bool {
position230, tokenIndex230 := position, tokenIndex
{
position231 := position
{
position232, tokenIndex232 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l233
}
goto l232
l233:
position, tokenIndex = position232, tokenIndex232
if !_rules[ruleSymbolType]() {
goto l234
}
goto l232
l234:
position, tokenIndex = position232, tokenIndex232
{
position236, tokenIndex236 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l237
}
goto l236
l237:
position, tokenIndex = position236, tokenIndex236
if !_rules[ruleLocalSymbol]() {
goto l238
}
goto l236
l238:
position, tokenIndex = position236, tokenIndex236
if !_rules[ruleSymbolName]() {
goto l239
}
goto l236
l239:
position, tokenIndex = position236, tokenIndex236
if !_rules[ruleDot]() {
goto l235
}
}
l236:
{
position240, tokenIndex240 := position, tokenIndex
if !_rules[ruleWS]() {
goto l240
}
goto l241
l240:
position, tokenIndex = position240, tokenIndex240
}
l241:
if !_rules[ruleOperator]() {
goto l235
}
{
position242, tokenIndex242 := position, tokenIndex
if !_rules[ruleWS]() {
goto l242
}
goto l243
l242:
position, tokenIndex = position242, tokenIndex242
}
l243:
{
position244, tokenIndex244 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l245
}
goto l244
l245:
position, tokenIndex = position244, tokenIndex244
if !_rules[ruleLocalSymbol]() {
goto l246
}
goto l244
l246:
position, tokenIndex = position244, tokenIndex244
if !_rules[ruleSymbolName]() {
goto l235
}
}
l244:
goto l232
l235:
position, tokenIndex = position232, tokenIndex232
if !_rules[ruleLocalSymbol]() {
goto l247
}
{
position248, tokenIndex248 := position, tokenIndex
if !_rules[ruleTCMarker]() {
goto l248
}
goto l249
l248:
position, tokenIndex = position248, tokenIndex248
}
l249:
goto l232
l247:
position, tokenIndex = position232, tokenIndex232
if !_rules[ruleSymbolName]() {
goto l250
}
if !_rules[ruleOffset]() {
goto l250
}
goto l232
l250:
position, tokenIndex = position232, tokenIndex232
if !_rules[ruleSymbolName]() {
goto l230
}
{
position251, tokenIndex251 := position, tokenIndex
if !_rules[ruleTCMarker]() {
goto l251
}
goto l252
l251:
position, tokenIndex = position251, tokenIndex251
}
l252:
}
l232:
add(ruleSymbolArg, position231)
}
return true
l230:
position, tokenIndex = position230, tokenIndex230
return false
},
/* 14 SymbolType <- <(('@' 'f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('@' 'o' 'b' 'j' 'e' 'c' 't'))> */
func() bool {
position253, tokenIndex253 := position, tokenIndex
{
position254 := position
{
position255, tokenIndex255 := position, tokenIndex
if buffer[position] != rune('@') {
goto l256
}
position++
if buffer[position] != rune('f') {
goto l256
}
position++
if buffer[position] != rune('u') {
goto l256
}
position++
if buffer[position] != rune('n') {
goto l256
}
position++
if buffer[position] != rune('c') {
goto l256
}
position++
if buffer[position] != rune('t') {
goto l256
}
position++
if buffer[position] != rune('i') {
goto l256
}
position++
if buffer[position] != rune('o') {
goto l256
}
position++
if buffer[position] != rune('n') {
goto l256
}
position++
goto l255
l256:
position, tokenIndex = position255, tokenIndex255
if buffer[position] != rune('@') {
goto l253
}
position++
if buffer[position] != rune('o') {
goto l253
}
position++
if buffer[position] != rune('b') {
goto l253
}
position++
if buffer[position] != rune('j') {
goto l253
}
position++
if buffer[position] != rune('e') {
goto l253
}
position++
if buffer[position] != rune('c') {
goto l253
}
position++
if buffer[position] != rune('t') {
goto l253
}
position++
}
l255:
add(ruleSymbolType, position254)
}
return true
l253:
position, tokenIndex = position253, tokenIndex253
return false
},
/* 15 Dot <- <'.'> */
func() bool {
position257, tokenIndex257 := position, tokenIndex
{
position258 := position
if buffer[position] != rune('.') {
goto l257
}
position++
add(ruleDot, position258)
}
return true
l257:
position, tokenIndex = position257, tokenIndex257
return false
},
/* 16 TCMarker <- <('[' 'T' 'C' ']')> */
func() bool {
position259, tokenIndex259 := position, tokenIndex
{
position260 := position
if buffer[position] != rune('[') {
goto l259
}
position++
if buffer[position] != rune('T') {
goto l259
}
position++
if buffer[position] != rune('C') {
goto l259
}
position++
if buffer[position] != rune(']') {
goto l259
}
position++
add(ruleTCMarker, position260)
}
return true
l259:
position, tokenIndex = position259, tokenIndex259
return false
},
/* 17 EscapedChar <- <('\\' .)> */
func() bool {
position261, tokenIndex261 := position, tokenIndex
{
position262 := position
if buffer[position] != rune('\\') {
goto l261
}
position++
if !matchDot() {
goto l261
}
add(ruleEscapedChar, position262)
}
return true
l261:
position, tokenIndex = position261, tokenIndex261
return false
},
/* 18 WS <- <(' ' / '\t')+> */
func() bool {
position263, tokenIndex263 := position, tokenIndex
{
position264 := position
{
position267, tokenIndex267 := position, tokenIndex
if buffer[position] != rune(' ') {
goto l268
}
position++
goto l267
l268:
position, tokenIndex = position267, tokenIndex267
if buffer[position] != rune('\t') {
goto l263
}
position++
}
l267:
l265:
{
position266, tokenIndex266 := position, tokenIndex
{
position269, tokenIndex269 := position, tokenIndex
if buffer[position] != rune(' ') {
goto l270
}
position++
goto l269
l270:
position, tokenIndex = position269, tokenIndex269
if buffer[position] != rune('\t') {
goto l266
}
position++
}
l269:
goto l265
l266:
position, tokenIndex = position266, tokenIndex266
}
add(ruleWS, position264)
}
return true
l263:
position, tokenIndex = position263, tokenIndex263
return false
},
/* 19 Comment <- <('#' (!'\n' .)*)> */
func() bool {
position271, tokenIndex271 := position, tokenIndex
{
position272 := position
if buffer[position] != rune('#') {
goto l271
}
position++
l273:
{
position274, tokenIndex274 := position, tokenIndex
{
position275, tokenIndex275 := position, tokenIndex
if buffer[position] != rune('\n') {
goto l275
}
position++
goto l274
l275:
position, tokenIndex = position275, tokenIndex275
}
if !matchDot() {
goto l274
}
goto l273
l274:
position, tokenIndex = position274, tokenIndex274
}
add(ruleComment, position272)
}
return true
l271:
position, tokenIndex = position271, tokenIndex271
return false
},
/* 20 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
func() bool {
position276, tokenIndex276 := position, tokenIndex
{
position277 := position
{
position278, tokenIndex278 := position, tokenIndex
if !_rules[ruleLocalSymbol]() {
goto l279
}
goto l278
l279:
position, tokenIndex = position278, tokenIndex278
if !_rules[ruleLocalLabel]() {
goto l280
}
goto l278
l280:
position, tokenIndex = position278, tokenIndex278
if !_rules[ruleSymbolName]() {
goto l276
}
}
l278:
if buffer[position] != rune(':') {
goto l276
}
position++
add(ruleLabel, position277)
}
return true
l276:
position, tokenIndex = position276, tokenIndex276
return false
},
/* 21 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
func() bool {
position281, tokenIndex281 := position, tokenIndex
{
position282 := position
{
position283, tokenIndex283 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l284
}
position++
goto l283
l284:
position, tokenIndex = position283, tokenIndex283
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l285
}
position++
goto l283
l285:
position, tokenIndex = position283, tokenIndex283
if buffer[position] != rune('.') {
goto l286
}
position++
goto l283
l286:
position, tokenIndex = position283, tokenIndex283
if buffer[position] != rune('_') {
goto l281
}
position++
}
l283:
l287:
{
position288, tokenIndex288 := position, tokenIndex
{
position289, tokenIndex289 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l290
}
position++
goto l289
l290:
position, tokenIndex = position289, tokenIndex289
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l291
}
position++
goto l289
l291:
position, tokenIndex = position289, tokenIndex289
if buffer[position] != rune('.') {
goto l292
}
position++
goto l289
l292:
position, tokenIndex = position289, tokenIndex289
{
position294, tokenIndex294 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l295
}
position++
goto l294
l295:
position, tokenIndex = position294, tokenIndex294
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l293
}
position++
}
l294:
goto l289
l293:
position, tokenIndex = position289, tokenIndex289
if buffer[position] != rune('$') {
goto l296
}
position++
goto l289
l296:
position, tokenIndex = position289, tokenIndex289
if buffer[position] != rune('_') {
goto l288
}
position++
}
l289:
goto l287
l288:
position, tokenIndex = position288, tokenIndex288
}
add(ruleSymbolName, position282)
}
return true
l281:
position, tokenIndex = position281, tokenIndex281
return false
},
/* 22 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
func() bool {
position297, tokenIndex297 := position, tokenIndex
{
position298 := position
if buffer[position] != rune('.') {
goto l297
}
position++
if buffer[position] != rune('L') {
goto l297
}
position++
{
position301, tokenIndex301 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l302
}
position++
goto l301
l302:
position, tokenIndex = position301, tokenIndex301
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l303
}
position++
goto l301
l303:
position, tokenIndex = position301, tokenIndex301
if buffer[position] != rune('.') {
goto l304
}
position++
goto l301
l304:
position, tokenIndex = position301, tokenIndex301
{
position306, tokenIndex306 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l307
}
position++
goto l306
l307:
position, tokenIndex = position306, tokenIndex306
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l305
}
position++
}
l306:
goto l301
l305:
position, tokenIndex = position301, tokenIndex301
if buffer[position] != rune('$') {
goto l308
}
position++
goto l301
l308:
position, tokenIndex = position301, tokenIndex301
if buffer[position] != rune('_') {
goto l297
}
position++
}
l301:
l299:
{
position300, tokenIndex300 := position, tokenIndex
{
position309, tokenIndex309 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l310
}
position++
goto l309
l310:
position, tokenIndex = position309, tokenIndex309
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l311
}
position++
goto l309
l311:
position, tokenIndex = position309, tokenIndex309
if buffer[position] != rune('.') {
goto l312
}
position++
goto l309
l312:
position, tokenIndex = position309, tokenIndex309
{
position314, tokenIndex314 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l315
}
position++
goto l314
l315:
position, tokenIndex = position314, tokenIndex314
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l313
}
position++
}
l314:
goto l309
l313:
position, tokenIndex = position309, tokenIndex309
if buffer[position] != rune('$') {
goto l316
}
position++
goto l309
l316:
position, tokenIndex = position309, tokenIndex309
if buffer[position] != rune('_') {
goto l300
}
position++
}
l309:
goto l299
l300:
position, tokenIndex = position300, tokenIndex300
}
add(ruleLocalSymbol, position298)
}
return true
l297:
position, tokenIndex = position297, tokenIndex297
return false
},
/* 23 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
func() bool {
position317, tokenIndex317 := position, tokenIndex
{
position318 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l317
}
position++
l319:
{
position320, tokenIndex320 := position, tokenIndex
{
position321, tokenIndex321 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l322
}
position++
goto l321
l322:
position, tokenIndex = position321, tokenIndex321
if buffer[position] != rune('$') {
goto l320
}
position++
}
l321:
goto l319
l320:
position, tokenIndex = position320, tokenIndex320
}
add(ruleLocalLabel, position318)
}
return true
l317:
position, tokenIndex = position317, tokenIndex317
return false
},
/* 24 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
func() bool {
position323, tokenIndex323 := position, tokenIndex
{
position324 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l323
}
position++
l325:
{
position326, tokenIndex326 := position, tokenIndex
{
position327, tokenIndex327 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l328
}
position++
goto l327
l328:
position, tokenIndex = position327, tokenIndex327
if buffer[position] != rune('$') {
goto l326
}
position++
}
l327:
goto l325
l326:
position, tokenIndex = position326, tokenIndex326
}
{
position329, tokenIndex329 := position, tokenIndex
if buffer[position] != rune('b') {
goto l330
}
position++
goto l329
l330:
position, tokenIndex = position329, tokenIndex329
if buffer[position] != rune('f') {
goto l323
}
position++
}
l329:
add(ruleLocalLabelRef, position324)
}
return true
l323:
position, tokenIndex = position323, tokenIndex323
return false
},
/* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
func() bool {
position331, tokenIndex331 := position, tokenIndex
{
position332 := position
if !_rules[ruleInstructionName]() {
goto l331
}
{
position333, tokenIndex333 := position, tokenIndex
if !_rules[ruleWS]() {
goto l333
}
if !_rules[ruleInstructionArg]() {
goto l333
}
l335:
{
position336, tokenIndex336 := position, tokenIndex
{
position337, tokenIndex337 := position, tokenIndex
if !_rules[ruleWS]() {
goto l337
}
goto l338
l337:
position, tokenIndex = position337, tokenIndex337
}
l338:
if buffer[position] != rune(',') {
goto l336
}
position++
{
position339, tokenIndex339 := position, tokenIndex
if !_rules[ruleWS]() {
goto l339
}
goto l340
l339:
position, tokenIndex = position339, tokenIndex339
}
l340:
if !_rules[ruleInstructionArg]() {
goto l336
}
goto l335
l336:
position, tokenIndex = position336, tokenIndex336
}
goto l334
l333:
position, tokenIndex = position333, tokenIndex333
}
l334:
add(ruleInstruction, position332)
}
return true
l331:
position, tokenIndex = position331, tokenIndex331
return false
},
/* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
func() bool {
position341, tokenIndex341 := position, tokenIndex
{
position342 := position
{
position343, tokenIndex343 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l344
}
position++
goto l343
l344:
position, tokenIndex = position343, tokenIndex343
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l341
}
position++
}
l343:
l345:
{
position346, tokenIndex346 := position, tokenIndex
{
position347, tokenIndex347 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l348
}
position++
goto l347
l348:
position, tokenIndex = position347, tokenIndex347
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l349
}
position++
goto l347
l349:
position, tokenIndex = position347, tokenIndex347
{
position350, tokenIndex350 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l351
}
position++
goto l350
l351:
position, tokenIndex = position350, tokenIndex350
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l346
}
position++
}
l350:
}
l347:
goto l345
l346:
position, tokenIndex = position346, tokenIndex346
}
{
position352, tokenIndex352 := position, tokenIndex
{
position354, tokenIndex354 := position, tokenIndex
if buffer[position] != rune('.') {
goto l355
}
position++
goto l354
l355:
position, tokenIndex = position354, tokenIndex354
if buffer[position] != rune('+') {
goto l356
}
position++
goto l354
l356:
position, tokenIndex = position354, tokenIndex354
if buffer[position] != rune('-') {
goto l352
}
position++
}
l354:
goto l353
l352:
position, tokenIndex = position352, tokenIndex352
}
l353:
add(ruleInstructionName, position342)
}
return true
l341:
position, tokenIndex = position341, tokenIndex341
return false
},
/* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token*)> */
func() bool {
position357, tokenIndex357 := position, tokenIndex
{
position358 := position
{
position359, tokenIndex359 := position, tokenIndex
if !_rules[ruleIndirectionIndicator]() {
goto l359
}
goto l360
l359:
position, tokenIndex = position359, tokenIndex359
}
l360:
{
position361, tokenIndex361 := position, tokenIndex
if !_rules[ruleRegisterOrConstant]() {
goto l362
}
goto l361
l362:
position, tokenIndex = position361, tokenIndex361
if !_rules[ruleLocalLabelRef]() {
goto l363
}
goto l361
l363:
position, tokenIndex = position361, tokenIndex361
if !_rules[ruleTOCRefHigh]() {
goto l364
}
goto l361
l364:
position, tokenIndex = position361, tokenIndex361
if !_rules[ruleTOCRefLow]() {
goto l365
}
goto l361
l365:
position, tokenIndex = position361, tokenIndex361
if !_rules[ruleMemoryRef]() {
goto l357
}
}
l361:
l366:
{
position367, tokenIndex367 := position, tokenIndex
if !_rules[ruleAVX512Token]() {
goto l367
}
goto l366
l367:
position, tokenIndex = position367, tokenIndex367
}
add(ruleInstructionArg, position358)
}
return true
l357:
position, tokenIndex = position357, tokenIndex357
return false
},
/* 28 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
func() bool {
position368, tokenIndex368 := position, tokenIndex
{
position369 := position
{
position370, tokenIndex370 := position, tokenIndex
if !_rules[ruleWS]() {
goto l370
}
goto l371
l370:
position, tokenIndex = position370, tokenIndex370
}
l371:
if buffer[position] != rune('{') {
goto l368
}
position++
{
position372, tokenIndex372 := position, tokenIndex
if buffer[position] != rune('%') {
goto l372
}
position++
goto l373
l372:
position, tokenIndex = position372, tokenIndex372
}
l373:
l374:
{
position375, tokenIndex375 := position, tokenIndex
{
position376, tokenIndex376 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l377
}
position++
goto l376
l377:
position, tokenIndex = position376, tokenIndex376
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l375
}
position++
}
l376:
goto l374
l375:
position, tokenIndex = position375, tokenIndex375
}
if buffer[position] != rune('}') {
goto l368
}
position++
add(ruleAVX512Token, position369)
}
return true
l368:
position, tokenIndex = position368, tokenIndex368
return false
},
/* 29 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
func() bool {
position378, tokenIndex378 := position, tokenIndex
{
position379 := position
if buffer[position] != rune('.') {
goto l378
}
position++
if buffer[position] != rune('T') {
goto l378
}
position++
if buffer[position] != rune('O') {
goto l378
}
position++
if buffer[position] != rune('C') {
goto l378
}
position++
if buffer[position] != rune('.') {
goto l378
}
position++
if buffer[position] != rune('-') {
goto l378
}
position++
{
position380, tokenIndex380 := position, tokenIndex
if buffer[position] != rune('0') {
goto l381
}
position++
if buffer[position] != rune('b') {
goto l381
}
position++
goto l380
l381:
position, tokenIndex = position380, tokenIndex380
if buffer[position] != rune('.') {
goto l378
}
position++
if buffer[position] != rune('L') {
goto l378
}
position++
{
position384, tokenIndex384 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l385
}
position++
goto l384
l385:
position, tokenIndex = position384, tokenIndex384
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l386
}
position++
goto l384
l386:
position, tokenIndex = position384, tokenIndex384
if buffer[position] != rune('_') {
goto l387
}
position++
goto l384
l387:
position, tokenIndex = position384, tokenIndex384
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l378
}
position++
}
l384:
l382:
{
position383, tokenIndex383 := position, tokenIndex
{
position388, tokenIndex388 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l389
}
position++
goto l388
l389:
position, tokenIndex = position388, tokenIndex388
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l390
}
position++
goto l388
l390:
position, tokenIndex = position388, tokenIndex388
if buffer[position] != rune('_') {
goto l391
}
position++
goto l388
l391:
position, tokenIndex = position388, tokenIndex388
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l383
}
position++
}
l388:
goto l382
l383:
position, tokenIndex = position383, tokenIndex383
}
}
l380:
if buffer[position] != rune('@') {
goto l378
}
position++
{
position392, tokenIndex392 := position, tokenIndex
if buffer[position] != rune('h') {
goto l393
}
position++
goto l392
l393:
position, tokenIndex = position392, tokenIndex392
if buffer[position] != rune('H') {
goto l378
}
position++
}
l392:
{
position394, tokenIndex394 := position, tokenIndex
if buffer[position] != rune('a') {
goto l395
}
position++
goto l394
l395:
position, tokenIndex = position394, tokenIndex394
if buffer[position] != rune('A') {
goto l378
}
position++
}
l394:
add(ruleTOCRefHigh, position379)
}
return true
l378:
position, tokenIndex = position378, tokenIndex378
return false
},
/* 30 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
func() bool {
position396, tokenIndex396 := position, tokenIndex
{
position397 := position
if buffer[position] != rune('.') {
goto l396
}
position++
if buffer[position] != rune('T') {
goto l396
}
position++
if buffer[position] != rune('O') {
goto l396
}
position++
if buffer[position] != rune('C') {
goto l396
}
position++
if buffer[position] != rune('.') {
goto l396
}
position++
if buffer[position] != rune('-') {
goto l396
}
position++
{
position398, tokenIndex398 := position, tokenIndex
if buffer[position] != rune('0') {
goto l399
}
position++
if buffer[position] != rune('b') {
goto l399
}
position++
goto l398
l399:
position, tokenIndex = position398, tokenIndex398
if buffer[position] != rune('.') {
goto l396
}
position++
if buffer[position] != rune('L') {
goto l396
}
position++
{
position402, tokenIndex402 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l403
}
position++
goto l402
l403:
position, tokenIndex = position402, tokenIndex402
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l404
}
position++
goto l402
l404:
position, tokenIndex = position402, tokenIndex402
if buffer[position] != rune('_') {
goto l405
}
position++
goto l402
l405:
position, tokenIndex = position402, tokenIndex402
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l396
}
position++
}
l402:
l400:
{
position401, tokenIndex401 := position, tokenIndex
{
position406, tokenIndex406 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l407
}
position++
goto l406
l407:
position, tokenIndex = position406, tokenIndex406
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l408
}
position++
goto l406
l408:
position, tokenIndex = position406, tokenIndex406
if buffer[position] != rune('_') {
goto l409
}
position++
goto l406
l409:
position, tokenIndex = position406, tokenIndex406
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l401
}
position++
}
l406:
goto l400
l401:
position, tokenIndex = position401, tokenIndex401
}
}
l398:
if buffer[position] != rune('@') {
goto l396
}
position++
{
position410, tokenIndex410 := position, tokenIndex
if buffer[position] != rune('l') {
goto l411
}
position++
goto l410
l411:
position, tokenIndex = position410, tokenIndex410
if buffer[position] != rune('L') {
goto l396
}
position++
}
l410:
add(ruleTOCRefLow, position397)
}
return true
l396:
position, tokenIndex = position396, tokenIndex396
return false
},
/* 31 IndirectionIndicator <- <'*'> */
func() bool {
position412, tokenIndex412 := position, tokenIndex
{
position413 := position
if buffer[position] != rune('*') {
goto l412
}
position++
add(ruleIndirectionIndicator, position413)
}
return true
l412:
position, tokenIndex = position412, tokenIndex412
return false
},
/* 32 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
func() bool {
position414, tokenIndex414 := position, tokenIndex
{
position415 := position
{
position416, tokenIndex416 := position, tokenIndex
if buffer[position] != rune('%') {
goto l417
}
position++
{
position418, tokenIndex418 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l419
}
position++
goto l418
l419:
position, tokenIndex = position418, tokenIndex418
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l417
}
position++
}
l418:
l420:
{
position421, tokenIndex421 := position, tokenIndex
{
position422, tokenIndex422 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l423
}
position++
goto l422
l423:
position, tokenIndex = position422, tokenIndex422
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l424
}
position++
goto l422
l424:
position, tokenIndex = position422, tokenIndex422
{
position425, tokenIndex425 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l426
}
position++
goto l425
l426:
position, tokenIndex = position425, tokenIndex425
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l421
}
position++
}
l425:
}
l422:
goto l420
l421:
position, tokenIndex = position421, tokenIndex421
}
goto l416
l417:
position, tokenIndex = position416, tokenIndex416
{
position427, tokenIndex427 := position, tokenIndex
if buffer[position] != rune('$') {
goto l427
}
position++
goto l428
l427:
position, tokenIndex = position427, tokenIndex427
}
l428:
{
position429, tokenIndex429 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l430
}
if !_rules[ruleOffset]() {
goto l430
}
goto l429
l430:
position, tokenIndex = position429, tokenIndex429
if !_rules[ruleOffset]() {
goto l414
}
}
l429:
}
l416:
{
position431, tokenIndex431 := position, tokenIndex
{
position432, tokenIndex432 := position, tokenIndex
if buffer[position] != rune('f') {
goto l433
}
position++
goto l432
l433:
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('b') {
goto l434
}
position++
goto l432
l434:
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune(':') {
goto l435
}
position++
goto l432
l435:
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('(') {
goto l436
}
position++
goto l432
l436:
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('+') {
goto l437
}
position++
goto l432
l437:
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('-') {
goto l431
}
position++
}
l432:
goto l414
l431:
position, tokenIndex = position431, tokenIndex431
}
add(ruleRegisterOrConstant, position415)
}
return true
l414:
position, tokenIndex = position414, tokenIndex414
return false
},
/* 33 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */
func() bool {
position438, tokenIndex438 := position, tokenIndex
{
position439 := position
{
position440, tokenIndex440 := position, tokenIndex
if !_rules[ruleSymbolRef]() {
goto l441
}
if !_rules[ruleBaseIndexScale]() {
goto l441
}
goto l440
l441:
position, tokenIndex = position440, tokenIndex440
if !_rules[ruleSymbolRef]() {
goto l442
}
goto l440
l442:
position, tokenIndex = position440, tokenIndex440
l444:
{
position445, tokenIndex445 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l445
}
goto l444
l445:
position, tokenIndex = position445, tokenIndex445
}
if !_rules[ruleBaseIndexScale]() {
goto l443
}
goto l440
l443:
position, tokenIndex = position440, tokenIndex440
if !_rules[ruleSegmentRegister]() {
goto l446
}
if !_rules[ruleOffset]() {
goto l446
}
if !_rules[ruleBaseIndexScale]() {
goto l446
}
goto l440
l446:
position, tokenIndex = position440, tokenIndex440
if !_rules[ruleSegmentRegister]() {
goto l447
}
if !_rules[ruleBaseIndexScale]() {
goto l447
}
goto l440
l447:
position, tokenIndex = position440, tokenIndex440
if !_rules[ruleSegmentRegister]() {
goto l448
}
if !_rules[ruleOffset]() {
goto l448
}
goto l440
l448:
position, tokenIndex = position440, tokenIndex440
if !_rules[ruleBaseIndexScale]() {
goto l438
}
}
l440:
add(ruleMemoryRef, position439)
}
return true
l438:
position, tokenIndex = position438, tokenIndex438
return false
},
/* 34 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
func() bool {
position449, tokenIndex449 := position, tokenIndex
{
position450 := position
{
position451, tokenIndex451 := position, tokenIndex
l453:
{
position454, tokenIndex454 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l454
}
goto l453
l454:
position, tokenIndex = position454, tokenIndex454
}
if buffer[position] != rune('+') {
goto l451
}
position++
goto l452
l451:
position, tokenIndex = position451, tokenIndex451
}
l452:
{
position455, tokenIndex455 := position, tokenIndex
if !_rules[ruleLocalSymbol]() {
goto l456
}
goto l455
l456:
position, tokenIndex = position455, tokenIndex455
if !_rules[ruleSymbolName]() {
goto l449
}
}
l455:
l457:
{
position458, tokenIndex458 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l458
}
goto l457
l458:
position, tokenIndex = position458, tokenIndex458
}
{
position459, tokenIndex459 := position, tokenIndex
if buffer[position] != rune('@') {
goto l459
}
position++
if !_rules[ruleSection]() {
goto l459
}
l461:
{
position462, tokenIndex462 := position, tokenIndex
if !_rules[ruleOffset]() {
goto l462
}
goto l461
l462:
position, tokenIndex = position462, tokenIndex462
}
goto l460
l459:
position, tokenIndex = position459, tokenIndex459
}
l460:
add(ruleSymbolRef, position450)
}
return true
l449:
position, tokenIndex = position449, tokenIndex449
return false
},
/* 35 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
func() bool {
position463, tokenIndex463 := position, tokenIndex
{
position464 := position
if buffer[position] != rune('(') {
goto l463
}
position++
{
position465, tokenIndex465 := position, tokenIndex
if !_rules[ruleRegisterOrConstant]() {
goto l465
}
goto l466
l465:
position, tokenIndex = position465, tokenIndex465
}
l466:
{
position467, tokenIndex467 := position, tokenIndex
if !_rules[ruleWS]() {
goto l467
}
goto l468
l467:
position, tokenIndex = position467, tokenIndex467
}
l468:
{
position469, tokenIndex469 := position, tokenIndex
if buffer[position] != rune(',') {
goto l469
}
position++
{
position471, tokenIndex471 := position, tokenIndex
if !_rules[ruleWS]() {
goto l471
}
goto l472
l471:
position, tokenIndex = position471, tokenIndex471
}
l472:
if !_rules[ruleRegisterOrConstant]() {
goto l469
}
{
position473, tokenIndex473 := position, tokenIndex
if !_rules[ruleWS]() {
goto l473
}
goto l474
l473:
position, tokenIndex = position473, tokenIndex473
}
l474:
{
position475, tokenIndex475 := position, tokenIndex
if buffer[position] != rune(',') {
goto l475
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l475
}
position++
l477:
{
position478, tokenIndex478 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l478
}
position++
goto l477
l478:
position, tokenIndex = position478, tokenIndex478
}
goto l476
l475:
position, tokenIndex = position475, tokenIndex475
}
l476:
goto l470
l469:
position, tokenIndex = position469, tokenIndex469
}
l470:
if buffer[position] != rune(')') {
goto l463
}
position++
add(ruleBaseIndexScale, position464)
}
return true
l463:
position, tokenIndex = position463, tokenIndex463
return false
},
/* 36 Operator <- <('+' / '-')> */
func() bool {
position479, tokenIndex479 := position, tokenIndex
{
position480 := position
{
position481, tokenIndex481 := position, tokenIndex
if buffer[position] != rune('+') {
goto l482
}
position++
goto l481
l482:
position, tokenIndex = position481, tokenIndex481
if buffer[position] != rune('-') {
goto l479
}
position++
}
l481:
add(ruleOperator, position480)
}
return true
l479:
position, tokenIndex = position479, tokenIndex479
return false
},
/* 37 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
func() bool {
position483, tokenIndex483 := position, tokenIndex
{
position484 := position
{
position485, tokenIndex485 := position, tokenIndex
if buffer[position] != rune('+') {
goto l485
}
position++
goto l486
l485:
position, tokenIndex = position485, tokenIndex485
}
l486:
{
position487, tokenIndex487 := position, tokenIndex
if buffer[position] != rune('-') {
goto l487
}
position++
goto l488
l487:
position, tokenIndex = position487, tokenIndex487
}
l488:
{
position489, tokenIndex489 := position, tokenIndex
if buffer[position] != rune('0') {
goto l490
}
position++
{
position491, tokenIndex491 := position, tokenIndex
if buffer[position] != rune('b') {
goto l492
}
position++
goto l491
l492:
position, tokenIndex = position491, tokenIndex491
if buffer[position] != rune('B') {
goto l490
}
position++
}
l491:
{
position495, tokenIndex495 := position, tokenIndex
if buffer[position] != rune('0') {
goto l496
}
position++
goto l495
l496:
position, tokenIndex = position495, tokenIndex495
if buffer[position] != rune('1') {
goto l490
}
position++
}
l495:
l493:
{
position494, tokenIndex494 := position, tokenIndex
{
position497, tokenIndex497 := position, tokenIndex
if buffer[position] != rune('0') {
goto l498
}
position++
goto l497
l498:
position, tokenIndex = position497, tokenIndex497
if buffer[position] != rune('1') {
goto l494
}
position++
}
l497:
goto l493
l494:
position, tokenIndex = position494, tokenIndex494
}
goto l489
l490:
position, tokenIndex = position489, tokenIndex489
if buffer[position] != rune('0') {
goto l499
}
position++
{
position500, tokenIndex500 := position, tokenIndex
if buffer[position] != rune('x') {
goto l501
}
position++
goto l500
l501:
position, tokenIndex = position500, tokenIndex500
if buffer[position] != rune('X') {
goto l499
}
position++
}
l500:
{
position504, tokenIndex504 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l505
}
position++
goto l504
l505:
position, tokenIndex = position504, tokenIndex504
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l506
}
position++
goto l504
l506:
position, tokenIndex = position504, tokenIndex504
{
position507, tokenIndex507 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('f') {
goto l508
}
position++
goto l507
l508:
position, tokenIndex = position507, tokenIndex507
if c := buffer[position]; c < rune('A') || c > rune('F') {
goto l499
}
position++
}
l507:
}
l504:
l502:
{
position503, tokenIndex503 := position, tokenIndex
{
position509, tokenIndex509 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l510
}
position++
goto l509
l510:
position, tokenIndex = position509, tokenIndex509
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l511
}
position++
goto l509
l511:
position, tokenIndex = position509, tokenIndex509
{
position512, tokenIndex512 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('f') {
goto l513
}
position++
goto l512
l513:
position, tokenIndex = position512, tokenIndex512
if c := buffer[position]; c < rune('A') || c > rune('F') {
goto l503
}
position++
}
l512:
}
l509:
goto l502
l503:
position, tokenIndex = position503, tokenIndex503
}
goto l489
l499:
position, tokenIndex = position489, tokenIndex489
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l483
}
position++
l514:
{
position515, tokenIndex515 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l515
}
position++
goto l514
l515:
position, tokenIndex = position515, tokenIndex515
}
}
l489:
add(ruleOffset, position484)
}
return true
l483:
position, tokenIndex = position483, tokenIndex483
return false
},
/* 38 Section <- <([a-z] / [A-Z] / '@')+> */
func() bool {
position516, tokenIndex516 := position, tokenIndex
{
position517 := position
{
position520, tokenIndex520 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l521
}
position++
goto l520
l521:
position, tokenIndex = position520, tokenIndex520
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l522
}
position++
goto l520
l522:
position, tokenIndex = position520, tokenIndex520
if buffer[position] != rune('@') {
goto l516
}
position++
}
l520:
l518:
{
position519, tokenIndex519 := position, tokenIndex
{
position523, tokenIndex523 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l524
}
position++
goto l523
l524:
position, tokenIndex = position523, tokenIndex523
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l525
}
position++
goto l523
l525:
position, tokenIndex = position523, tokenIndex523
if buffer[position] != rune('@') {
goto l519
}
position++
}
l523:
goto l518
l519:
position, tokenIndex = position519, tokenIndex519
}
add(ruleSection, position517)
}
return true
l516:
position, tokenIndex = position516, tokenIndex516
return false
},
/* 39 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
func() bool {
position526, tokenIndex526 := position, tokenIndex
{
position527 := position
if buffer[position] != rune('%') {
goto l526
}
position++
{
position528, tokenIndex528 := position, tokenIndex
if c := buffer[position]; c < rune('c') || c > rune('g') {
goto l529
}
position++
goto l528
l529:
position, tokenIndex = position528, tokenIndex528
if buffer[position] != rune('s') {
goto l526
}
position++
}
l528:
if buffer[position] != rune('s') {
goto l526
}
position++
if buffer[position] != rune(':') {
goto l526
}
position++
add(ruleSegmentRegister, position527)
}
return true
l526:
position, tokenIndex = position526, tokenIndex526
return false
},
}
p.rules = _rules
}