XText. Un langage spécifique à la description de graphe

Documents pareils
Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Création d un service web avec NetBeans 5.5 et SJAS 9

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

ECLIPSE ET PDT (Php development tools)

ECLIPSE RCP. Introduction

TP1 : Initiation à Java et Eclipse

Eclipse atelier Java

Introduction à Eclipse

Bases Java - Eclipse / Netbeans

D E S C R I P T I O N D E S É L É M E N T S C L E F S D ' U I M A

TD/TP 1 Introduction au SDK d Android

Utilisation de GCM (Google Cloud Messaging) pour Android. Partie préliminaire éventuelle : Création d'un AVD lisant GCM

Projet de développement

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

BIRT (Business Intelligence and Reporting Tools)

Installation et compilation de gnurbs sous Windows

Générer du code à partir d une description de haut niveau

S T L - C P S - L e s p l u g i n s E c l i p s e. - Une Introduction , Frédéric Peschanski

wxwidgets dans un environnement Microsoft Windows

Warren PAULUS. Android SDK et Android x86

Tutoriel d installation de Hibernate avec Eclipse

Guide d'installation rapide TFM-560X YO.13

Tutorial pour une application simple

TP au menu «UI ANDROID»

Intégration de l interface graphique de Ptidej dans Eclipse

La base de données XML exist. A. Belaïd

TP1 : Initiation à Java et Eclipse

Alfstore workflow framework Spécification technique

Installer Enterprise Miner 5.1 en SAS environnement Windows

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Programmer en JAVA. par Tama

Construire des plug-ins pour SAS Management Console SAS 9.1

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

Tutoriel code::blocks

Approche Contract First

Guide d installation de MySQL

Votre premier projet Android

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Ingénierie des Modèles. Méta-modélisation

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

1. Installation d'un serveur d'application JBoss:

Récupérer les documents stockés sur l ENTG

DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Tutorial et Guide TeamViewer

Assistance à distance sous Windows

TechSoftware Présentations

Etude de cas : PGE JEE V2

Application de lecture de carte SESAM-Vitale Jeebop

Apprendre Java et C++ avec NetBeans

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

PRODUCTS LIST (updated 11th January 2010)

1.3 Gestion d'une application

Fiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel

Déploiement de SAS Foundation

Installation et prise en main

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

EXA1415 : Annotations

LES ACCES DISTANTS ET SECURISES. Installation et utilisation du client. Cisco AnyConnect VPN Client. pour Windows

Environnements de développement (intégrés)

Guide d installation logicielle

MANUEL D INSTALLATION DES PRE REQUIS TECHNIQUES SALLE DES MARCHES V.7

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Création d installateurs pour Windows avec InnoSetup

Procédure d installation des logiciels EBP sous environnement ESU4. Serveur SCRIBE ou Windows

as Architecture des Systèmes d Information

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

GANTTPROJECT. Julien TENDERO

Configurer la supervision pour une base MS SQL Server Viadéis Services

Plan du cours. Historique du langage Nouveautés de Java 7

Annexe Android Studio

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

Composants Logiciels. Le modèle de composant de CORBA. Plan

1 ) INSTALLATION DE LA CONSOLE 2 2 ) PREMIER DÉMARRAGE DE LA CONSOLE 3 3 ) LES JOBS 4 4 ) LES ORDINATEURS 6

[Projet S9] Rédacteurs & Contributeurs Entité Rédacteurs Contributeurs Imededdine HOSNI Olivier MARTY. Validation du document Nom Date Visa

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

Installation Eclipse Galileo. Groupe Entreprenant et Innovateur. France. Tutoriel. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach.

WORKSHOP OBIEE 11g (version ) PRE-REQUIS:

TP1. Outils Java Eléments de correction

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Procédure d installation des logiciels EBP sous environnement MAGRET

ST1 (Installation-Protection) 1 ST1. Version 23. Janvier Calcul de structures. Installation Protection S E T R A

Corrigé des exercices sur les références

Configuration Interface for MEssage ROuting

Procédure d installation

SERVEUR DÉDIÉ DOCUMENTATION

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

WEB page builder and server for SCADA applications usable from a WEB navigator

Transcription:

XText - Un langage spécifique à la description de graphe Laboratoire d'analyse et d'architecture des Systèmes XText Un langage spécifique à la description de graphe Résumé: Un langage de description de graphe est défini à partir d'un méta langage. Un éditeur syntaxique coloré est créé à partir de ce langage spécifique. Un graphe est édité, on accède à la description du graphe généré. Mots clés: Eclipse, INDIGO, Domain Specific language, Editeur syntaxique coloré Serge Bachmann CNRS LAAS 2I Serge Bachmann Page 1/26

XText - Un langage spécifique à la description de graphe Sommaire 1 Introduction...4 1.1 Spécification...4 1.2 Lancer la plateforme...4 1.3 Installation de «XText»...5 1.4 Perspective «Plugin Development»...8 2 Projet «graphemodel»...9 2.1 Notre grammaire...11 2.2 Génération...13 2.3 Edition du fichier MANIFEST...14 2.4 Le fichier plugin.xml...15 2.5 Le package «org.eclipse.xtext.example.graphemodel»...16 3 Projet «graphemodel.ui»...17 3.1 Commande View Model...18 3.2 Définition du «Handler»...19 4 Test...23 4.1 L'éditeur...23 4.2 La commande «View Model»...24 5 Une autre grammaire...25 6 Conclusions...26 7 Licence...26 CNRS LAAS 2I Serge Bachmann Page 2/26

XText - Un langage spécifique à la description de graphe Informations Générale Fichier source document: E:\FORMATION_Eclipse\modeling-indigo- SR1\XText\DOCUMENTATION\DSL_Graphe.odt Version Eclipse: INDIGO version 3.7.1 This package contains framework and tools to leverage models : an Ecore graphical modeler (class-like diagram), Java code generation utility for RCP applications and the EMF Framework, model comparison support, support for XSD schemas, OCL and graphical modeler runtimes. It includes a complete SDK, developer tools and source code. Download: eclipse-modeling-indigo-sr1-win32.zip Date de création: 22 novembre 2011 Date d'impression: 6 décembre 2011 Plate forme Windows 32 CNRS LAAS 2I Serge Bachmann Page 3/26

XText - Un langage spécifique à la description de graphe Introduction 1 Introduction 1.1 Spécification Construire un éditeur syntaxique d'un graphe. 1.2 Lancer la plateforme Double cliquer : ou le raccourci vers cet exécutable si vous l'avez créé dans le répertoire destiné à recevoir les «workspaces». La plate-forme «Eclipse» est lancée: On choisi le «Workspace»: cliquer «OK». Fermer la fenêtre «Welcome» CNRS LAAS 2I Serge Bachmann Page 4/26

XText - Un langage spécifique à la description de graphe Introduction 1.3 Installation de «XText» Sélectionner la commande «Help Install Modeling Components» Dans «Eclipse Modeling Components Discovery Eclipse Modeling Components Discovery» Sélectionner Xtext: Cliquer «Finish». CNRS LAAS 2I Serge Bachmann Page 5/26

XText - Un langage spécifique à la description de graphe Introduction Confirmer l'installation de «XText» Cliquer «Next >» Cliquer «Next >» CNRS LAAS 2I Serge Bachmann Page 6/26

XText - Un langage spécifique à la description de graphe Introduction Accepter la licence: Cliquer «Finish», Xtext s'installe. Il faut relancer Eclipse: cliquer «Restart Now». On conserve le même «Workspace»: Cliquer «OK». CNRS LAAS 2I Serge Bachmann Page 7/26

XText - Un langage spécifique à la description de graphe Introduction 1.4 Perspective «Plugin Development» Sélectionner la commande «Window Open Perspective > Other...». Dans «Open Perspective» sélectionner «Plug-in Development», fermer les vues inutiles ce qui donne: CNRS LAAS 2I Serge Bachmann Page 8/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» 2 Projet «graphemodel» Sélectionner la commande «File > New > Project...» Dans «New Project Select a wizard» sélectionner «Xtext Project» Cliquer «Next >» CNRS LAAS 2I Serge Bachmann Page 9/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» Initialiser: «New Xtext Project New Xtext Project» Cliquer «Finish» CNRS LAAS 2I Serge Bachmann Page 10/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» Les projets suivants sont créé: Dans «org.xtext.example.graphemodele > src > org.xtext.example» le fichier : «GrapheModel.xtext» défini la grammaire de notre langage. Remarque : Chaque projet contient les répertoires src et src-gen. Nous ne devrons intervenir que sur les répertoires src. 2.1 Notre grammaire On édite le fichier «GrapheModel.xtext» : grammar org.eclipse.xtext.example.graphemodel with org.eclipse.xtext.common.terminals generate graphemodel "http://www.eclipse.org/xtext/example/graphemodel" Graphe: (grapheelements += GrapheElement)*; GrapheElement: Noeud Arc ; CNRS LAAS 2I Serge Bachmann Page 11/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» Arc: ''; 'Arc' '{' 'nom' name=id 'origine' origine= NoeudOrigine 'extremite' extremite= NoeudExtremite NoeudOrigine: reference=[noeud]; NoeudExtremite: reference=[noeud]; Noeud: 'Noeud' '{' 'nom' name=id ''; Ce qui donne après sauvegarde : CNRS LAAS 2I Serge Bachmann Page 12/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» 2.2 Génération Dans le projet «org.xtext.example.graphemodel», sous «src > org.xtext.example» ouvrir : «GenerateGrapheModel.mwe2». Dans l'éditeur faire un clic droit pour faire monter le menu contextuel et sélectionner «Run As > NWE2 Workflow»: Le message suivant apparaît dans la vue «Console» tapper «y» puis «enter» comme demandé : 0 [main] INFO lipse.emf.mwe.utils.standalonesetup - Registering platform uri 'E:\ECLIPSE\XText\WORKSPACES\DSL_Graphe' *ATTENTION* It is recommended to use the ANTLR 3 parser generator (BSD licence - http://www.antlr.org/license.html). Do you agree to download it (size 1MB) from 'http://download.itemis.com/antlrgenerator-3.0.1.jar'? (type 'y' or 'n' and hit enter)y CNRS LAAS 2I Serge Bachmann Page 13/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» Le parser «ANTLR 3» est installé. Après génération le projet «org.xtext.example.graphemodele» devient: 2.3 Edition du fichier MANIFEST Dans le «Plugin manifest Editor» onglet «Overview» modifier le «provider»: CNRS LAAS 2I Serge Bachmann Page 14/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» Faire une sauvegarde. Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: org.xtext.example.graphemodele Bundle-Vendor: LAAS CNRS Bundle-Version: 1.0.0 Bundle-SymbolicName: org.xtext.example.graphemodele; singleton:=true Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.xtext;bundle-version="2.0.0";visibility:=reexport, org.apache.log4j;bundle-version="1.2.15";visibility:=reexport, org.apache.commons.logging;bundle-version="1.0.4";resolution:=optional;visibility:=reexport, org.eclipse.xtext.generator;resolution:=optional, org.eclipse.emf.codegen.ecore;resolution:=optional, org.eclipse.emf.mwe.utils;resolution:=optional, org.eclipse.emf.mwe2.launch;resolution:=optional, org.eclipse.xtext.util, org.eclipse.emf.ecore, org.eclipse.emf.common, org.antlr.runtime, org.eclipse.xtext.common.types Import-Package: org.apache.log4j, org.apache.commons.logging, org.eclipse.xtext.xbase.lib, org.eclipse.xtext.xtend2.lib Bundle-RequiredExecutionEnvironment: J2SE-1.5 Export-Package: org.eclipse.xtext.example, org.eclipse.xtext.example.services, org.eclipse.xtext.example.graphemodel, org.eclipse.xtext.example.graphemodel.impl, org.eclipse.xtext.example.graphemodel.util, org.eclipse.xtext.example.serializer, org.eclipse.xtext.example.parser.antlr, org.eclipse.xtext.example.parser.antlr.internal, org.eclipse.xtext.example.validation 2.4 Le fichier plugin.xml <?xml version="1.0" encoding="utf-8"?> <?eclipse version="3.0"?> <plugin> <extension point="org.eclipse.emf.ecore.generated_package"> <package uri = "http://www.eclipse.org/xtext/example/graphemodel" class = "org.eclipse.xtext.example.graphemodel.graphemodelpackage" genmodel = "org/eclipse/xtext/example/graphemodel.genmodel" /> </extension> </plugin> CNRS LAAS 2I Serge Bachmann Page 15/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel» 2.5 Le package «org.eclipse.xtext.example.graphemodel» Dans le projet «org.xtext.example.graphemodele» sous «src-gen» le package ci-dessous est généré: CNRS LAAS 2I Serge Bachmann Page 16/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» 3 Projet «graphemodel.ui» Ce projet défini l'interface utilisateur. On crée un «package» pour recevoir notre code (Handler) nommer le «package»: Cliquer «Finish». CNRS LAAS 2I Serge Bachmann Page 17/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» Le «package» est créé: 3.1 Commande View Model Une commande «View Model» est ajoutée pour visualiser le modèle édité. Ouvrir le «Plugin Manifest Editor» sélectionner l'onglet «Extension», initialement on à: On édite le fichier «plugin.xml» pour ajouter une commande: <extension point="org.eclipse.ui.commands"> <command id="viewmodel" name="view Model"> </command> </extension> <extension point="org.eclipse.ui.handlers"> <handler class="moncode.viewmodelhandler" commandid="viewmodel"> </handler> </extension> <extension point="org.eclipse.ui.menus"> <menucontribution allpopups="false" locationuri="menu:org.eclipse.ui.main.menu?after=additions"> <command commandid="viewmodel" style="push"> </command> </menucontribution> </extension> CNRS LAAS 2I Serge Bachmann Page 18/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» Revenons à l'onglet «Extensions» on a ajouté: 3.2 Définition du «Handler» On sélectionne (handler) dans «Extension Element Details» cliquer «class:» CNRS LAAS 2I Serge Bachmann Page 19/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» «New Java Class Java Class» est initialisé: Cliquer «Finish» on obtient: CNRS LAAS 2I Serge Bachmann Page 20/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» ce qui correspond au code: package moncode; import org.eclipse.core.commands.executionevent; import org.eclipse.core.commands.executionexception; import org.eclipse.core.commands.ihandler; import org.eclipse.core.commands.ihandlerlistener; public class ViewModelHandler implements IHandler { @Override public void addhandlerlistener(ihandlerlistener handlerlistener) { // TODO Auto-generated method stub @Override public void dispose() { // TODO Auto-generated method stub @Override public Object execute(executionevent event) throws ExecutionException { // TODO Auto-generated method stub return null; @Override public boolean isenabled() { // TODO Auto-generated method stub return false; @Override public boolean ishandled() { // TODO Auto-generated method stub return false; @Override public void removehandlerlistener(ihandlerlistener handlerlistener) { // TODO Auto-generated method stub On édite le handler: package moncode; import java.util.listiterator; import org.eclipse.core.commands.executionevent; import org.eclipse.core.commands.executionexception; import org.eclipse.core.commands.ihandler; import org.eclipse.core.commands.ihandlerlistener; import org.eclipse.emf.common.util.elist; import org.eclipse.emf.common.util.uri; import org.eclipse.emf.ecore.eobject; import org.eclipse.emf.ecore.resource.resource; import org.eclipse.emf.ecore.resource.resourceset; import org.eclipse.emf.ecore.resource.impl.resourcesetimpl; import org.eclipse.jface.dialogs.messagedialog; import org.eclipse.jface.viewers.iselection; import org.eclipse.swt.widgets.shell; import org.eclipse.ui.handlers.handlerutil; import org.eclipse.xtext.example.graphemodelstandalonesetup; import org.eclipse.xtext.example.graphemodel.arc; import org.eclipse.xtext.example.graphemodel.graphe; import org.eclipse.xtext.example.graphemodel.grapheelement; public class ViewModelHandler implements IHandler { @Override public void addhandlerlistener(ihandlerlistener handlerlistener) { CNRS LAAS 2I Serge Bachmann Page 21/26

XText - Un langage spécifique à la description de graphe Projet «graphemodel.ui» @Override public void dispose() { @Override public Object execute(executionevent event) throws ExecutionException { Shell shell = HandlerUtil.getActiveShell(event); ISelection selection = HandlerUtil.getCurrentSelection(event); String nomfich = selection.tostring(); nomfich = nomfich.substring(2, nomfich.length()-1); //MessageDialog.openInformation(shell, "Working with EMF Models", nomfich); new GraphemodelStandaloneSetup().createInjectorAndDoEMFRegistration(); ResourceSet rs = new ResourceSetImpl(); Resource resource; try { resource = rs.getresource(uri.createuri("platform:/resource/"+ nomfich),true); // autre possibilité: //resource = rs.getresource(uri. // createplatformresourceuri(nomfich,true), true); catch (Exception e) { // e.printstacktrace(); MessageDialog.openError( shell, "Working with EMF Models", "Select a file in Project Explorer"); return null; StringBuffer message = new StringBuffer("Modèle: "+ nomfich + "\n"); EObject eobject = resource.getcontents().get(0); Graphe graphe = (Graphe) eobject; EList<GrapheElement> grapheelementlist = graphe.getgrapheelements(); ListIterator<GrapheElement> li = grapheelementlist.listiterator(); while (li.hasnext()){ GrapheElement grapheelement = li.next(); if (grapheelement instanceof Arc){ Arc arc = (Arc)grapheElement; message.append(arc.getname() + "(" + arc.getorigine().getreference().getname() + " -> " + arc.getextremite().getreference().getname() + ")\n" ); MessageDialog.openInformation(shell, "Working with EMF Models", message.tostring()); return null; @Override public boolean isenabled() { return true; @Override public boolean ishandled() { return true; @Override public void removehandlerlistener(ihandlerlistener handlerlistener) { Faire une sauvegarde générale. CNRS LAAS 2I Serge Bachmann Page 22/26

XText - Un langage spécifique à la description de graphe Test 4 Test Faire un clic droit sur le projet «org.xtext.exemple.graphemodel.ui» dans le menu contextuel sélectionner la commande «Run As > Run Configurations...». Dans «Run Configuration» double cliquer «Eclipse Application». Nommer la configuration «DSL_Graphe». Faire «Apply» puis «Run» Sous la nouvelle plate-forme, on crée un simple projet de type «General > Project» de nom «testeditiongraphe». Sous ce projet on crée un fichier «graphe1.graphe» le postfixe «graphe» induit le choix de l'éditeur. 4.1 L'éditeur L'éditeur est un éditeur syntaxique coloré. Le source définissant une instance de graphe : // Les noeuds Noeud { nom start Noeud { nom n1 Noeud { nom n2 Noeud { nom end // Les arcs Arc { nom arc1 origine start extremite n1 Arc { nom arc2 origine start extremite n2 Arc { nom arc3 origine n1 extremite end Arc { nom arc4 origine n2 extremite end Arc { nom arc5 origine end extremite start Faire une sauvegarde après l'édition. CNRS LAAS 2I Serge Bachmann Page 23/26

XText - Un langage spécifique à la description de graphe Test 4.2 La commande «View Model» Dans le «Project Explorer» sélectionner «graphe1.graphe». La commande «View Model» accède à la représentation du modèle édité et en donne une représentation textuelle: CNRS LAAS 2I Serge Bachmann Page 24/26

XText - Un langage spécifique à la description de graphe Une autre grammaire 5 Une autre grammaire On peut définir une autre grammaire: grammar org.eclipse.xtext.example.graphemodel with org.eclipse.xtext.common.terminals generate graphemodel "http://www.eclipse.org/xtext/example/graphemodel" Graphe: {Graphe 'Graphe' '{' ( grapheelements += GrapheElement(',' grapheelements += GrapheElement)* )? '' ; GrapheElement: Noeud Arc ; Arc: ''; 'Arc' '{' NoeudOrigine: reference=[noeud]; NoeudExtremite: reference=[noeud]; Noeud: 'Noeud' '{' 'nom' name=id ''; 'nom' name=id ':' origine= NoeudOrigine '->' extremite= NoeudExtremite ce qui donne la syntaxe ci-dessous: La commande «View Model» reste valide. CNRS LAAS 2I Serge Bachmann Page 25/26

XText - Un langage spécifique à la description de graphe Conclusions 6 Conclusions A partir d'une grammaire nous avons généré un éditeur syntaxique coloré. Nous avons utilisé Java pour accéder au modèle généré. D'autres solutions sont possibles en particulier pour écrire des générateurs de code à partir du langage spécialisé «M2T Xpand». Pour plus de précision voir: La documentation en ligne (Help > HelpContents) Le site commercial: http://xtext.itemis.com/ 7 Licence La licence «créative commons» : http://creativecommons.org/licenses/by-nc-nd/2.0/fr/ s'applique à ce document. CNRS LAAS 2I Serge Bachmann Page 26/26