projet-genie-logiciel-systeme/workspace/fr.n7.game2petrinet/Game2PetriNet.atl

54 lines
1.4 KiB
Plaintext
Raw Normal View History

2021-12-04 08:47:10 +00:00
module Game2PetriNet;
create OUT: petrinet from IN: game;
-- Obtenir la place correspondant au predecesseur d'une WorkSequence
2021-12-04 11:27:00 +00:00
helper def: getNetwork() : petrinet!Network =
2021-12-04 08:47:10 +00:00
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,
tokens <- 0,
2021-12-04 11:27:00 +00:00
network <- p.getNetwork('jeu'))
2021-12-04 08:47:10 +00:00
}
-- 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,
2021-12-04 11:27:00 +00:00
network <- t.getNetwork()),
2021-12-04 08:47:10 +00:00
-- ARCS d'un Chemin
arcIn: petrinet!Arc(
place <- c.getPlaceOf('lieu_' + c.lieuIn.nom),
transition <- t,
outgoing <- false,
weight <- 1),
arcOut: petrinet!Arc(
place <- c.getPlaceOf('lieu_' + c.lieuOu.nom),
transition <- t,
outgoing <- true,
weight <- 1)
}