Browse Source

automata.finite: toDot methods for DFA

automata-finite
Sascha Wunderlich 9 years ago
committed by Sascha Wunderlich
parent
commit
2ea82a99a2
  1. 35
      prism/src/automata/finite/DeterministicFiniteAutomaton.java
  2. 16
      prism/src/automata/finite/FiniteAutomaton.java
  3. 5
      prism/src/automata/finite/NondeterministicFiniteAutomaton.java

35
prism/src/automata/finite/DeterministicFiniteAutomaton.java

@ -172,4 +172,39 @@ public class DeterministicFiniteAutomaton<Symbol> extends FiniteAutomaton<Symbol
}
}
}
/**
* Generate a representation in GraphViz's dot format.
* States are black, red when accepting, blue when initial and violet when both.
* @return
*/
public String toDot() {
StringBuffer result = new StringBuffer();
result.append("digraph G {\n");
for(State state : states) {
String color = "black";
if (isAcceptingState(state)) { color = "red"; }
if (isInitialState(state)) { color = "blue"; }
if (isAcceptingState(state) && isInitialState(state)) { color = "violet"; }
result.append(state
+ "[shape=box, color=" + color + ","
+ " label=" + state + "]\n");
}
for(SingleEdge<Symbol> edge : edges) {
String sourceLabel = edge.getSource().toString();
String symLabel = "\"" + edge.getLabel() + "\"";
State sink = edge.getSink();
String sinkLabel = "\"" + sink + "\"";
result.append(sourceLabel
+ " -> " + sinkLabel
+ "[label=" + symLabel + "];\n");
}
result.append("}");
return result.toString();
}
}

16
prism/src/automata/finite/FiniteAutomaton.java

@ -9,6 +9,10 @@ import java.util.Queue;
import java.util.Set;
import java.util.Stack;
import prism.PrismException;
import prism.PrismFileLog;
import prism.PrismLog;
public abstract class FiniteAutomaton<Symbol, E extends Edge<Symbol>> {
protected List<Symbol> apList;
@ -457,4 +461,16 @@ public abstract class FiniteAutomaton<Symbol, E extends Edge<Symbol>> {
return result.toString();
}
public void exportToDotFile(String filename) throws PrismException {
try (PrismFileLog log = PrismFileLog.create(filename)) {
exportToDotFile(log);
}
}
public void exportToDotFile(PrismLog out) {
out.print(toDot());
}
public abstract String toDot();
}

5
prism/src/automata/finite/NondeterministicFiniteAutomaton.java

@ -10,6 +10,9 @@ import java.util.Set;
import parser.ast.Expression;
import parser.ast.ExpressionLabel;
import parser.ast.ExpressionRegular;
import prism.PrismException;
import prism.PrismFileLog;
import prism.PrismLog;
/**
* Class to store a non-deterministic finite automaton.
*/
@ -449,7 +452,7 @@ public class NondeterministicFiniteAutomaton<Symbol> extends FiniteAutomaton<Sym
* Generate a representation in GraphViz's dot format.
* States are black, red when accepting, blue when initial and violet when both.
* @return
*/
*/
public String toDot() {
StringBuffer result = new StringBuffer();
result.append("digraph G {\n");

Loading…
Cancel
Save