| 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 |
| } |