16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/ibex/codegen/dot.rb', line 16
def render(automaton)
labels = SymbolLabels.build(automaton.grammar)
lines = ["digraph ibex_automaton {", " rankdir=LR;", " node [shape=box];"]
automaton.states.each do |state|
attributes = ["label=\"State #{state.id}\""]
attributes << "color=red" unless state.conflicts.empty?
lines << " state_#{state.id} [#{attributes.join(', ')}];"
state.transitions.each do |symbol_id, target|
label = escape(symbol_name(labels, symbol_id))
lines << " state_#{state.id} -> state_#{target} [label=\"#{label}\"];"
end
end
lines << "}"
"#{lines.join("\n")}\n"
end
|