Class: Metamorpher::Rewriter::SubstitutionVisitor

Inherits:
Visitable::Visitor show all
Defined in:
lib/metamorpher/rewriter/substitution.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Visitable::Visitor

#visit

Constructor Details

#initialize(substitution) ⇒ SubstitutionVisitor

Returns a new instance of SubstitutionVisitor.



14
15
16
# File 'lib/metamorpher/rewriter/substitution.rb', line 14

def initialize(substitution)
  @substitution = substitution
end

Instance Attribute Details

#substitutionObject

Returns the value of attribute substitution.



12
13
14
# File 'lib/metamorpher/rewriter/substitution.rb', line 12

def substitution
  @substitution
end

Instance Method Details

#visit_derived(derived) ⇒ Object



29
30
31
32
# File 'lib/metamorpher/rewriter/substitution.rb', line 29

def visit_derived(derived)
  substitutes = derived.base.map { |v| substitution_for_variable(v) }
  derived.derivation.call(*substitutes)
end

#visit_literal(literal) ⇒ Object



22
23
24
25
26
27
# File 'lib/metamorpher/rewriter/substitution.rb', line 22

def visit_literal(literal)
  Terms::Literal.new(
    name: literal.name,
    children: literal.children.flat_map { |child| visit(child) }
  )
end

#visit_termset(termset) ⇒ Object



34
35
36
37
38
# File 'lib/metamorpher/rewriter/substitution.rb', line 34

def visit_termset(termset)
  Terms::TermSet.new(
    terms: termset.terms.map { |term| visit(term) }
  )
end

#visit_variable(variable) ⇒ Object



18
19
20
# File 'lib/metamorpher/rewriter/substitution.rb', line 18

def visit_variable(variable)
  substitution_for_variable(variable.name)
end