36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/dot_printer.rb', line 36
def process node,level=0
kname=node.class.name.split("::")[1]
id=node.object_id
nodes_decl << "#{id} [label=\"#{kname}\"]"
node.instance_variables.each{|vname|
ivar=node.instance_variable_get(vname)
vname=vname.to_s[1..-1]
case ivar
when Array
ivar.each_with_index{|e,idx|
sink=process(e,level+2)
@printed_cnx[id]||=[]
nodes_cnx << "#{id} -> #{sink} [label=\"#{vname}[#{idx}]\"]" if not @printed_cnx[id].include? sink
@printed_cnx[id] << sink
}
when Token
val=ivar.val
sink="#{ivar.object_id}"
nodes_decl << "#{sink} [label=\"#{val}\",color=\"red\"]"
@printed_cnx[id]||=[]
nodes_cnx << "#{id} -> #{sink} [label=\"#{vname}\"]" if not @printed_cnx[id].include? sink
@printed_cnx[id] << sink
else
sink=process(ivar,level+2)
@printed_cnx[id]||=[]
nodes_cnx << "#{id} -> #{sink} [label=\"#{vname}\"]" if not @printed_cnx[id].include? sink
@printed_cnx[id] << sink
end
}
return id
end
|