You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

4018 lines
90 KiB

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