Class: Pione::PNML::NetRewriter
- Inherits:
-
Object
- Object
- Pione::PNML::NetRewriter
- 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
-
#initialize(&b) ⇒ NetRewriter
constructor
Create a new net rewriter.
-
#rewrite(net, env) ⇒ void
Rewrite the net by rewriting rules recursively.
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.
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 |