Module: Emfrp::Graphviz
Instance Method Summary collapse
- #compile(top, output_io) ⇒ Object
- #escape_name(name) ⇒ Object
- #traverse(top, node, node_stmts, edge_stmts, visited) ⇒ Object
Instance Method Details
#compile(top, output_io) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/emfrp/compile/graphviz/graphviz.rb', line 5 def compile(top, output_io) node_stmts, edge_stmts = [], [] visited = {} top[:outputs].each do |n| node = top[:dict][:node_space][n[:name][:desc]].get traverse(top, node, node_stmts, edge_stmts, visited) end output_io << "digraph #{top[:module_name][:desc]} {\n" node_stmts.each do |s| output_io << " #{s}\n" end edge_stmts.each do |s| output_io << " #{s}\n" end output_io << "}\n" end |
#escape_name(name) ⇒ Object
49 50 51 |
# File 'lib/emfrp/compile/graphviz/graphviz.rb', line 49 def escape_name(name) CodegenContext.new(nil).escape_name(name) end |
#traverse(top, node, node_stmts, edge_stmts, visited) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/emfrp/compile/graphviz/graphviz.rb', line 22 def traverse(top, node, node_stmts, edge_stmts, visited) return if visited[node] visited[node] = true name = node[:name][:desc] type = node[:typing].to_uniq_str node_attrs = ["label = \"#{name} : #{type}\""] case node when NodeDef if top[:outputs].find{|o| o[:name] == node[:name]} node_attrs += ["style = filled", "fillcolor = \"#e4e4e4\""] end node[:params].each do |n| ch_name = n[:name][:desc] if n[:last] edge_stmts << "#{escape_name(ch_name)} -> #{escape_name(name)} [style = dashed];" else edge_stmts << "#{escape_name(ch_name)} -> #{escape_name(name)};" end ch_node = top[:dict][:node_space][ch_name].get traverse(top, ch_node, node_stmts, edge_stmts, visited) end when InputDef node_attrs << "shape = \"invhouse\"" end node_stmts << "#{escape_name(name)} [#{node_attrs.join(", ")}];" end |