Class: Musa::GenerativeGrammar::Implementation::RepeatNode Private

Inherits:
Node
  • Object
show all
Defined in:
lib/musa-dsl/generative/generative-grammar.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Node representing repetition of a node.

Generates options with different repetition counts. Created by Node#repeat.

Instance Method Summary collapse

Constructor Details

#initialize(node, max = nil) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parameters:

  • node (Node)

    node to repeat

  • max (Integer, nil) (defaults to: nil)

    maximum repetitions (nil = infinite)



641
642
643
644
645
646
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 641

def initialize(node, max = nil)
  @node = node
  @max = max

  super()
end

Instance Method Details

#_options(parent: nil, depth: nil, &condition) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 649

def _options(parent: nil, depth: nil, &condition)
  parent ||= []
  depth ||= 0

  r = []

  if @max.nil? || depth < @max
    node_options = @node._options(parent: parent, &condition)

    node_options.each do |node_option|
      r << node_option

      node_suboptions = _options(parent: parent + node_option, depth: depth + 1, &condition)

      node_suboptions.each do |node_suboption|
        r << node_option + node_suboption
      end
    end
  end

  r
end