class RegularExpression::CFG::Graph

A graph is a set of EBBs.

Attributes

blocks[R]
exit_map[R]

Public Class Methods

new(blocks, exit_map) click to toggle source
# File lib/regular_expression/cfg.rb, line 118
def initialize(blocks, exit_map)
  @blocks = blocks
  @exit_map = exit_map
end

Public Instance Methods

dump() click to toggle source
# File lib/regular_expression/cfg.rb, line 127
def dump
  output = StringIO.new
  blocks.each { |block| block.dump(exit_map, io: output) }
  output.string
end
start() click to toggle source
# File lib/regular_expression/cfg.rb, line 123
def start
  blocks.first
end
to_dot(graph) click to toggle source
# File lib/regular_expression/cfg.rb, line 133
def to_dot(graph)
  nodes = {}

  blocks.each do |block|
    label = []

    label.push("#{block.name}:")
    block.insns.each { |insn| label.push("  #{insn}") }

    nodes[block] = graph.add_node(block.object_id, label: label.join($/), labeljust: "l", shape: "box")
  end

  blocks.each do |block|
    successors = block.exits.map { |exit| nodes[exit_map[exit]] }.uniq
    successors.each do |successor|
      nodes[block].connect(successor)
    end
  end
end