Class: Metamorpher::Rewriter::SubstitutionVisitor
- Inherits:
-
Visitable::Visitor
- Object
- Visitable::Visitor
- Metamorpher::Rewriter::SubstitutionVisitor
- Defined in:
- lib/metamorpher/rewriter/substitution.rb
Instance Attribute Summary collapse
-
#substitution ⇒ Object
Returns the value of attribute substitution.
Instance Method Summary collapse
-
#initialize(substitution) ⇒ SubstitutionVisitor
constructor
A new instance of SubstitutionVisitor.
- #visit_derived(derived) ⇒ Object
- #visit_literal(literal) ⇒ Object
- #visit_termset(termset) ⇒ Object
- #visit_variable(variable) ⇒ Object
Methods inherited from Visitable::Visitor
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
#substitution ⇒ Object
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 |