Skip to content
Snippets Groups Projects
Commit dbabcdba authored by Johannes Mey's avatar Johannes Mey
Browse files

add second marking grammar

parent 95f01b5c
No related branches found
No related tags found
No related merge requests found
...@@ -84,9 +84,10 @@ task relastToJastAdd(type: JavaExec) { ...@@ -84,9 +84,10 @@ task relastToJastAdd(type: JavaExec) {
"--jastAddList=JastAddList", "--jastAddList=JastAddList",
"--resolverHelper", "--resolverHelper",
"--file", "--file",
relastFile relastFile,
"./src/main/jastadd/marking/Marking.relast"
inputs.files relastFile inputs.files relastFile, file("./src/main/jastadd/marking/Marking.relast")
outputs.files file("./src/gen/jastadd/placeTransition.ast"), file("./src/gen/jastadd/placeTransition.jadd") outputs.files file("./src/gen/jastadd/placeTransition.ast"), file("./src/gen/jastadd/placeTransition.jadd")
} }
......
aspect Marking {
public Marking PetriNet.initialMarking() {
Marking marking = new Marking();
marking.setPetriNet(this);
for (Place place : allPlaces()) {
MarkedPlace markedPlace = new MarkedPlace();
markedPlace.setPlace(place);
if (place.hasInitialMarking() && place.getInitialMarking().getText() != null) {
markedPlace.setMarking(place.getInitialMarking().getText());
} else {
markedPlace.setMarking(0);
}
marking.addPlace(markedPlace);
}
return marking;
}
syn MarkedPlace Marking.resolvePlace(Place place) = placeMap().get(place);
syn lazy java.util.Map<Place, MarkedPlace> Marking.placeMap() {
java.util.Map<Place, MarkedPlace> map = new java.util.HashMap<>();
for (MarkedPlace markedPlace : getPlaceList()) {
map.put(markedPlace.getPlace(), markedPlace);
}
return map;
}
}
Marking ::= Place:MarkedPlace*;
MarkedPlace ::= <Marking:int>;
rel Marking.PetriNet -> PetriNet;
rel MarkedPlace.Place -> Place;
aspect Printing {
syn String Marking.print() {
StringBuilder b = new StringBuilder();
b.append("Marking for Petri net '").append(getPetriNet().getId()).append("':\n");
for (MarkedPlace place : getPlaceList()) {
b.append(" ").append(place.getPlace().getId()).append(": ").append(place.getMarking()).append("\n");
}
return b.toString();
}
}
...@@ -24,6 +24,14 @@ public class Main { ...@@ -24,6 +24,14 @@ public class Main {
String fileName = "src/main/resources/minimal.pnml"; String fileName = "src/main/resources/minimal.pnml";
List<PetriNet> petriNets = parsePnml(fileName);
for (PetriNet petriNet : petriNets) {
logger.info(petriNet.initialMarking().print());
}
}
private static List<PetriNet> parsePnml(String fileName) {
Path file = Paths.get(fileName); Path file = Paths.get(fileName);
HLAPIRootClass document = null; HLAPIRootClass document = null;
...@@ -40,13 +48,15 @@ public class Main { ...@@ -40,13 +48,15 @@ public class Main {
logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId()); logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId());
List<PetriNet> petriNets = new ArrayList<>();
PNType type = PNMLUtils.determinePNType(document); PNType type = PNMLUtils.determinePNType(document);
switch (type) { switch (type) {
case PTNET: case PTNET:
PetriNetDocHLAPI ptDoc = PetriNetDocHLAPI ptDoc =
(PetriNetDocHLAPI) document; (PetriNetDocHLAPI) document;
List<PetriNet> petriNets = new ArrayList<>();
for (fr.lip6.move.pnml.ptnet.PetriNet pmnlNet : ptDoc.getNets()) { for (fr.lip6.move.pnml.ptnet.PetriNet pmnlNet : ptDoc.getNets()) {
PnmlParser parser; PnmlParser parser;
...@@ -67,6 +77,7 @@ public class Main { ...@@ -67,6 +77,7 @@ public class Main {
logger.error("Petri net is of unsupported type {}.", type.getLiteral()); logger.error("Petri net is of unsupported type {}.", type.getLiteral());
System.exit(-1); System.exit(-1);
} }
return petriNets;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment