Cette série de tutoriels illustre comment créer un langage dédié dans l'environnement Eclipse pour notre langage jouet : la tortue Logo (inspiré du langage original http://fr.wikipedia.org/wiki/Logo_(langage) ). Kermeta nous permettra d'assembler autour du métamodèle Logo les différents éléments et outils que l'on souhaitera fournir pour ce langage.
Contexte général
Pour répondre aux problématiques de complexité, d'évolutivité et d'hétérogénéité des systèmes, il semble nécessaire aujourd'hui de recourir à des méthodes relativement nouvelles, fondées sur des techniques de nature générative s'appuyant sur des méta-modèles précis.
Elles sont organisées pour harmoniser le travail avec des langages de modélisation à visée générale, tels qu'UML, qui ne prennent pas en compte les spécificités d'un domaine mais aussi avec des langages métier (ou DSL : Domain Specific Language) qui sont spécifiques pour une communauté donnée. Ces derniers guideront alors l'utilisateur de manière fine.
Grâce aux outils de génération, il est maintenant plus facile et moins coûteux de créer et d'outiller des DSL adaptés à ses propres besoins spécifiques à un métier ou une communauté. Il est par exemple possible d'avoir des outils basés sur une abstraction suffisamment précise pour pouvoir la traiter de manière sûre et fiable et donc d'en tirer des résultats automatiques qui auraient été difficiles voire impossibles à obtenir sur un modèle inadapté ou trop générique. Par exemple, il est très difficile de faire de la vérification formelle sur des langages généraux tels qu'UML.
Contenu de cette première étape
Le but de ce tutoriel est de suivre l'exemple de la tortue logo fourni avec l'outil Kermeta pour montrer les différentes étapes de la construction d'un DSL dans Eclipse. Il permet d'appréhender les différents éléments, et de l'appliquer à d'autre langages (dont UML ;-) ).
Cette première étape va vous apprendre à créer la structure de base sous forme d'un méta-modèle Ecore et à utiliser l'éditeur réflexif pour créer les premiers programmes Logo.
Pour ce tutorial vous aurez besoin de Kermeta, vous pouvez soit récupérer un bundle prêt à l'emploi, soit l'installer dans un Eclipse existant en utilisant le site update d'eclipse. http://www.kermeta.org/download/
Pour installer le code et les modèles de l'exemple Logo, depuis Eclipse, il vous suffit alors de faire, File | New | Examples... | Km Logo tutorial (plugin for the main workbench). Cela installera tout les projets Eclipse utilisés dans ce tutoriel.
Le fichier Ecore contiendra la structure de votre langage, et en défini les concepts de manière indépendante de la ou les syntaxes concrètes choisies (qui seront par exemple textuelles ou graphiques). Ce fichier ecore constituera la syntaxe abstraite de notre langage Logo qui sera étendu par tous les outils qui ‘appuieront dessus.
Dans le tutoriel, c'est le fichier fr.irisa.triskell.kmlogo.model/logo/1.Metamodel/ASMLogo.ecore
Ce fichier défini donc les instructions que l’on pourra donner à notre tortue. Par exemple Forward pour lui dire d'avancer, Right pour tourner à droite, … ainsi que des structures de contrôle comme Repeat pour répéter un block d'instruction, If pour faire des choix, etc.
Un fichier Ecore est typiquement représenté sous forme de diagramme de classe. Vous pouvez en créer un grâce au projet Ecore tools d’Eclipse. Click droit sur le fichier ecore | Initialize Ecore diagram file…
Dans la vue "outline ", sélectionnez le package ASM et créez y un diagramme. Déplacez dans ce nouveau diagramme les éléments du packages que vous souhaitez y représenter.
Comme le placement automatique n’est pas vraiment le fort de cet outil (du moins dans sa version actuelle) vous aurez à replacer les boites pour faire des diagrammes plus représentatifs.
Le fichier Ecore doit respecter un certains nombre de règles de bonne formation pour que les outils suivant fonctionnent de manière optimale. En voici quelques uns :
Pour créer le premier modèle, le plus simple est d'ouvrir le fichier Ecore, et dans la outline sélectionner l'élement de plus haut niveau de notre graphe de contenance ( pour nous : un Block), click droit | create dynamic instance… on obtient un modèle conforme à Logo au format XMI.
Cela permet d'écrire les premiers programmes Logo.
Grâce aux liens de contenance cet éditeur réflexif, un click droit nous permet de créer des fils (child ou sous éléments) ou des frères (sibling ou éléments au même niveau que l'élément sélectionné).
La vue prioriété est aussi très utile pour compléter certaines données, par exemple pour changer les valeurs des constantes ou des noms des procédures Logo.
Quelques exemples de programmes logos au format XMI sont disponibles dans le répertoire fr.irisa.triskell.kmlogo.model/logo/1.Metamodel/models
Dans ce tutorial nous avons vu les bases pour gérer la structure d'un langage grâce à un métamodèle.
Néanmoins, il nous reste plusieurs points à voir : renforcer la confiance en ajoutant des contraintes, donner vie au modèle en lui spécifiant un comportement, fournir des syntaxes concrètes plus sympas que ce simple éditeur réflexif (textuelles ou graphique), utiliser ce langage sur une plateforme concrète réelle (un robot), …
Ils seront abordés dans les tutoriels suivants.
Ingénieur de recherche INRIA, équipe Triskell
Je travaille dans une équipe de recherche spécialisée dans le génie logiciel basé sur les technologies d'Ingéniérie Dirigée par les Modèles.