/trunk/lib/treetop/compiler/metagrammar.rb

https://github.com/swistak/treetop · Ruby · 2133 lines · 1904 code · 229 blank · 0 comment · 259 complexity · c7665bc59dacd9d463af47d946150342 MD5 · raw file

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