diff --git a/src/main/jastadd/Graphviz.jrag b/src/main/jastadd/Graphviz.jrag new file mode 100644 index 0000000000000000000000000000000000000000..a66ae5cc81430e81495dbe9eb15a75d4a02a06d6 --- /dev/null +++ b/src/main/jastadd/Graphviz.jrag @@ -0,0 +1,41 @@ +aspect Graphviz { + syn String PetriNet.toDot() { + + StringBuffer b = new StringBuffer(); + + b.append("digraph G {\n") + .append("rankdir=LR;\n") + .append("center=true; margin=1;\n") + .append("\n") + .append("subgraph place {\n") + .append("node [shape=circle,fixedsize=true,label=\"\", height=.3,width=.3];\n"); + + for (Place place : allPlaces()) { + b.append(place.dotId()).append(" ["); + if (place.hasName()) b.append("xlabel=\"").append(place.name()).append("\", "); + b.append("label=\"").append("0").append("\"];\n"); + } + + b.append("}\n\n"); + + b.append("subgraph transitions {\n") + .append("node [shape=rect,height=0.4,width=.4];\n"); + for (Transition transition : allTransitions()) { + b.append(transition.dotId()).append(" ["); + if (transition.hasName()) b.append("label=\"").append(transition.name()).append("\""); + b.append("]\n"); + } + + b.append("}\n\n"); + + for (Arc arc : allArcs()) { + b.append(arc.getSource().dotId()).append("->").append(arc.getTarget().dotId()).append(";\n"); + } + b.append("}\n"); + + return b.toString(); + } + + syn String PnObject.dotId() = "\"" + getId().replaceAll("\"", "\\\"") + "\""; + +} diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag index e84c14f1cccfef8a671d729d9184620b43b9e1b5..34cda81c92d1430287d971bfea660f11bfc8ece8 100644 --- a/src/main/jastadd/Navigation.jrag +++ b/src/main/jastadd/Navigation.jrag @@ -52,4 +52,9 @@ aspect Navigation { Transition contributes this to PetriNet.allTransitions() for petriNet(); + + coll java.util.Set<Arc> PetriNet.allArcs() [new java.util.HashSet()] root PetriNet; + Arc contributes this + to PetriNet.allArcs() + for petriNet(); } diff --git a/src/main/java/de/tudresden/inf/st/pnml/Main.java b/src/main/java/de/tudresden/inf/st/pnml/Main.java index f1ec05978fdc92803a50d675229f40dabc974e70..83d8b5827b40af828615523a980368121dc294e3 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java @@ -51,6 +51,8 @@ public class Main { logger.info("Original marking after {} firings: {}", i, originalMarking.print()); logger.info("Current marking after {} firings: {}", i, currentMarking.print()); } + + logger.info("DOT file:\n\n{}", petriNet.toDot()); } }