Class: Pione::PNML::NetRewriter

Inherits:
Object
  • Object
show all
Defined in:
lib/pione/pnml/net-rewriter.rb

Overview

NetRewriter is a class for rewriting PNML's net by PIONE's rewriting rules likes "input reduction", "output reduction", "IO expansion", and etc.

Instance Method Summary collapse

Constructor Details

#initialize(&b) ⇒ NetRewriter

Create a new net rewriter. Rewriting rules are setuped by the block.

PNML::NetRewriter.new do |rules|
  rules << PNML::InputReduction
  rules << PNML::OutputReduction
  rules << PNML::IOExpansion
end


14
15
16
17
18
19
# File 'lib/pione/pnml/net-rewriter.rb', line 14

def initialize(&b)
  @rules = []
  if block_given?
    yield @rules
  end
end

Instance Method Details

#rewrite(net, env) ⇒ void

This method returns an undefined value.

Rewrite the net by rewriting rules recursively.

Parameters:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pione/pnml/net-rewriter.rb', line 28

def rewrite(net, env)
  # find rewriting subjects
  rule, subjects = @rules.inject(nil) do |res, _rule|
    if res.nil? and _subjects = _rule.find_subjects(net, env)
      [_rule, _subjects]
    else
      res
    end
  end

  # rewrite the net with subjects and go next
  if subjects
    rule.rewrite(net, subjects, env)
    rewrite(net, env)
  end
end