/myGems/ruby/1.8/gems/treetop-1.4.10/lib/treetop/compiler/metagrammar.rb

https://github.com/csnelgrove/demo_app · Ruby · 2086 lines · 1874 code · 211 blank · 1 comment · 280 complexity · 21aef5f8fd4ab0dd3f01175234356800 MD5 · raw file

  1. # Autogenerated from a Treetop grammar. Edits may be lost.
  2. module Treetop
  3. module Compiler
  4. module Metagrammar
  5. include Treetop::Runtime
  6. def root
  7. @root ||= :treetop_file
  8. end
  9. module TreetopFile0
  10. def require_statement
  11. elements[1]
  12. end
  13. end
  14. module TreetopFile1
  15. def requires
  16. elements[0]
  17. end
  18. def prefix
  19. elements[1]
  20. end
  21. def module_or_grammar
  22. elements[2]
  23. end
  24. def suffix
  25. elements[3]
  26. end
  27. end
  28. module TreetopFile2
  29. def compile
  30. requires.text_value + prefix.text_value + module_or_grammar.compile + suffix.text_value
  31. end
  32. end
  33. def _nt_treetop_file
  34. start_index = index
  35. if node_cache[:treetop_file].has_key?(index)
  36. cached = node_cache[:treetop_file][index]
  37. if cached
  38. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  39. @index = cached.interval.end
  40. end
  41. return cached
  42. end
  43. i0, s0 = index, []
  44. s1, i1 = [], index
  45. loop do
  46. i2, s2 = index, []
  47. r4 = _nt_space
  48. if r4
  49. r3 = r4
  50. else
  51. r3 = instantiate_node(SyntaxNode,input, index...index)
  52. end
  53. s2 << r3
  54. if r3
  55. r5 = _nt_require_statement
  56. s2 << r5
  57. end
  58. if s2.last
  59. r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
  60. r2.extend(TreetopFile0)
  61. else
  62. @index = i2
  63. r2 = nil
  64. end
  65. if r2
  66. s1 << r2
  67. else
  68. break
  69. end
  70. end
  71. r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  72. s0 << r1
  73. if r1
  74. r7 = _nt_space
  75. if r7
  76. r6 = r7
  77. else
  78. r6 = instantiate_node(SyntaxNode,input, index...index)
  79. end
  80. s0 << r6
  81. if r6
  82. r8 = _nt_module_or_grammar
  83. s0 << r8
  84. if r8
  85. r10 = _nt_space
  86. if r10
  87. r9 = r10
  88. else
  89. r9 = instantiate_node(SyntaxNode,input, index...index)
  90. end
  91. s0 << r9
  92. end
  93. end
  94. end
  95. if s0.last
  96. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  97. r0.extend(TreetopFile1)
  98. r0.extend(TreetopFile2)
  99. else
  100. @index = i0
  101. r0 = nil
  102. end
  103. node_cache[:treetop_file][start_index] = r0
  104. r0
  105. end
  106. module RequireStatement0
  107. def prefix
  108. elements[0]
  109. end
  110. end
  111. def _nt_require_statement
  112. start_index = index
  113. if node_cache[:require_statement].has_key?(index)
  114. cached = node_cache[:require_statement][index]
  115. if cached
  116. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  117. @index = cached.interval.end
  118. end
  119. return cached
  120. end
  121. i0, s0 = index, []
  122. r2 = _nt_space
  123. if r2
  124. r1 = r2
  125. else
  126. r1 = instantiate_node(SyntaxNode,input, index...index)
  127. end
  128. s0 << r1
  129. if r1
  130. if has_terminal?("require", false, index)
  131. r3 = instantiate_node(SyntaxNode,input, index...(index + 7))
  132. @index += 7
  133. else
  134. terminal_parse_failure("require")
  135. r3 = nil
  136. end
  137. s0 << r3
  138. if r3
  139. s4, i4 = [], index
  140. loop do
  141. if has_terminal?('\G[ \\t]', true, index)
  142. r5 = true
  143. @index += 1
  144. else
  145. r5 = nil
  146. end
  147. if r5
  148. s4 << r5
  149. else
  150. break
  151. end
  152. end
  153. if s4.empty?
  154. @index = i4
  155. r4 = nil
  156. else
  157. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  158. end
  159. s0 << r4
  160. if r4
  161. s6, i6 = [], index
  162. loop do
  163. if has_terminal?('\G[^\\n\\r]', true, index)
  164. r7 = true
  165. @index += 1
  166. else
  167. r7 = nil
  168. end
  169. if r7
  170. s6 << r7
  171. else
  172. break
  173. end
  174. end
  175. if s6.empty?
  176. @index = i6
  177. r6 = nil
  178. else
  179. r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
  180. end
  181. s0 << r6
  182. if r6
  183. if has_terminal?('\G[\\n\\r]', true, index)
  184. r8 = true
  185. @index += 1
  186. else
  187. r8 = nil
  188. end
  189. s0 << r8
  190. end
  191. end
  192. end
  193. end
  194. if s0.last
  195. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  196. r0.extend(RequireStatement0)
  197. else
  198. @index = i0
  199. r0 = nil
  200. end
  201. node_cache[:require_statement][start_index] = r0
  202. r0
  203. end
  204. def _nt_module_or_grammar
  205. start_index = index
  206. if node_cache[:module_or_grammar].has_key?(index)
  207. cached = node_cache[:module_or_grammar][index]
  208. if cached
  209. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  210. @index = cached.interval.end
  211. end
  212. return cached
  213. end
  214. i0 = index
  215. r1 = _nt_module_declaration
  216. if r1
  217. r0 = r1
  218. else
  219. r2 = _nt_grammar
  220. if r2
  221. r0 = r2
  222. else
  223. @index = i0
  224. r0 = nil
  225. end
  226. end
  227. node_cache[:module_or_grammar][start_index] = r0
  228. r0
  229. end
  230. module ModuleDeclaration0
  231. end
  232. module ModuleDeclaration1
  233. end
  234. module ModuleDeclaration2
  235. def space1
  236. elements[1]
  237. end
  238. def name
  239. elements[2]
  240. end
  241. def space2
  242. elements[3]
  243. end
  244. end
  245. module ModuleDeclaration3
  246. def space
  247. elements[0]
  248. end
  249. end
  250. module ModuleDeclaration4
  251. def prefix
  252. elements[0]
  253. end
  254. def module_contents
  255. elements[1]
  256. end
  257. def suffix
  258. elements[2]
  259. end
  260. end
  261. module ModuleDeclaration5
  262. def compile
  263. prefix.text_value + module_contents.compile + suffix.text_value
  264. end
  265. def parser_name
  266. prefix.name.text_value+'::'+module_contents.parser_name
  267. end
  268. end
  269. def _nt_module_declaration
  270. start_index = index
  271. if node_cache[:module_declaration].has_key?(index)
  272. cached = node_cache[:module_declaration][index]
  273. if cached
  274. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  275. @index = cached.interval.end
  276. end
  277. return cached
  278. end
  279. i0, s0 = index, []
  280. i1, s1 = index, []
  281. if has_terminal?('module', false, index)
  282. r2 = instantiate_node(SyntaxNode,input, index...(index + 6))
  283. @index += 6
  284. else
  285. terminal_parse_failure('module')
  286. r2 = nil
  287. end
  288. s1 << r2
  289. if r2
  290. r3 = _nt_space
  291. s1 << r3
  292. if r3
  293. i4, s4 = index, []
  294. if has_terminal?('\G[A-Z]', true, index)
  295. r5 = true
  296. @index += 1
  297. else
  298. r5 = nil
  299. end
  300. s4 << r5
  301. if r5
  302. s6, i6 = [], index
  303. loop do
  304. r7 = _nt_alphanumeric_char
  305. if r7
  306. s6 << r7
  307. else
  308. break
  309. end
  310. end
  311. r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
  312. s4 << r6
  313. if r6
  314. s8, i8 = [], index
  315. loop do
  316. i9, s9 = index, []
  317. if has_terminal?('::', false, index)
  318. r10 = instantiate_node(SyntaxNode,input, index...(index + 2))
  319. @index += 2
  320. else
  321. terminal_parse_failure('::')
  322. r10 = nil
  323. end
  324. s9 << r10
  325. if r10
  326. if has_terminal?('\G[A-Z]', true, index)
  327. r11 = true
  328. @index += 1
  329. else
  330. r11 = nil
  331. end
  332. s9 << r11
  333. if r11
  334. s12, i12 = [], index
  335. loop do
  336. r13 = _nt_alphanumeric_char
  337. if r13
  338. s12 << r13
  339. else
  340. break
  341. end
  342. end
  343. r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
  344. s9 << r12
  345. end
  346. end
  347. if s9.last
  348. r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
  349. r9.extend(ModuleDeclaration0)
  350. else
  351. @index = i9
  352. r9 = nil
  353. end
  354. if r9
  355. s8 << r9
  356. else
  357. break
  358. end
  359. end
  360. r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
  361. s4 << r8
  362. end
  363. end
  364. if s4.last
  365. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  366. r4.extend(ModuleDeclaration1)
  367. else
  368. @index = i4
  369. r4 = nil
  370. end
  371. s1 << r4
  372. if r4
  373. r14 = _nt_space
  374. s1 << r14
  375. end
  376. end
  377. end
  378. if s1.last
  379. r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  380. r1.extend(ModuleDeclaration2)
  381. else
  382. @index = i1
  383. r1 = nil
  384. end
  385. s0 << r1
  386. if r1
  387. i15 = index
  388. r16 = _nt_module_declaration
  389. if r16
  390. r15 = r16
  391. else
  392. r17 = _nt_grammar
  393. if r17
  394. r15 = r17
  395. else
  396. @index = i15
  397. r15 = nil
  398. end
  399. end
  400. s0 << r15
  401. if r15
  402. i18, s18 = index, []
  403. r19 = _nt_space
  404. s18 << r19
  405. if r19
  406. if has_terminal?('end', false, index)
  407. r20 = instantiate_node(SyntaxNode,input, index...(index + 3))
  408. @index += 3
  409. else
  410. terminal_parse_failure('end')
  411. r20 = nil
  412. end
  413. s18 << r20
  414. end
  415. if s18.last
  416. r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
  417. r18.extend(ModuleDeclaration3)
  418. else
  419. @index = i18
  420. r18 = nil
  421. end
  422. s0 << r18
  423. end
  424. end
  425. if s0.last
  426. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  427. r0.extend(ModuleDeclaration4)
  428. r0.extend(ModuleDeclaration5)
  429. else
  430. @index = i0
  431. r0 = nil
  432. end
  433. node_cache[:module_declaration][start_index] = r0
  434. r0
  435. end
  436. module Grammar0
  437. def space
  438. elements[1]
  439. end
  440. end
  441. module Grammar1
  442. def space1
  443. elements[1]
  444. end
  445. def grammar_name
  446. elements[2]
  447. end
  448. def space2
  449. elements[3]
  450. end
  451. def declaration_sequence
  452. elements[5]
  453. end
  454. end
  455. def _nt_grammar
  456. start_index = index
  457. if node_cache[:grammar].has_key?(index)
  458. cached = node_cache[:grammar][index]
  459. if cached
  460. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  461. @index = cached.interval.end
  462. end
  463. return cached
  464. end
  465. i0, s0 = index, []
  466. if has_terminal?('grammar', false, index)
  467. r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
  468. @index += 7
  469. else
  470. terminal_parse_failure('grammar')
  471. r1 = nil
  472. end
  473. s0 << r1
  474. if r1
  475. r2 = _nt_space
  476. s0 << r2
  477. if r2
  478. r3 = _nt_grammar_name
  479. s0 << r3
  480. if r3
  481. r4 = _nt_space
  482. s0 << r4
  483. if r4
  484. i6, s6 = index, []
  485. if has_terminal?('do', false, index)
  486. r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
  487. @index += 2
  488. else
  489. terminal_parse_failure('do')
  490. r7 = nil
  491. end
  492. s6 << r7
  493. if r7
  494. r8 = _nt_space
  495. s6 << r8
  496. end
  497. if s6.last
  498. r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
  499. r6.extend(Grammar0)
  500. else
  501. @index = i6
  502. r6 = nil
  503. end
  504. if r6
  505. r5 = r6
  506. else
  507. r5 = instantiate_node(SyntaxNode,input, index...index)
  508. end
  509. s0 << r5
  510. if r5
  511. r9 = _nt_declaration_sequence
  512. s0 << r9
  513. if r9
  514. r11 = _nt_space
  515. if r11
  516. r10 = r11
  517. else
  518. r10 = instantiate_node(SyntaxNode,input, index...index)
  519. end
  520. s0 << r10
  521. if r10
  522. if has_terminal?('end', false, index)
  523. r12 = instantiate_node(SyntaxNode,input, index...(index + 3))
  524. @index += 3
  525. else
  526. terminal_parse_failure('end')
  527. r12 = nil
  528. end
  529. s0 << r12
  530. end
  531. end
  532. end
  533. end
  534. end
  535. end
  536. end
  537. if s0.last
  538. r0 = instantiate_node(Grammar,input, i0...index, s0)
  539. r0.extend(Grammar1)
  540. else
  541. @index = i0
  542. r0 = nil
  543. end
  544. node_cache[:grammar][start_index] = r0
  545. r0
  546. end
  547. module GrammarName0
  548. end
  549. def _nt_grammar_name
  550. start_index = index
  551. if node_cache[:grammar_name].has_key?(index)
  552. cached = node_cache[:grammar_name][index]
  553. if cached
  554. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  555. @index = cached.interval.end
  556. end
  557. return cached
  558. end
  559. i0, s0 = index, []
  560. if has_terminal?('\G[A-Z]', true, index)
  561. r1 = true
  562. @index += 1
  563. else
  564. r1 = nil
  565. end
  566. s0 << r1
  567. if r1
  568. s2, i2 = [], index
  569. loop do
  570. r3 = _nt_alphanumeric_char
  571. if r3
  572. s2 << r3
  573. else
  574. break
  575. end
  576. end
  577. r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
  578. s0 << r2
  579. end
  580. if s0.last
  581. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  582. r0.extend(GrammarName0)
  583. else
  584. @index = i0
  585. r0 = nil
  586. end
  587. node_cache[:grammar_name][start_index] = r0
  588. r0
  589. end
  590. module DeclarationSequence0
  591. def space
  592. elements[0]
  593. end
  594. def declaration
  595. elements[1]
  596. end
  597. end
  598. module DeclarationSequence1
  599. def head
  600. elements[0]
  601. end
  602. def tail
  603. elements[1]
  604. end
  605. end
  606. module DeclarationSequence2
  607. def declarations
  608. [head] + tail
  609. end
  610. def tail
  611. super.elements.map { |elt| elt.declaration }
  612. end
  613. end
  614. module DeclarationSequence3
  615. def compile(builder)
  616. end
  617. end
  618. def _nt_declaration_sequence
  619. start_index = index
  620. if node_cache[:declaration_sequence].has_key?(index)
  621. cached = node_cache[:declaration_sequence][index]
  622. if cached
  623. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  624. @index = cached.interval.end
  625. end
  626. return cached
  627. end
  628. i0 = index
  629. i1, s1 = index, []
  630. r2 = _nt_declaration
  631. s1 << r2
  632. if r2
  633. s3, i3 = [], index
  634. loop do
  635. i4, s4 = index, []
  636. r5 = _nt_space
  637. s4 << r5
  638. if r5
  639. r6 = _nt_declaration
  640. s4 << r6
  641. end
  642. if s4.last
  643. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  644. r4.extend(DeclarationSequence0)
  645. else
  646. @index = i4
  647. r4 = nil
  648. end
  649. if r4
  650. s3 << r4
  651. else
  652. break
  653. end
  654. end
  655. r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
  656. s1 << r3
  657. end
  658. if s1.last
  659. r1 = instantiate_node(DeclarationSequence,input, i1...index, s1)
  660. r1.extend(DeclarationSequence1)
  661. r1.extend(DeclarationSequence2)
  662. else
  663. @index = i1
  664. r1 = nil
  665. end
  666. if r1
  667. r0 = r1
  668. else
  669. if has_terminal?('', false, index)
  670. r7 = instantiate_node(SyntaxNode,input, index...(index + 0))
  671. r7.extend(DeclarationSequence3)
  672. @index += 0
  673. else
  674. terminal_parse_failure('')
  675. r7 = nil
  676. end
  677. if r7
  678. r0 = r7
  679. else
  680. @index = i0
  681. r0 = nil
  682. end
  683. end
  684. node_cache[:declaration_sequence][start_index] = r0
  685. r0
  686. end
  687. def _nt_declaration
  688. start_index = index
  689. if node_cache[:declaration].has_key?(index)
  690. cached = node_cache[:declaration][index]
  691. if cached
  692. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  693. @index = cached.interval.end
  694. end
  695. return cached
  696. end
  697. i0 = index
  698. r1 = _nt_parsing_rule
  699. if r1
  700. r0 = r1
  701. else
  702. r2 = _nt_include_declaration
  703. if r2
  704. r0 = r2
  705. else
  706. @index = i0
  707. r0 = nil
  708. end
  709. end
  710. node_cache[:declaration][start_index] = r0
  711. r0
  712. end
  713. module IncludeDeclaration0
  714. def space
  715. elements[1]
  716. end
  717. end
  718. module IncludeDeclaration1
  719. def compile(builder)
  720. builder << text_value
  721. end
  722. end
  723. def _nt_include_declaration
  724. start_index = index
  725. if node_cache[:include_declaration].has_key?(index)
  726. cached = node_cache[:include_declaration][index]
  727. if cached
  728. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  729. @index = cached.interval.end
  730. end
  731. return cached
  732. end
  733. i0, s0 = index, []
  734. if has_terminal?('include', false, index)
  735. r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
  736. @index += 7
  737. else
  738. terminal_parse_failure('include')
  739. r1 = nil
  740. end
  741. s0 << r1
  742. if r1
  743. r2 = _nt_space
  744. s0 << r2
  745. if r2
  746. if has_terminal?('\G[A-Z]', true, index)
  747. r3 = true
  748. @index += 1
  749. else
  750. r3 = nil
  751. end
  752. s0 << r3
  753. if r3
  754. s4, i4 = [], index
  755. loop do
  756. i5 = index
  757. r6 = _nt_alphanumeric_char
  758. if r6
  759. r5 = r6
  760. else
  761. if has_terminal?('::', false, index)
  762. r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
  763. @index += 2
  764. else
  765. terminal_parse_failure('::')
  766. r7 = nil
  767. end
  768. if r7
  769. r5 = r7
  770. else
  771. @index = i5
  772. r5 = nil
  773. end
  774. end
  775. if r5
  776. s4 << r5
  777. else
  778. break
  779. end
  780. end
  781. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  782. s0 << r4
  783. end
  784. end
  785. end
  786. if s0.last
  787. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  788. r0.extend(IncludeDeclaration0)
  789. r0.extend(IncludeDeclaration1)
  790. else
  791. @index = i0
  792. r0 = nil
  793. end
  794. node_cache[:include_declaration][start_index] = r0
  795. r0
  796. end
  797. module ParsingRule0
  798. def space
  799. elements[1]
  800. end
  801. end
  802. module ParsingRule1
  803. def space1
  804. elements[1]
  805. end
  806. def nonterminal
  807. elements[2]
  808. end
  809. def space2
  810. elements[3]
  811. end
  812. def parsing_expression
  813. elements[5]
  814. end
  815. def space3
  816. elements[6]
  817. end
  818. end
  819. def _nt_parsing_rule
  820. start_index = index
  821. if node_cache[:parsing_rule].has_key?(index)
  822. cached = node_cache[:parsing_rule][index]
  823. if cached
  824. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  825. @index = cached.interval.end
  826. end
  827. return cached
  828. end
  829. i0, s0 = index, []
  830. if has_terminal?('rule', false, index)
  831. r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
  832. @index += 4
  833. else
  834. terminal_parse_failure('rule')
  835. r1 = nil
  836. end
  837. s0 << r1
  838. if r1
  839. r2 = _nt_space
  840. s0 << r2
  841. if r2
  842. r3 = _nt_nonterminal
  843. s0 << r3
  844. if r3
  845. r4 = _nt_space
  846. s0 << r4
  847. if r4
  848. i6, s6 = index, []
  849. if has_terminal?('do', false, index)
  850. r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
  851. @index += 2
  852. else
  853. terminal_parse_failure('do')
  854. r7 = nil
  855. end
  856. s6 << r7
  857. if r7
  858. r8 = _nt_space
  859. s6 << r8
  860. end
  861. if s6.last
  862. r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
  863. r6.extend(ParsingRule0)
  864. else
  865. @index = i6
  866. r6 = nil
  867. end
  868. if r6
  869. r5 = r6
  870. else
  871. r5 = instantiate_node(SyntaxNode,input, index...index)
  872. end
  873. s0 << r5
  874. if r5
  875. r9 = _nt_parsing_expression
  876. s0 << r9
  877. if r9
  878. r10 = _nt_space
  879. s0 << r10
  880. if r10
  881. if has_terminal?('end', false, index)
  882. r11 = instantiate_node(SyntaxNode,input, index...(index + 3))
  883. @index += 3
  884. else
  885. terminal_parse_failure('end')
  886. r11 = nil
  887. end
  888. s0 << r11
  889. end
  890. end
  891. end
  892. end
  893. end
  894. end
  895. end
  896. if s0.last
  897. r0 = instantiate_node(ParsingRule,input, i0...index, s0)
  898. r0.extend(ParsingRule1)
  899. else
  900. @index = i0
  901. r0 = nil
  902. end
  903. node_cache[:parsing_rule][start_index] = r0
  904. r0
  905. end
  906. def _nt_parsing_expression
  907. start_index = index
  908. if node_cache[:parsing_expression].has_key?(index)
  909. cached = node_cache[:parsing_expression][index]
  910. if cached
  911. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  912. @index = cached.interval.end
  913. end
  914. return cached
  915. end
  916. i0 = index
  917. r1 = _nt_choice
  918. if r1
  919. r0 = r1
  920. else
  921. r2 = _nt_sequence
  922. if r2
  923. r0 = r2
  924. else
  925. r3 = _nt_primary
  926. if r3
  927. r0 = r3
  928. else
  929. @index = i0
  930. r0 = nil
  931. end
  932. end
  933. end
  934. node_cache[:parsing_expression][start_index] = r0
  935. r0
  936. end
  937. module Choice0
  938. def alternative
  939. elements[3]
  940. end
  941. end
  942. module Choice1
  943. def head
  944. elements[0]
  945. end
  946. def tail
  947. elements[1]
  948. end
  949. end
  950. module Choice2
  951. def alternatives
  952. [head] + tail
  953. end
  954. def tail
  955. super.elements.map {|elt| elt.alternative}
  956. end
  957. def inline_modules
  958. (alternatives.map {|alt| alt.inline_modules }).flatten
  959. end
  960. end
  961. def _nt_choice
  962. start_index = index
  963. if node_cache[:choice].has_key?(index)
  964. cached = node_cache[:choice][index]
  965. if cached
  966. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  967. @index = cached.interval.end
  968. end
  969. return cached
  970. end
  971. i0, s0 = index, []
  972. r1 = _nt_alternative
  973. s0 << r1
  974. if r1
  975. s2, i2 = [], index
  976. loop do
  977. i3, s3 = index, []
  978. r5 = _nt_space
  979. if r5
  980. r4 = r5
  981. else
  982. r4 = instantiate_node(SyntaxNode,input, index...index)
  983. end
  984. s3 << r4
  985. if r4
  986. if has_terminal?('/', false, index)
  987. r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
  988. @index += 1
  989. else
  990. terminal_parse_failure('/')
  991. r6 = nil
  992. end
  993. s3 << r6
  994. if r6
  995. r8 = _nt_space
  996. if r8
  997. r7 = r8
  998. else
  999. r7 = instantiate_node(SyntaxNode,input, index...index)
  1000. end
  1001. s3 << r7
  1002. if r7
  1003. r9 = _nt_alternative
  1004. s3 << r9
  1005. end
  1006. end
  1007. end
  1008. if s3.last
  1009. r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
  1010. r3.extend(Choice0)
  1011. else
  1012. @index = i3
  1013. r3 = nil
  1014. end
  1015. if r3
  1016. s2 << r3
  1017. else
  1018. break
  1019. end
  1020. end
  1021. if s2.empty?
  1022. @index = i2
  1023. r2 = nil
  1024. else
  1025. r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
  1026. end
  1027. s0 << r2
  1028. end
  1029. if s0.last
  1030. r0 = instantiate_node(Choice,input, i0...index, s0)
  1031. r0.extend(Choice1)
  1032. r0.extend(Choice2)
  1033. else
  1034. @index = i0
  1035. r0 = nil
  1036. end
  1037. node_cache[:choice][start_index] = r0
  1038. r0
  1039. end
  1040. module Sequence0
  1041. def space
  1042. elements[0]
  1043. end
  1044. def labeled_sequence_primary
  1045. elements[1]
  1046. end
  1047. end
  1048. module Sequence1
  1049. def head
  1050. elements[0]
  1051. end
  1052. def tail
  1053. elements[1]
  1054. end
  1055. def node_class_declarations
  1056. elements[2]
  1057. end
  1058. end
  1059. module Sequence2
  1060. def sequence_elements
  1061. [head] + tail
  1062. end
  1063. def tail
  1064. super.elements.map {|elt| elt.labeled_sequence_primary }
  1065. end
  1066. def inline_modules
  1067. (sequence_elements.map {|elt| elt.inline_modules}).flatten +
  1068. [sequence_element_accessor_module] +
  1069. node_class_declarations.inline_modules
  1070. end
  1071. def inline_module_name
  1072. node_class_declarations.inline_module_name
  1073. end
  1074. end
  1075. def _nt_sequence
  1076. start_index = index
  1077. if node_cache[:sequence].has_key?(index)
  1078. cached = node_cache[:sequence][index]
  1079. if cached
  1080. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1081. @index = cached.interval.end
  1082. end
  1083. return cached
  1084. end
  1085. i0, s0 = index, []
  1086. r1 = _nt_labeled_sequence_primary
  1087. s0 << r1
  1088. if r1
  1089. s2, i2 = [], index
  1090. loop do
  1091. i3, s3 = index, []
  1092. r4 = _nt_space
  1093. s3 << r4
  1094. if r4
  1095. r5 = _nt_labeled_sequence_primary
  1096. s3 << r5
  1097. end
  1098. if s3.last
  1099. r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
  1100. r3.extend(Sequence0)
  1101. else
  1102. @index = i3
  1103. r3 = nil
  1104. end
  1105. if r3
  1106. s2 << r3
  1107. else
  1108. break
  1109. end
  1110. end
  1111. if s2.empty?
  1112. @index = i2
  1113. r2 = nil
  1114. else
  1115. r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
  1116. end
  1117. s0 << r2
  1118. if r2
  1119. r6 = _nt_node_class_declarations
  1120. s0 << r6
  1121. end
  1122. end
  1123. if s0.last
  1124. r0 = instantiate_node(Sequence,input, i0...index, s0)
  1125. r0.extend(Sequence1)
  1126. r0.extend(Sequence2)
  1127. else
  1128. @index = i0
  1129. r0 = nil
  1130. end
  1131. node_cache[:sequence][start_index] = r0
  1132. r0
  1133. end
  1134. def _nt_alternative
  1135. start_index = index
  1136. if node_cache[:alternative].has_key?(index)
  1137. cached = node_cache[:alternative][index]
  1138. if cached
  1139. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1140. @index = cached.interval.end
  1141. end
  1142. return cached
  1143. end
  1144. i0 = index
  1145. r1 = _nt_sequence
  1146. if r1
  1147. r0 = r1
  1148. else
  1149. r2 = _nt_primary
  1150. if r2
  1151. r0 = r2
  1152. else
  1153. @index = i0
  1154. r0 = nil
  1155. end
  1156. end
  1157. node_cache[:alternative][start_index] = r0
  1158. r0
  1159. end
  1160. module Primary0
  1161. def prefix
  1162. elements[0]
  1163. end
  1164. def atomic
  1165. elements[1]
  1166. end
  1167. end
  1168. module Primary1
  1169. def compile(address, builder, parent_expression=nil)
  1170. prefix.compile(address, builder, self)
  1171. end
  1172. def prefixed_expression
  1173. atomic
  1174. end
  1175. def inline_modules
  1176. atomic.inline_modules
  1177. end
  1178. def inline_module_name
  1179. nil
  1180. end
  1181. end
  1182. module Primary2
  1183. def prefix
  1184. elements[0]
  1185. end
  1186. def predicate_block
  1187. elements[2]
  1188. end
  1189. end
  1190. module Primary3
  1191. def compile(address, builder, parent_expression=nil)
  1192. prefix.compile(address, builder, self)
  1193. end
  1194. def prefixed_expression
  1195. predicate_block
  1196. end
  1197. def inline_modules
  1198. []
  1199. end
  1200. end
  1201. module Primary4
  1202. def atomic
  1203. elements[0]
  1204. end
  1205. def suffix
  1206. elements[1]
  1207. end
  1208. def node_class_declarations
  1209. elements[2]
  1210. end
  1211. end
  1212. module Primary5
  1213. def compile(address, builder, parent_expression=nil)
  1214. suffix.compile(address, builder, self)
  1215. end
  1216. def optional_expression
  1217. atomic
  1218. end
  1219. def node_class_name
  1220. node_class_declarations.node_class_name
  1221. end
  1222. def inline_modules
  1223. atomic.inline_modules + node_class_declarations.inline_modules
  1224. end
  1225. def inline_module_name
  1226. node_class_declarations.inline_module_name
  1227. end
  1228. end
  1229. module Primary6
  1230. def atomic
  1231. elements[0]
  1232. end
  1233. def node_class_declarations
  1234. elements[1]
  1235. end
  1236. end
  1237. module Primary7
  1238. def compile(address, builder, parent_expression=nil)
  1239. atomic.compile(address, builder, self)
  1240. end
  1241. def node_class_name
  1242. node_class_declarations.node_class_name
  1243. end
  1244. def inline_modules
  1245. atomic.inline_modules + node_class_declarations.inline_modules
  1246. end
  1247. def inline_module_name
  1248. node_class_declarations.inline_module_name
  1249. end
  1250. end
  1251. def _nt_primary
  1252. start_index = index
  1253. if node_cache[:primary].has_key?(index)
  1254. cached = node_cache[:primary][index]
  1255. if cached
  1256. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1257. @index = cached.interval.end
  1258. end
  1259. return cached
  1260. end
  1261. i0 = index
  1262. i1, s1 = index, []
  1263. r2 = _nt_prefix
  1264. s1 << r2
  1265. if r2
  1266. r3 = _nt_atomic
  1267. s1 << r3
  1268. end
  1269. if s1.last
  1270. r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  1271. r1.extend(Primary0)
  1272. r1.extend(Primary1)
  1273. else
  1274. @index = i1
  1275. r1 = nil
  1276. end
  1277. if r1
  1278. r0 = r1
  1279. else
  1280. i4, s4 = index, []
  1281. r5 = _nt_prefix
  1282. s4 << r5
  1283. if r5
  1284. r7 = _nt_space
  1285. if r7
  1286. r6 = r7
  1287. else
  1288. r6 = instantiate_node(SyntaxNode,input, index...index)
  1289. end
  1290. s4 << r6
  1291. if r6
  1292. r8 = _nt_predicate_block
  1293. s4 << r8
  1294. end
  1295. end
  1296. if s4.last
  1297. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  1298. r4.extend(Primary2)
  1299. r4.extend(Primary3)
  1300. else
  1301. @index = i4
  1302. r4 = nil
  1303. end
  1304. if r4
  1305. r0 = r4
  1306. else
  1307. i9, s9 = index, []
  1308. r10 = _nt_atomic
  1309. s9 << r10
  1310. if r10
  1311. r11 = _nt_suffix
  1312. s9 << r11
  1313. if r11
  1314. r12 = _nt_node_class_declarations
  1315. s9 << r12
  1316. end
  1317. end
  1318. if s9.last
  1319. r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
  1320. r9.extend(Primary4)
  1321. r9.extend(Primary5)
  1322. else
  1323. @index = i9
  1324. r9 = nil
  1325. end
  1326. if r9
  1327. r0 = r9
  1328. else
  1329. i13, s13 = index, []
  1330. r14 = _nt_atomic
  1331. s13 << r14
  1332. if r14
  1333. r15 = _nt_node_class_declarations
  1334. s13 << r15
  1335. end
  1336. if s13.last
  1337. r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
  1338. r13.extend(Primary6)
  1339. r13.extend(Primary7)
  1340. else
  1341. @index = i13
  1342. r13 = nil
  1343. end
  1344. if r13
  1345. r0 = r13
  1346. else
  1347. @index = i0
  1348. r0 = nil
  1349. end
  1350. end
  1351. end
  1352. end
  1353. node_cache[:primary][start_index] = r0
  1354. r0
  1355. end
  1356. module LabeledSequencePrimary0
  1357. def label
  1358. elements[0]
  1359. end
  1360. def sequence_primary
  1361. elements[1]
  1362. end
  1363. end
  1364. module LabeledSequencePrimary1
  1365. def compile(lexical_address, builder)
  1366. sequence_primary.compile(lexical_address, builder)
  1367. end
  1368. def inline_modules
  1369. sequence_primary.inline_modules
  1370. end
  1371. def label_name
  1372. if label.name
  1373. label.name
  1374. elsif sequence_primary.instance_of?(Nonterminal)
  1375. sequence_primary.text_value
  1376. else
  1377. nil
  1378. end
  1379. end
  1380. end
  1381. def _nt_labeled_sequence_primary
  1382. start_index = index
  1383. if node_cache[:labeled_sequence_primary].has_key?(index)
  1384. cached = node_cache[:labeled_sequence_primary][index]
  1385. if cached
  1386. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1387. @index = cached.interval.end
  1388. end
  1389. return cached
  1390. end
  1391. i0, s0 = index, []
  1392. r1 = _nt_label
  1393. s0 << r1
  1394. if r1
  1395. r2 = _nt_sequence_primary
  1396. s0 << r2
  1397. end
  1398. if s0.last
  1399. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  1400. r0.extend(LabeledSequencePrimary0)
  1401. r0.extend(LabeledSequencePrimary1)
  1402. else
  1403. @index = i0
  1404. r0 = nil
  1405. end
  1406. node_cache[:labeled_sequence_primary][start_index] = r0
  1407. r0
  1408. end
  1409. module Label0
  1410. def alpha_char
  1411. elements[0]
  1412. end
  1413. end
  1414. module Label1
  1415. end
  1416. module Label2
  1417. def name
  1418. elements[0].text_value
  1419. end
  1420. end
  1421. module Label3
  1422. def name
  1423. nil
  1424. end
  1425. end
  1426. def _nt_label
  1427. start_index = index
  1428. if node_cache[:label].has_key?(index)
  1429. cached = node_cache[:label][index]
  1430. if cached
  1431. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1432. @index = cached.interval.end
  1433. end
  1434. return cached
  1435. end
  1436. i0 = index
  1437. i1, s1 = index, []
  1438. i2, s2 = index, []
  1439. r3 = _nt_alpha_char
  1440. s2 << r3
  1441. if r3
  1442. s4, i4 = [], index
  1443. loop do
  1444. r5 = _nt_alphanumeric_char
  1445. if r5
  1446. s4 << r5
  1447. else
  1448. break
  1449. end
  1450. end
  1451. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  1452. s2 << r4
  1453. end
  1454. if s2.last
  1455. r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
  1456. r2.extend(Label0)
  1457. else
  1458. @index = i2
  1459. r2 = nil
  1460. end
  1461. s1 << r2
  1462. if r2
  1463. if has_terminal?(':', false, index)
  1464. r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
  1465. @index += 1
  1466. else
  1467. terminal_parse_failure(':')
  1468. r6 = nil
  1469. end
  1470. s1 << r6
  1471. end
  1472. if s1.last
  1473. r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  1474. r1.extend(Label1)
  1475. r1.extend(Label2)
  1476. else
  1477. @index = i1
  1478. r1 = nil
  1479. end
  1480. if r1
  1481. r0 = r1
  1482. else
  1483. if has_terminal?('', false, index)
  1484. r7 = instantiate_node(SyntaxNode,input, index...(index + 0))
  1485. r7.extend(Label3)
  1486. @index += 0
  1487. else
  1488. terminal_parse_failure('')
  1489. r7 = nil
  1490. end
  1491. if r7
  1492. r0 = r7
  1493. else
  1494. @index = i0
  1495. r0 = nil
  1496. end
  1497. end
  1498. node_cache[:label][start_index] = r0
  1499. r0
  1500. end
  1501. module SequencePrimary0
  1502. def prefix
  1503. elements[0]
  1504. end
  1505. def atomic
  1506. elements[1]
  1507. end
  1508. end
  1509. module SequencePrimary1
  1510. def compile(lexical_address, builder)
  1511. prefix.compile(lexical_address, builder, self)
  1512. end
  1513. def prefixed_expression
  1514. elements[1]
  1515. end
  1516. def inline_modules
  1517. atomic.inline_modules
  1518. end
  1519. def inline_module_name
  1520. nil
  1521. end
  1522. end
  1523. module SequencePrimary2
  1524. def prefix
  1525. elements[0]
  1526. end
  1527. def predicate_block
  1528. elements[2]
  1529. end
  1530. end
  1531. module SequencePrimary3
  1532. def compile(address, builder, parent_expression=nil)
  1533. prefix.compile(address, builder, self)
  1534. end
  1535. def prefixed_expression
  1536. predicate_block
  1537. end
  1538. def inline_modules
  1539. []
  1540. end
  1541. end
  1542. module SequencePrimary4
  1543. def atomic
  1544. elements[0]
  1545. end
  1546. def suffix
  1547. elements[1]
  1548. end
  1549. end
  1550. module SequencePrimary5
  1551. def compile(lexical_address, builder)
  1552. suffix.compile(lexical_address, builder, self)
  1553. end
  1554. def node_class_name
  1555. nil
  1556. end
  1557. def inline_modules
  1558. atomic.inline_modules
  1559. end
  1560. def inline_module_name
  1561. nil
  1562. end
  1563. end
  1564. def _nt_sequence_primary
  1565. start_index = index
  1566. if node_cache[:sequence_primary].has_key?(index)
  1567. cached = node_cache[:sequence_primary][index]
  1568. if cached
  1569. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1570. @index = cached.interval.end
  1571. end
  1572. return cached
  1573. end
  1574. i0 = index
  1575. i1, s1 = index, []
  1576. r2 = _nt_prefix
  1577. s1 << r2
  1578. if r2
  1579. r3 = _nt_atomic
  1580. s1 << r3
  1581. end
  1582. if s1.last
  1583. r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
  1584. r1.extend(SequencePrimary0)
  1585. r1.extend(SequencePrimary1)
  1586. else
  1587. @index = i1
  1588. r1 = nil
  1589. end
  1590. if r1
  1591. r0 = r1
  1592. else
  1593. i4, s4 = index, []
  1594. r5 = _nt_prefix
  1595. s4 << r5
  1596. if r5
  1597. r7 = _nt_space
  1598. if r7
  1599. r6 = r7
  1600. else
  1601. r6 = instantiate_node(SyntaxNode,input, index...index)
  1602. end
  1603. s4 << r6
  1604. if r6
  1605. r8 = _nt_predicate_block
  1606. s4 << r8
  1607. end
  1608. end
  1609. if s4.last
  1610. r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
  1611. r4.extend(SequencePrimary2)
  1612. r4.extend(SequencePrimary3)
  1613. else
  1614. @index = i4
  1615. r4 = nil
  1616. end
  1617. if r4
  1618. r0 = r4
  1619. else
  1620. i9, s9 = index, []
  1621. r10 = _nt_atomic
  1622. s9 << r10
  1623. if r10
  1624. r11 = _nt_suffix
  1625. s9 << r11
  1626. end
  1627. if s9.last
  1628. r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
  1629. r9.extend(SequencePrimary4)
  1630. r9.extend(SequencePrimary5)
  1631. else
  1632. @index = i9
  1633. r9 = nil
  1634. end
  1635. if r9
  1636. r0 = r9
  1637. else
  1638. r12 = _nt_atomic
  1639. if r12
  1640. r0 = r12
  1641. else
  1642. @index = i0
  1643. r0 = nil
  1644. end
  1645. end
  1646. end
  1647. end
  1648. node_cache[:sequence_primary][start_index] = r0
  1649. r0
  1650. end
  1651. def _nt_suffix
  1652. start_index = index
  1653. if node_cache[:suffix].has_key?(index)
  1654. cached = node_cache[:suffix][index]
  1655. if cached
  1656. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1657. @index = cached.interval.end
  1658. end
  1659. return cached
  1660. end
  1661. i0 = index
  1662. r1 = _nt_repetition_suffix
  1663. if r1
  1664. r0 = r1
  1665. else
  1666. r2 = _nt_optional_suffix
  1667. if r2
  1668. r0 = r2
  1669. else
  1670. @index = i0
  1671. r0 = nil
  1672. end
  1673. end
  1674. node_cache[:suffix][start_index] = r0
  1675. r0
  1676. end
  1677. def _nt_optional_suffix
  1678. start_index = index
  1679. if node_cache[:optional_suffix].has_key?(index)
  1680. cached = node_cache[:optional_suffix][index]
  1681. if cached
  1682. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1683. @index = cached.interval.end
  1684. end
  1685. return cached
  1686. end
  1687. if has_terminal?('?', false, index)
  1688. r0 = instantiate_node(Optional,input, index...(index + 1))
  1689. @index += 1
  1690. else
  1691. terminal_parse_failure('?')
  1692. r0 = nil
  1693. end
  1694. node_cache[:optional_suffix][start_index] = r0
  1695. r0
  1696. end
  1697. module NodeClassDeclarations0
  1698. def node_class_expression
  1699. elements[0]
  1700. end
  1701. def trailing_inline_module
  1702. elements[1]
  1703. end
  1704. end
  1705. module NodeClassDeclarations1
  1706. def node_class_name
  1707. node_class_expression.node_class_name
  1708. end
  1709. def inline_modules
  1710. trailing_inline_module.inline_modules
  1711. end
  1712. def inline_module
  1713. trailing_inline_module.inline_module
  1714. end
  1715. def inline_module_name
  1716. inline_module.module_name if inline_module
  1717. end
  1718. end
  1719. def _nt_node_class_declarations
  1720. start_index = index
  1721. if node_cache[:node_class_declarations].has_key?(index)
  1722. cached = node_cache[:node_class_declarations][index]
  1723. if cached
  1724. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1725. @index = cached.interval.end
  1726. end
  1727. return cached
  1728. end
  1729. i0, s0 = index, []
  1730. r1 = _nt_node_class_expression
  1731. s0 << r1
  1732. if r1
  1733. r2 = _nt_trailing_inline_module
  1734. s0 << r2
  1735. end
  1736. if s0.last
  1737. r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
  1738. r0.extend(NodeClassDeclarations0)
  1739. r0.extend(NodeClassDeclarations1)
  1740. else
  1741. @index = i0
  1742. r0 = nil
  1743. end
  1744. node_cache[:node_class_declarations][start_index] = r0
  1745. r0
  1746. end
  1747. def _nt_repetition_suffix
  1748. start_index = index
  1749. if node_cache[:repetition_suffix].has_key?(index)
  1750. cached = node_cache[:repetition_suffix][index]
  1751. if cached
  1752. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1753. @index = cached.interval.end
  1754. end
  1755. return cached
  1756. end
  1757. i0 = index
  1758. if has_terminal?('+', false, index)
  1759. r1 = instantiate_node(OneOrMore,input, index...(index + 1))
  1760. @index += 1
  1761. else
  1762. terminal_parse_failure('+')
  1763. r1 = nil
  1764. end
  1765. if r1
  1766. r0 = r1
  1767. else
  1768. if has_terminal?('*', false, index)
  1769. r2 = instantiate_node(ZeroOrMore,input, index...(index + 1))
  1770. @index += 1
  1771. else
  1772. terminal_parse_failure('*')
  1773. r2 = nil
  1774. end
  1775. if r2
  1776. r0 = r2
  1777. else
  1778. r3 = _nt_occurrence_range
  1779. if r3
  1780. r0 = r3
  1781. else
  1782. @index = i0
  1783. r0 = nil
  1784. end
  1785. end
  1786. end
  1787. node_cache[:repetition_suffix][start_index] = r0
  1788. r0
  1789. end
  1790. module OccurrenceRange0
  1791. def min
  1792. elements[1]
  1793. end
  1794. def max
  1795. elements[3]
  1796. end
  1797. end
  1798. def _nt_occurrence_range
  1799. start_index = index
  1800. if node_cache[:occurrence_range].has_key?(index)
  1801. cached = node_cache[:occurrence_range][index]
  1802. if cached
  1803. cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
  1804. @index = cached.interval.end
  1805. end
  1806. return cached
  1807. end
  1808. i0, s0 = index, []
  1809. r2 = _nt_space
  1810. if r2
  1811. r1 = r2
  1812. else
  1813. r1 = instantiate_node(SyntaxNode,input, index...index)
  1814. end
  1815. s0 << r1
  1816. if r1
  1817. s3, i3 = [], index
  1818. loop do
  1819. if has_terminal?('\G[0-9]', true, index)
  1820. r4 = true
  1821. @index += 1
  1822. else
  1823. r4 = nil
  1824. end
  1825. if r4
  1826. s3 << r4
  1827. else
  1828. break
  1829. end
  1830. end
  1831. r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
  1832. s0 << r3
  1833. if r3
  1834. if has_terminal?('..', false, index)
  1835. r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
  1836. @index += 2
  1837. else
  1838. terminal_parse_failure('..')
  1839. r5 = nil
  1840. end
  1841. s0 << r5
  1842. if r5
  1843. s6, i6 = [], index
  1844. loop do
  1845. if has_terminal?('\G[0-9]', true, index)
  1846. r7 = true
  1847. @index += 1
  1848. else
  1849. r7 = nil
  1850. end
  1851. if r7
  1852. s6 << r7
  1853. else
  1854. break
  1855. end
  1856. end
  1857. r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
  1858. s0 << r6
  1859. end
  1860. end
  1861. end
  1862. if s0.last
  1863. r0 = instantiate_node(OccurrenceRange,input, i0...index, s0)
  1864. r0.extend(OccurrenceRange0)
  1865. else
  1866. @index = i0
  1867. r0 = nil
  1868. end
  1869. node_cache[:occurrence_range][start_index] = r0
  1870. r0
  1871. end
  1872. def _nt_prefix
  1873. start_index = index
  1874. if node_cache[:prefix].has_key?(index)
  1875. cached = node_cache[:prefix]