diff options
Diffstat (limited to 'src/util/fipstools/delocate/delocate.peg.go')
-rw-r--r-- | src/util/fipstools/delocate/delocate.peg.go | 4017 |
1 files changed, 4017 insertions, 0 deletions
diff --git a/src/util/fipstools/delocate/delocate.peg.go b/src/util/fipstools/delocate/delocate.peg.go new file mode 100644 index 00000000..f0ad78f6 --- /dev/null +++ b/src/util/fipstools/delocate/delocate.peg.go @@ -0,0 +1,4017 @@ +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 + 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", + "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 [40]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)*)? (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: + l341: + { + position342, tokenIndex342 := position, tokenIndex + { + position343, tokenIndex343 := position, tokenIndex + if !_rules[ruleWS]() { + goto l343 + } + goto l344 + l343: + position, tokenIndex = position343, tokenIndex343 + } + l344: + if buffer[position] != rune('{') { + goto l342 + } + position++ + if !_rules[ruleInstructionArg]() { + goto l342 + } + if buffer[position] != rune('}') { + goto l342 + } + position++ + goto l341 + l342: + position, tokenIndex = position342, tokenIndex342 + } + 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 { + position345, tokenIndex345 := position, tokenIndex + { + position346 := position + { + 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 l345 + } + position++ + } + l347: + l349: + { + position350, tokenIndex350 := position, tokenIndex + { + position351, tokenIndex351 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l352 + } + position++ + goto l351 + l352: + position, tokenIndex = position351, tokenIndex351 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l353 + } + position++ + goto l351 + l353: + position, tokenIndex = position351, tokenIndex351 + { + position354, tokenIndex354 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l355 + } + position++ + goto l354 + l355: + position, tokenIndex = position354, tokenIndex354 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l350 + } + position++ + } + l354: + } + l351: + goto l349 + l350: + position, tokenIndex = position350, tokenIndex350 + } + { + position356, tokenIndex356 := position, tokenIndex + { + position358, tokenIndex358 := position, tokenIndex + if buffer[position] != rune('.') { + goto l359 + } + position++ + goto l358 + l359: + position, tokenIndex = position358, tokenIndex358 + if buffer[position] != rune('+') { + goto l360 + } + position++ + goto l358 + l360: + position, tokenIndex = position358, tokenIndex358 + if buffer[position] != rune('-') { + goto l356 + } + position++ + } + l358: + goto l357 + l356: + position, tokenIndex = position356, tokenIndex356 + } + l357: + add(ruleInstructionName, position346) + } + return true + l345: + position, tokenIndex = position345, tokenIndex345 + return false + }, + /* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef))> */ + func() bool { + position361, tokenIndex361 := position, tokenIndex + { + position362 := position + { + position363, tokenIndex363 := position, tokenIndex + if !_rules[ruleIndirectionIndicator]() { + goto l363 + } + goto l364 + l363: + position, tokenIndex = position363, tokenIndex363 + } + l364: + { + position365, tokenIndex365 := position, tokenIndex + if !_rules[ruleRegisterOrConstant]() { + goto l366 + } + goto l365 + l366: + position, tokenIndex = position365, tokenIndex365 + if !_rules[ruleLocalLabelRef]() { + goto l367 + } + goto l365 + l367: + position, tokenIndex = position365, tokenIndex365 + if !_rules[ruleTOCRefHigh]() { + goto l368 + } + goto l365 + l368: + position, tokenIndex = position365, tokenIndex365 + if !_rules[ruleTOCRefLow]() { + goto l369 + } + goto l365 + l369: + position, tokenIndex = position365, tokenIndex365 + if !_rules[ruleMemoryRef]() { + goto l361 + } + } + l365: + add(ruleInstructionArg, position362) + } + return true + l361: + position, tokenIndex = position361, tokenIndex361 + return false + }, + /* 28 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ + func() bool { + position370, tokenIndex370 := position, tokenIndex + { + position371 := position + if buffer[position] != rune('.') { + goto l370 + } + position++ + if buffer[position] != rune('T') { + goto l370 + } + position++ + if buffer[position] != rune('O') { + goto l370 + } + position++ + if buffer[position] != rune('C') { + goto l370 + } + position++ + if buffer[position] != rune('.') { + goto l370 + } + position++ + if buffer[position] != rune('-') { + goto l370 + } + position++ + { + position372, tokenIndex372 := position, tokenIndex + if buffer[position] != rune('0') { + goto l373 + } + position++ + if buffer[position] != rune('b') { + goto l373 + } + position++ + goto l372 + l373: + position, tokenIndex = position372, tokenIndex372 + if buffer[position] != rune('.') { + goto l370 + } + position++ + if buffer[position] != rune('L') { + goto l370 + } + position++ + { + position376, tokenIndex376 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l377 + } + position++ + goto l376 + l377: + position, tokenIndex = position376, tokenIndex376 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l378 + } + position++ + goto l376 + l378: + position, tokenIndex = position376, tokenIndex376 + if buffer[position] != rune('_') { + goto l379 + } + position++ + goto l376 + l379: + position, tokenIndex = position376, tokenIndex376 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l370 + } + position++ + } + l376: + l374: + { + position375, tokenIndex375 := position, tokenIndex + { + position380, tokenIndex380 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l381 + } + position++ + goto l380 + l381: + position, tokenIndex = position380, tokenIndex380 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l382 + } + position++ + goto l380 + l382: + position, tokenIndex = position380, tokenIndex380 + if buffer[position] != rune('_') { + goto l383 + } + position++ + goto l380 + l383: + position, tokenIndex = position380, tokenIndex380 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l375 + } + position++ + } + l380: + goto l374 + l375: + position, tokenIndex = position375, tokenIndex375 + } + } + l372: + if buffer[position] != rune('@') { + goto l370 + } + position++ + { + position384, tokenIndex384 := position, tokenIndex + if buffer[position] != rune('h') { + goto l385 + } + position++ + goto l384 + l385: + position, tokenIndex = position384, tokenIndex384 + if buffer[position] != rune('H') { + goto l370 + } + position++ + } + l384: + { + position386, tokenIndex386 := position, tokenIndex + if buffer[position] != rune('a') { + goto l387 + } + position++ + goto l386 + l387: + position, tokenIndex = position386, tokenIndex386 + if buffer[position] != rune('A') { + goto l370 + } + position++ + } + l386: + add(ruleTOCRefHigh, position371) + } + return true + l370: + position, tokenIndex = position370, tokenIndex370 + return false + }, + /* 29 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ + func() bool { + position388, tokenIndex388 := position, tokenIndex + { + position389 := position + if buffer[position] != rune('.') { + goto l388 + } + position++ + if buffer[position] != rune('T') { + goto l388 + } + position++ + if buffer[position] != rune('O') { + goto l388 + } + position++ + if buffer[position] != rune('C') { + goto l388 + } + position++ + if buffer[position] != rune('.') { + goto l388 + } + position++ + if buffer[position] != rune('-') { + goto l388 + } + position++ + { + position390, tokenIndex390 := position, tokenIndex + if buffer[position] != rune('0') { + goto l391 + } + position++ + if buffer[position] != rune('b') { + goto l391 + } + position++ + goto l390 + l391: + position, tokenIndex = position390, tokenIndex390 + if buffer[position] != rune('.') { + goto l388 + } + position++ + if buffer[position] != rune('L') { + goto l388 + } + position++ + { + position394, tokenIndex394 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l395 + } + position++ + goto l394 + l395: + position, tokenIndex = position394, tokenIndex394 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l396 + } + position++ + goto l394 + l396: + position, tokenIndex = position394, tokenIndex394 + if buffer[position] != rune('_') { + goto l397 + } + position++ + goto l394 + l397: + position, tokenIndex = position394, tokenIndex394 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l388 + } + position++ + } + l394: + l392: + { + position393, tokenIndex393 := position, tokenIndex + { + position398, tokenIndex398 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l399 + } + position++ + goto l398 + l399: + position, tokenIndex = position398, tokenIndex398 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l400 + } + position++ + goto l398 + l400: + position, tokenIndex = position398, tokenIndex398 + if buffer[position] != rune('_') { + goto l401 + } + position++ + goto l398 + l401: + position, tokenIndex = position398, tokenIndex398 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l393 + } + position++ + } + l398: + goto l392 + l393: + position, tokenIndex = position393, tokenIndex393 + } + } + l390: + if buffer[position] != rune('@') { + goto l388 + } + position++ + { + position402, tokenIndex402 := position, tokenIndex + if buffer[position] != rune('l') { + goto l403 + } + position++ + goto l402 + l403: + position, tokenIndex = position402, tokenIndex402 + if buffer[position] != rune('L') { + goto l388 + } + position++ + } + l402: + add(ruleTOCRefLow, position389) + } + return true + l388: + position, tokenIndex = position388, tokenIndex388 + return false + }, + /* 30 IndirectionIndicator <- <'*'> */ + func() bool { + position404, tokenIndex404 := position, tokenIndex + { + position405 := position + if buffer[position] != rune('*') { + goto l404 + } + position++ + add(ruleIndirectionIndicator, position405) + } + return true + l404: + position, tokenIndex = position404, tokenIndex404 + return false + }, + /* 31 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ + func() bool { + position406, tokenIndex406 := position, tokenIndex + { + position407 := position + { + position408, tokenIndex408 := position, tokenIndex + if buffer[position] != rune('%') { + goto l409 + } + position++ + { + position410, tokenIndex410 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l411 + } + position++ + goto l410 + l411: + position, tokenIndex = position410, tokenIndex410 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l409 + } + position++ + } + l410: + l412: + { + position413, tokenIndex413 := position, tokenIndex + { + position414, tokenIndex414 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l415 + } + position++ + goto l414 + l415: + position, tokenIndex = position414, tokenIndex414 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l416 + } + position++ + goto l414 + l416: + position, tokenIndex = position414, tokenIndex414 + { + position417, tokenIndex417 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l418 + } + position++ + goto l417 + l418: + position, tokenIndex = position417, tokenIndex417 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l413 + } + position++ + } + l417: + } + l414: + goto l412 + l413: + position, tokenIndex = position413, tokenIndex413 + } + goto l408 + l409: + position, tokenIndex = position408, tokenIndex408 + { + position419, tokenIndex419 := position, tokenIndex + if buffer[position] != rune('$') { + goto l419 + } + position++ + goto l420 + l419: + position, tokenIndex = position419, tokenIndex419 + } + l420: + { + position421, tokenIndex421 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l422 + } + if !_rules[ruleOffset]() { + goto l422 + } + goto l421 + l422: + position, tokenIndex = position421, tokenIndex421 + if !_rules[ruleOffset]() { + goto l406 + } + } + l421: + } + l408: + { + position423, tokenIndex423 := position, tokenIndex + { + position424, tokenIndex424 := position, tokenIndex + if buffer[position] != rune('f') { + goto l425 + } + position++ + goto l424 + l425: + position, tokenIndex = position424, tokenIndex424 + if buffer[position] != rune('b') { + goto l426 + } + position++ + goto l424 + l426: + position, tokenIndex = position424, tokenIndex424 + if buffer[position] != rune(':') { + goto l427 + } + position++ + goto l424 + l427: + position, tokenIndex = position424, tokenIndex424 + if buffer[position] != rune('(') { + goto l428 + } + position++ + goto l424 + l428: + position, tokenIndex = position424, tokenIndex424 + if buffer[position] != rune('+') { + goto l429 + } + position++ + goto l424 + l429: + position, tokenIndex = position424, tokenIndex424 + if buffer[position] != rune('-') { + goto l423 + } + position++ + } + l424: + goto l406 + l423: + position, tokenIndex = position423, tokenIndex423 + } + add(ruleRegisterOrConstant, position407) + } + return true + l406: + position, tokenIndex = position406, tokenIndex406 + return false + }, + /* 32 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ + func() bool { + position430, tokenIndex430 := position, tokenIndex + { + position431 := position + { + position432, tokenIndex432 := position, tokenIndex + if !_rules[ruleSymbolRef]() { + goto l433 + } + if !_rules[ruleBaseIndexScale]() { + goto l433 + } + goto l432 + l433: + position, tokenIndex = position432, tokenIndex432 + if !_rules[ruleSymbolRef]() { + goto l434 + } + goto l432 + l434: + position, tokenIndex = position432, tokenIndex432 + l436: + { + position437, tokenIndex437 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l437 + } + goto l436 + l437: + position, tokenIndex = position437, tokenIndex437 + } + if !_rules[ruleBaseIndexScale]() { + goto l435 + } + goto l432 + l435: + position, tokenIndex = position432, tokenIndex432 + if !_rules[ruleSegmentRegister]() { + goto l438 + } + if !_rules[ruleOffset]() { + goto l438 + } + if !_rules[ruleBaseIndexScale]() { + goto l438 + } + goto l432 + l438: + position, tokenIndex = position432, tokenIndex432 + if !_rules[ruleSegmentRegister]() { + goto l439 + } + if !_rules[ruleBaseIndexScale]() { + goto l439 + } + goto l432 + l439: + position, tokenIndex = position432, tokenIndex432 + if !_rules[ruleSegmentRegister]() { + goto l440 + } + if !_rules[ruleOffset]() { + goto l440 + } + goto l432 + l440: + position, tokenIndex = position432, tokenIndex432 + if !_rules[ruleBaseIndexScale]() { + goto l430 + } + } + l432: + add(ruleMemoryRef, position431) + } + return true + l430: + position, tokenIndex = position430, tokenIndex430 + return false + }, + /* 33 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ + func() bool { + position441, tokenIndex441 := position, tokenIndex + { + position442 := position + { + position443, tokenIndex443 := position, tokenIndex + l445: + { + position446, tokenIndex446 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l446 + } + goto l445 + l446: + position, tokenIndex = position446, tokenIndex446 + } + if buffer[position] != rune('+') { + goto l443 + } + position++ + goto l444 + l443: + position, tokenIndex = position443, tokenIndex443 + } + l444: + { + position447, tokenIndex447 := position, tokenIndex + if !_rules[ruleLocalSymbol]() { + goto l448 + } + goto l447 + l448: + position, tokenIndex = position447, tokenIndex447 + if !_rules[ruleSymbolName]() { + goto l441 + } + } + l447: + l449: + { + position450, tokenIndex450 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l450 + } + goto l449 + l450: + position, tokenIndex = position450, tokenIndex450 + } + { + position451, tokenIndex451 := position, tokenIndex + if buffer[position] != rune('@') { + goto l451 + } + position++ + if !_rules[ruleSection]() { + goto l451 + } + l453: + { + position454, tokenIndex454 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l454 + } + goto l453 + l454: + position, tokenIndex = position454, tokenIndex454 + } + goto l452 + l451: + position, tokenIndex = position451, tokenIndex451 + } + l452: + add(ruleSymbolRef, position442) + } + return true + l441: + position, tokenIndex = position441, tokenIndex441 + return false + }, + /* 34 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ + func() bool { + position455, tokenIndex455 := position, tokenIndex + { + position456 := position + if buffer[position] != rune('(') { + goto l455 + } + position++ + { + position457, tokenIndex457 := position, tokenIndex + if !_rules[ruleRegisterOrConstant]() { + goto l457 + } + goto l458 + l457: + position, tokenIndex = position457, tokenIndex457 + } + l458: + { + position459, tokenIndex459 := position, tokenIndex + if !_rules[ruleWS]() { + goto l459 + } + goto l460 + l459: + position, tokenIndex = position459, tokenIndex459 + } + l460: + { + position461, tokenIndex461 := position, tokenIndex + if buffer[position] != rune(',') { + goto l461 + } + position++ + { + position463, tokenIndex463 := position, tokenIndex + if !_rules[ruleWS]() { + goto l463 + } + goto l464 + l463: + position, tokenIndex = position463, tokenIndex463 + } + l464: + if !_rules[ruleRegisterOrConstant]() { + goto l461 + } + { + position465, tokenIndex465 := position, tokenIndex + if !_rules[ruleWS]() { + goto l465 + } + goto l466 + l465: + position, tokenIndex = position465, tokenIndex465 + } + l466: + { + position467, tokenIndex467 := position, tokenIndex + if buffer[position] != rune(',') { + goto l467 + } + position++ + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l467 + } + position++ + l469: + { + position470, tokenIndex470 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l470 + } + position++ + goto l469 + l470: + position, tokenIndex = position470, tokenIndex470 + } + goto l468 + l467: + position, tokenIndex = position467, tokenIndex467 + } + l468: + goto l462 + l461: + position, tokenIndex = position461, tokenIndex461 + } + l462: + if buffer[position] != rune(')') { + goto l455 + } + position++ + add(ruleBaseIndexScale, position456) + } + return true + l455: + position, tokenIndex = position455, tokenIndex455 + return false + }, + /* 35 Operator <- <('+' / '-')> */ + func() bool { + position471, tokenIndex471 := position, tokenIndex + { + position472 := position + { + position473, tokenIndex473 := position, tokenIndex + if buffer[position] != rune('+') { + goto l474 + } + position++ + goto l473 + l474: + position, tokenIndex = position473, tokenIndex473 + if buffer[position] != rune('-') { + goto l471 + } + position++ + } + l473: + add(ruleOperator, position472) + } + return true + l471: + position, tokenIndex = position471, tokenIndex471 + return false + }, + /* 36 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ + func() bool { + position475, tokenIndex475 := position, tokenIndex + { + position476 := position + { + position477, tokenIndex477 := position, tokenIndex + if buffer[position] != rune('+') { + goto l477 + } + position++ + goto l478 + l477: + position, tokenIndex = position477, tokenIndex477 + } + l478: + { + position479, tokenIndex479 := position, tokenIndex + if buffer[position] != rune('-') { + goto l479 + } + position++ + goto l480 + l479: + position, tokenIndex = position479, tokenIndex479 + } + l480: + { + position481, tokenIndex481 := position, tokenIndex + if buffer[position] != rune('0') { + goto l482 + } + position++ + { + position483, tokenIndex483 := position, tokenIndex + if buffer[position] != rune('b') { + goto l484 + } + position++ + goto l483 + l484: + position, tokenIndex = position483, tokenIndex483 + if buffer[position] != rune('B') { + goto l482 + } + position++ + } + l483: + { + position487, tokenIndex487 := position, tokenIndex + if buffer[position] != rune('0') { + goto l488 + } + position++ + goto l487 + l488: + position, tokenIndex = position487, tokenIndex487 + if buffer[position] != rune('1') { + goto l482 + } + position++ + } + l487: + l485: + { + position486, tokenIndex486 := position, tokenIndex + { + position489, tokenIndex489 := position, tokenIndex + if buffer[position] != rune('0') { + goto l490 + } + position++ + goto l489 + l490: + position, tokenIndex = position489, tokenIndex489 + if buffer[position] != rune('1') { + goto l486 + } + position++ + } + l489: + goto l485 + l486: + position, tokenIndex = position486, tokenIndex486 + } + goto l481 + l482: + position, tokenIndex = position481, tokenIndex481 + if buffer[position] != rune('0') { + goto l491 + } + position++ + { + position492, tokenIndex492 := position, tokenIndex + if buffer[position] != rune('x') { + goto l493 + } + position++ + goto l492 + l493: + position, tokenIndex = position492, tokenIndex492 + if buffer[position] != rune('X') { + goto l491 + } + position++ + } + l492: + { + position496, tokenIndex496 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l497 + } + position++ + goto l496 + l497: + position, tokenIndex = position496, tokenIndex496 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l498 + } + position++ + goto l496 + l498: + position, tokenIndex = position496, tokenIndex496 + { + position499, tokenIndex499 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l500 + } + position++ + goto l499 + l500: + position, tokenIndex = position499, tokenIndex499 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l491 + } + position++ + } + l499: + } + l496: + l494: + { + position495, tokenIndex495 := position, tokenIndex + { + position501, tokenIndex501 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l502 + } + position++ + goto l501 + l502: + position, tokenIndex = position501, tokenIndex501 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l503 + } + position++ + goto l501 + l503: + position, tokenIndex = position501, tokenIndex501 + { + position504, tokenIndex504 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l505 + } + position++ + goto l504 + l505: + position, tokenIndex = position504, tokenIndex504 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l495 + } + position++ + } + l504: + } + l501: + goto l494 + l495: + position, tokenIndex = position495, tokenIndex495 + } + goto l481 + l491: + position, tokenIndex = position481, tokenIndex481 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l475 + } + position++ + l506: + { + position507, tokenIndex507 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l507 + } + position++ + goto l506 + l507: + position, tokenIndex = position507, tokenIndex507 + } + } + l481: + add(ruleOffset, position476) + } + return true + l475: + position, tokenIndex = position475, tokenIndex475 + return false + }, + /* 37 Section <- <([a-z] / [A-Z] / '@')+> */ + func() bool { + position508, tokenIndex508 := position, tokenIndex + { + position509 := position + { + position512, tokenIndex512 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l513 + } + position++ + goto l512 + l513: + position, tokenIndex = position512, tokenIndex512 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l514 + } + position++ + goto l512 + l514: + position, tokenIndex = position512, tokenIndex512 + if buffer[position] != rune('@') { + goto l508 + } + position++ + } + l512: + l510: + { + position511, tokenIndex511 := position, tokenIndex + { + position515, tokenIndex515 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l516 + } + position++ + goto l515 + l516: + position, tokenIndex = position515, tokenIndex515 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l517 + } + position++ + goto l515 + l517: + position, tokenIndex = position515, tokenIndex515 + if buffer[position] != rune('@') { + goto l511 + } + position++ + } + l515: + goto l510 + l511: + position, tokenIndex = position511, tokenIndex511 + } + add(ruleSection, position509) + } + return true + l508: + position, tokenIndex = position508, tokenIndex508 + return false + }, + /* 38 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ + func() bool { + position518, tokenIndex518 := position, tokenIndex + { + position519 := position + if buffer[position] != rune('%') { + goto l518 + } + position++ + { + position520, tokenIndex520 := position, tokenIndex + if c := buffer[position]; c < rune('c') || c > rune('g') { + goto l521 + } + position++ + goto l520 + l521: + position, tokenIndex = position520, tokenIndex520 + if buffer[position] != rune('s') { + goto l518 + } + position++ + } + l520: + if buffer[position] != rune('s') { + goto l518 + } + position++ + if buffer[position] != rune(':') { + goto l518 + } + position++ + add(ruleSegmentRegister, position519) + } + return true + l518: + position, tokenIndex = position518, tokenIndex518 + return false + }, + } + p.rules = _rules +} |