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)



668
669
670
671
672
673
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 668

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.



676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 676

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