Un objectif de ce projet est de générer du code pour exécuter le comportement des automates créés selon le métamodèle que nous venons de concevoir. Dans un but pédagogique, et à titre de prétexte pour utiliser une transformation M2M, nous allons passer par un modèle intermédiaire. Il est en effet assez fréquent que le métamodèle utilisé pour un DSL (Domaine Specific Language) ne soit pas très pratique pour générer du code via une transformation M2T. On fait alors une première transformation M2M vers un métamodèle plus approprié.
Nous allons donc créer un nouvel ECore Modeling Project, nommé par exemple FSM4Code, avec uniquement 3 concepts : StateMachine, State, et Transition. Les concepts d'input et d'output du premier métamodèle sont remplacés par des chaînes de caractères. Afin d'illustrer certaines possibilités des transformations M2M, l'état initial sera stocké dans la StateMachine et non plus comme un attribut de State. Nous conservons la factorisation de la propriété name dans la classe abstraite NamedEntity'. Vous devriez obtenir un métamodèle correspondant à :

Vous pouvez également créer une instance dynamique de ce métamodèle, mais l'objectif est plutôt d'en générer une automatiquement à partir d'une instance du métamodèle FSM initial, ce que nous allons faire à l'aide d'une transformation QVT operational.