projet-genie-logiciel-systeme/workspace/fr.n7.game2petrinet/Game2PetriNet.atl
2021-12-04 12:34:01 +01:00

54 lines
1.4 KiB
Plaintext
Executable file

module Game2PetriNet;
create OUT: petrinet from IN: game;
-- Obtenir la place correspondant au predecesseur d'une WorkSequence
helper def: network(): petrinet!Network =
petrinet!Network.allInstances()
->select(n | n.name = 'jeu')
->asSequence()->first();
-- Obtenir la transition correspondant au successeur d'une WorkSequence
helper context game!Chemin
def: getPlaceOf(s : String): petrinet!Place =
petrinet!Place.allInstances()
->select(p | p.name = s)
->asSequence()->first();
-- Traduire un Jeu en un PetriNet de même nom
rule Game2PetriNet {
from p: game!Jeu
to pn: petrinet!Network (name <- 'jeu')
}
-- Traduire un Lieu en un motif sur le réseau de Petri
rule Lieu2PetriNet {
from l: game!Lieu
to
-- PLACES d'un Lieu
p: petrinet!Place(
name <- 'lieu_' + l.nom.nom,
tokens <- 0,
network <- p.network())
}
-- Traduire une WorkDefinition en un motif sur le réseau de Petri
rule Chemin2PetriNet {
from c: game!Chemin
to
-- TRANSITIONS d'un Chemin
t: petrinet!Transition(
name <- 'chemin_' + c.nom.nom,
network <- t.network()),
-- ARCS d'un Chemin
arcIn: petrinet!Arc(
place <- c.getPlaceOf('lieu_' + c.lieuIn.nom.nom),
transition <- t,
outgoing <- false,
weight <- 1),
arcOut: petrinet!Arc(
place <- c.getPlaceOf('lieu_' + c.lieuOu.nom.nom),
transition <- t,
outgoing <- true,
weight <- 1)
}