contrib/nitcc: make Automaton::to_dot return a String
authorAlexandre Terrasa <alexandre@moz-code.org>
Thu, 16 Feb 2017 23:12:49 +0000 (18:12 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Mon, 20 Feb 2017 19:10:36 +0000 (14:10 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

contrib/nitcc/src/autom.nit
contrib/nitcc/src/nitcc.nit

index c1cb412..c9aa3e4 100644 (file)
@@ -466,8 +466,8 @@ class Automaton
                end
        end
 
-       # Produce a graphvis file for the automaton
-       fun to_dot(filepath: String)
+       # Produce a graphviz string from the automatom
+       fun to_dot: String
        do
                var names = new HashMap[State, String]
                var ni = 0
@@ -476,25 +476,25 @@ class Automaton
                        ni += 1
                end
 
-               var f = new FileWriter.open(filepath)
-                f.write("digraph g \{\n")
+               var f = new Buffer
+                f.append("digraph g \{\n")
 
                for s in states do
-                       f.write("s{names[s]}[shape=oval")
+                       f.append("s{names[s]}[shape=oval")
                        #f.write("label=\"\",")
                        if accept.has(s) then
-                               f.write(",color=blue")
+                               f.append(",color=blue")
                        end
                        if tags.has_key(s) then
-                               f.write(",label=\"")
+                               f.append(",label=\"")
                                for token in tags[s] do
-                                       f.write("{token.name.escape_to_c}\\n")
+                                       f.append("{token.name.escape_to_c}\\n")
                                end
-                               f.write("\"")
+                               f.append("\"")
                        else
-                               f.write(",label=\"\"")
+                               f.append(",label=\"\"")
                        end
-                       f.write("];\n")
+                       f.append("];\n")
                        var outs = new HashMap[State, Array[nullable TSymbol]]
                        for t in s.outs do
                                var a
@@ -518,13 +518,12 @@ class Automaton
                                                labe += c.to_s
                                        end
                                end
-                               f.write("s{names[s]}->s{names[s2]} [label=\"{labe.escape_to_c}\"];\n")
+                               f.append("s{names[s]}->s{names[s2]} [label=\"{labe.escape_to_c}\"];\n")
                        end
                end
-               f.write("empty->s{names[start]}; empty[label=\"\",shape=none];\n")
-
-                f.write("\}\n")
-               f.close
+               f.append("empty->s{names[start]}; empty[label=\"\",shape=none];\n")
+               f.append("\}\n")
+               return f.write_to_string
        end
 
        # Transform a NFA to a DFA.
index d6d82da..3fc823e 100644 (file)
@@ -111,14 +111,14 @@ f.close
 
 var nfa = v2.nfa
 print "NFA automaton: {nfa.states.length} states (see {name}.nfa.dot)"
-nfa.to_dot("{name}.nfa.dot")
+nfa.to_dot.write_to_file("{name}.nfa.dot")
 
 var dfa = nfa.to_dfa.to_minimal_dfa
 
 dfa.solve_token_inclusion
 
 print "DFA automaton: {dfa.states.length} states (see {name}.dfa.dot)"
-dfa.to_dot("{name}.dfa.dot")
+dfa.to_dot.write_to_file("{name}.dfa.dot")
 
 if dfa.tags.has_key(dfa.start) then
        print "Error: Empty tokens {dfa.tags[dfa.start].join(" ")}"