Vous êtes sur la page 1sur 5

UTM M2 ICE

INGÉNIERIE DIRIGÉE PAR LES MODÈLES

BE 5 17-18 mai 2011

Transformation de modèle à texte avec xPand

Nous avons déjà vu comment définir une syntaxe concrète textuelle (ou graphique) pour une DSML. Ceci a permis de saisir ou modifier un modèle en utilisant cette syntaxe concrète. Voyons maintenant le passage d’un modèle à un texte. On appelle cela une transformation modèle à texte. Nous allons utiliser l’outil xPand du projet Eclipse M2T (Model2Text).

1 Transformation de modèle à texte avec xPand

Nous commençons par engendrer la syntaxe PDL1 à partir d’un modèle SimplePDL. Ensuite, nous engendrerons un fichier dot pour pouvoir visualiser graphiquement un modèle de procédé.

Exercice 1 : Comprendre la syntaxe de xText Dans un premier temps, nous souhaitons pouvoir engendrer la syntaxe PDL1 à partir d’un modèle SimplePDL. C’est l’opération inverse de ce que nous avons fait avec xText qui nous permettait d’obtenir un modèle SimplePDL en écrivant sa syntaxe textuelle. Voici la syntaxe PDL1 du modèle de processus utilisé lors de la première séance.

process

ExempleProcessus

{

wd

RedactionDoc

 

wd

Conception

wd

Developpement

 

wd

RedactionTests

ws

Conception

f2f

RedactionDoc

ws

Conception

s2s

RedactionDoc

ws

Conception

f2s

Developpement

ws

Conception

s2s

RedactionTests

ws

Developpement

f2f

RedactionTests

}

Le principe de xPand est de s’appuyer sur des templates des fichiers à engendrer. Le template qui correspond à la syntaxe PDL1 est donné au listing 1.

1.1 Expliquer les différents éléments qui apparaissent sur le listing 1.

Exercice 2 : Créer et appliquer un template xPand Pour créer et appliquer un template xPand, nous allons nous resservir du projet fr.enseeiht.pdl1,

le projet xText que nous avions créé pour la syntaxe PDL1. En fait, tout va se passer dans le projet fr.enseeiht.pdl1.generator. Dans le dossier src, il y a trois sous-dossiers :

model contient un exemple de SimplePDL (MyModel.pdl1). Ce modèle n’est pas bon car il correspond à la syntaxe concrète que xText utilise quand il crée un nouveau projet.

templates : contient les fichiers de template pour xPand.

INGÉNIERIE DIRIGÉE PAR LES MODÈLES

Transformation de modèle à texte avec xPand

Listing 1 – Template xPand pour engendrer la syntaxe PDL1 à partir d’un modèle SimplePDL

«IMPORT

pDL1»

«REM»

Génération

de

la

syntaxe

PDL1

à

partir

d’un

modèle

de

processus.

«ENDREM»

«DEFINE

main

FOR

Process»

 

«FILE

"process-"

+

this.name

+

".pdl1"»

process

«this.name»

{

 

«EXPAND

wd

FOREACH

this.processElements.typeSelect(WorkDefinition)-»

«EXPAND

ws

FOREACH

this.processElements.typeSelect(WorkSequence)-»

«EXPAND

aide

FOREACH

this.processElements.typeSelect(Guidance)-»

}

«ENDFILE»

«ENDDEFINE»

«DEFINE

wd

FOR

WorkDefinition-»

wd

«this.name»

«ENDDEFINE»

«DEFINE

ws

FOR

WorkSequence-»

ws

«this.predecessor.name-»

«EXPAND

linkType

FOR

this.linkType-»

«this.successor.name»

«ENDDEFINE»

«DEFINE

«IF

this

linkType

FOR

WorkSequenceType-»

==

WorkSequenceType::start2start-»

s2s«ELSEIF

this

==

WorkSequenceType::start2finish-»

s2f«ELSEIF

this

==

WorkSequenceType::finish2start-»

f2s«ELSEIF

this

==

WorkSequenceType::finish2finish-»

f2f«ENDIF-»

«ENDDEFINE»

«DEFINE

aide

FOR

Guidance-»

aide

"«this.texte»-"

«ENDDEFINE»

INGÉNIERIE DIRIGÉE PAR LES MODÈLES

Transformation de modèle à texte avec xPand

workflow : contient le workflow qui permet d’appliquer le template sur un modèle pour engendrer un ou plusieurs fichiers textes.

2.1 Remplacer MyModel.pdl1 par celui fourni.

2.2 Pour créer un nouveau fichier de Template, faire New > Other > Xpand > Xpand Template

et donner le nom toPDL1.xpt au fichier. Remplacer son contenu par celui fourni.

2.3 Modifier le workflow. Il faut remplacer :

templates::Template::main

FOR

model par templates::toPDL1::main

FOR

model

– les « greetings » ou « greeting » par « process » (en respectant la casse). Dans le component, il faut ajouter la ligne suivante :

metaModel

=

org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel

{}

2.4 Pour exécuter la transformation m2t, cliquer droit sur le fichier .mwe2 dans workflow, faire

Run as > MWE2 Workflow. Le résultat doit apparaître dans le dossier src-gen.

Exercice 3 Écrire une transformation modèle à texte qui permet de traduire un modèle de procédé en une syntaxe dot. Voici un exemple simple de fichier dot pour le même modèle de processus :

digraph

ExempleProcessus

{

Conception->RedactionDoc

Conception->RedactionDoc

Conception->Developpement

Conception->RedactionTests

Developpement->RedactionTests

}

Une fois le fichier .dot obtenu, on obtient le graphe correspondant en PDF en faisant :

dot

ficher.dot

-Tpdf

-o

fichier.pdf

3.1 Écrire et tester un template toDot.xpt pour engendrer un fichier .dot correspondant à un

modèle de processus. On pourra modifier le workflow (.mwe2) pour ajouter un nouveau compo- nent. Le principe est de copier/coller le dernier composant et de remplacer toPDL1 par toDot.

2 Application aux réseaux de Petri

Exercice 4 : Transformations modèle à texte pour les réseaux de Petri Nous allons maintenant définir une transformation modèle à texte pour les réseaux de Petri. L’objectif est d’engendrer la syntaxe textuelle utilisée par les outils Tina 1 , en particulier nd (Net- Draw). La BNF de cette syntaxe est donnée au listing 2 et la figure 1(a) illustre les principaux concepts présents des réseaux de Petri temporels que nous considérons. Le fichier textuel de ce réseau est donné au listing 1(b) au format Tina.

4.1 Écrire un template xPand pour transformer un modèle de réseau de Petri en un fichier .net

de Tina. On peut ensuite faire nd fichier.net. On peut ensuite faire edit > draw pour le visu- aliser graphiquement. Pour visualiser le réseau, faire nd fichier.net, puis edit > draw.

1. http ://www.laas.fr/tina/

INGÉNIERIE DIRIGÉE PAR LES MODÈLES

Transformation de modèle à texte avec xPand

Listing 2 – Syntaxe des fichiers d’entrée des outils de Tina

1

.net

::=

(<trdesc>|<pldesc>|<lbdesc>|<netdesc>) *

 

2

netdesc

::=

’net’

<net>

 

3

trdesc

::=

’tr’

<transition>

{":"

<label>}

{<interval>}

 

4

{<tinput>

 

->

<toutput>}

5

pldesc

::=

’pl’

<place>

{":"

<label>}

{(<marking>)}

 

6

{<pinput>

->

<poutput>}

7

lbdesc

::=

’lb’

[<place>|<transition>]

<label>

 

8

interval

::=

(’[’|’]’)INT’,’INT(’[’|’]’)

|

(’[’|’]’)INT’,’w[’

9

tinput

::=

<place>{<arc>}

 

10

toutput

::=

<place>{<normal _ arc>}

 

11

pinput

::=

<transition>{<normal _

arc>}

 

12

poutput

::=

<transition>{arc}

 

13

arc

::=

<normal _ arc>

|

<test

_

arc>

|

<inhibitor _ arc>

|

14

<stopwatch _ arc>

|

<stopwatch-inhibitor _

arc>

15

normal _ arc

::=

* ’<weight>

 

16

test _ arc

::=

’?’<weight>

17

inhibitor _

arc

::=

’?-’<weight>

 

18

stopwatch

_

arc

::=

’!’<weight>

19

stopwatch-inhibitor _ arc

::=

’!-’<weight>

 

20

weight,

marking

::=

INT{’K’|’M’}

 

21

net,

place,

transition,

label

 

::=

ANAME

|

’{’QNAME’}’

 

22

INT

::=

unsigned

integer

 

23

ANAME

::=

alphanumeric

name,

see

Notes

below

24

QNAME

::=

arbitrary

name,

see

Notes

below

 
::= arbitrary name, see Notes below   (a) syntaxe graphique 1 tr t1 [4,9] p1 p2

(a) syntaxe graphique

1 tr

t1

[4,9]

p1

p2 * 2

->

p3

p4

p5

2 tr

t2

[0,2]

p4

->

p2

3 tr

t3

[1,w[

p5

->

p2

4 tr

t4

[0,2]

p3

p5?1

->

p3

5 tr

t5

[0,3]

p3

->

p1

6 pl

p1

(1)

7 pl

p2

(2)

8 net

ifip

(b) syntaxe textuelle

FIGURE 1 – Exemple de réseau de Petri

INGÉNIERIE DIRIGÉE PAR LES MODÈLES

Transformation de modèle à texte avec xPand

4.2 Écrire un template xPand pour transformer un modèle de réseau de Petri en un fichier .dot

qui permettra de visualiser graphiquement le réseau.