Class: Dendroid::Parsing::OrNode

Inherits:
CompositeParseNode show all
Defined in:
lib/dendroid/parsing/or_node.rb

Instance Attribute Summary collapse

Attributes inherited from CompositeParseNode

#children, #range

Attributes inherited from ParseNode

#range

Instance Method Summary collapse

Constructor Details

#initialize(sym, lower, upper, arity) ⇒ OrNode

Returns a new instance of OrNode.



10
11
12
13
# File 'lib/dendroid/parsing/or_node.rb', line 10

def initialize(sym, lower, upper, arity)
  @symbol = sym
  super(lower, upper, arity)
end

Instance Attribute Details

#symbolObject (readonly)

Returns the value of attribute symbol.



8
9
10
# File 'lib/dendroid/parsing/or_node.rb', line 8

def symbol
  @symbol
end

Instance Method Details

#accept(aVisitor) ⇒ Object

Part of the ‘visitee’ role in Visitor design pattern.

Parameters:



41
42
43
# File 'lib/dendroid/parsing/or_node.rb', line 41

def accept(aVisitor)
  aVisitor.visit_or_node(self)
end

#add_child(child_node, _index) ⇒ Object

Raises:

  • (StandardError)


15
16
17
18
19
20
21
# File 'lib/dendroid/parsing/or_node.rb', line 15

def add_child(child_node, _index)
  idx = children.find_index(&:nil?)
  raise StandardError unless idx

  # Use first found available slot...
  super(child_node, idx)
end

#match(anEItem) ⇒ Object



23
24
25
26
27
28
# File 'lib/dendroid/parsing/or_node.rb', line 23

def match(anEItem)
  return false if range[0] != anEItem.origin

  dotted = anEItem.dotted_item
  (symbol == dotted.rule.lhs) && children.any? { |ch| ch.match(anEItem) }
end

#partial?Boolean

Returns:

  • (Boolean)


30
31
32
33
# File 'lib/dendroid/parsing/or_node.rb', line 30

def partial?
  # children.any?(&:nil?)
  false
end

#to_sObject



35
36
37
# File 'lib/dendroid/parsing/or_node.rb', line 35

def to_s
  "OR: #{symbol.name} #{range}"
end