SlideShare une entreprise Scribd logo
Syntaxe des DSL en
IDM [avec Xtext]
Olivier Le Goaer
olivier.legoaer@univ-pau.fr
Prérequis du module
● Programmation
Ο Java SE et Java EMF
Ο Dialectes XML
● Ingénierie des langages
Ο Grammaires EBNF
Ο Métamodélisation (voir cours Eric Cariou)
Plan du module
● Rappels sur la métamodélisation
● Les langages dédiés (DSL)
● Outillage EMF
Rappels sur la
métamodélisation
Pile de modélisation (OMG)
Meta-
modèle
Modèle
« Monde réel »
Meta-
meta-
modèle
M0
M1
M2
M3
Le MOF
Le métamodèle UML et
d'autres métamodèles
Des modèles UML et
d'autres modèles
Usages variés de ces
modèles
Sources d'ambiguïté
● MOF est un langage de métamodèlisation
Ο Est orienté objet. Est auto-défini (i.e. réflexif)
Ο Il existe d'autres langages de métamodélisation...
● UML est un langage de modélisation objet
Ο Contient 14 sous-langages (14 types de diagrammes)
Ο Il existe pléthore de langages de modélisation...
● UML ≠ MOF
Ο Le MOF engendre UML. Pas l'inverse.
Ο Le MOF contient certains concepts similaires à ceux
d'UML (logique, à cause de son orientation objet)
Les *-tions de l'IDM
Modèle
(syntaxe abstraite)
Modèle
(syntaxe abstraite) code sourcecode source
Transformation
Model-to-model (M2M)
Transformation
Model-to-text (M2T)
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit,
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit,
Extraction Injection
(syntaxe concrète textuelle ou graphique)
Illustration : Le GPL Java
Modèle Java
(syntaxe abstraite)
Modèle Java
(syntaxe abstraite)
code html
+ css
code html
+ css
Transformation M2M
Refactoring : « Extract
SuperClass »
Transformation M2T
javadoc
package fr.univ-pau;
@author Olivier
class Account { … }
package fr.univ-pau;
@author Olivier
class Account { … }
Extraction Injection
(syntaxe concrète textuelle)
Espaces technologiques
Les langages dédiés
(DSL)
IDM et Langages
● Ingénierie des modèles = ingénierie des
langages
Ο Définir un métamodèle revient à créer un langage (par
sa syntaxe abstraite uniquement)
Ο Définir un modèle conforme à ce métamodèle, c'est
formuler des énoncés dans ce langage
● Des langages pour chaque besoin
Ο Des langages communs et reconnus bien sûr...
Ο ...mais aussi des langages « sur-mesure »
● Le futur du développement logiciel
Ο Le cycle fera intervenir de nombreux micro-langages
Domain-Specific Language
● Langage...
Ο Tout type de langage (programmation, interrogation,
modélisation, transformation, build, contrainte...)
Ο On parle de DSML pour le cas spécifique des langages
de modélisation
● ... dédié à un domaine
Ο Expressivité basée sur le vocabulaire/les concepts
propres à un domaine métier
Ο Souvent plus concis (plus simple ?) qu'un langage
généraliste (GPL) qui peut potentiellement traiter toutes
les problématiques
Exemples :
SQL ,
ATL,
Makefile ?
Relations DSL/GPL
● DSL interne
Ο Hébergé par
un GPL hôte
GPLGPL
DSLDSL
● DSL externe
Ο Autonome
DSLDSL
● DSL implicite
Ο API d'un GPL
G/DSLG/DSL
C# & Linq SQL Querydsl SQL
Java API
Relations DSL/GPL
● DSL interne
Ο Hébergé par
un GPL hôte
● DSL externe
Ο Autonome
● DSL implicite
Ο API d'un GPL
C# & Linq SQL Querydsl SQL
Java API
QCustomer customer;
customer = new QCustomer("c");
SQLQuery<?> query =
new SQLQuery<Void>(connection);
List<String> lastNames =
query.select(customer.lastName)
.from(customer)
.where(customer.firstName.eq("Bob"))
.fetch();
System.out.print(lastNames);
SELECT lastName
FROM customer
WHERE firstName = 'Bob';
var queryBobCustomers =
from cust in customer
where cust.firstName == "Bob"
select cust.lastName;
foreach (var n in queryBobCustomers)
{
Console.WriteLine(n);
}
Syntaxe concrète d'un DSL
● Textuelle ?
Ο Approche linéaire,
séquentielle (la lecture)
● Gauche à droite, haut
en bas, indentation, ...
Ο On peut dire les choses
de manière détaillée
● Ex : Expression
mathématiques
Ο Outillage mûre
● highlighting,
autocompletion,
diff/merge
● (Semi)graphique ?
Ο Approche visuelle
● naturelle pour
comprendre et
communiquer
Ο Parce que parfois "un
dessin vaut mieux..."
Ο Devient vite illisible si :
● nombreuses
imbrications
● expressions
complexes
C'est souvent
le cas des
langages de
programmation C'est souvent
le cas des
langages de
modélisation
Ateliers pour les DSL
OutilOutil EditeurEditeur
MetaEdit+ MetaCase
Eclipse Modeling Framework (EMF) The Eclipse Foundation
Meta Programming System (MPS) JetBrains
Obeo Designer Obeo
Visualization and Modeling SDK Microsoft
Intentional Workbench Intentional Software
Poseidon for DSLs Gentleware
... ...
Outillage EMF
Pile de modélisation (EMF)
Meta-
modèle
Modèle
« Monde réel »
Meta-
meta-
modèle
M0
M1
M2
M3
Ecore.ecore
UML2.ecore, BPEL.ecore,
Java.ecore, ...
Microwave.uml2,
Shopping.bpel, Bank.java, ...
Usages variés de ces
modèles
100% XMI
Ecore
● Implementation Java
de E-MOF
Ο Orientation objet
Ο Minimaliste
● Racine de la
hiérarchie : EObject
Ο Hérite de Object (Java SE)
● Syntaxe concrète
graphique « à la UML »
par défaut
Les *-tions avec EMF
Modèle
(syntaxe abstraite)
Modèle
(syntaxe abstraite) code sourcecode source
Transformation
Model-to-model (M2M)
Transformation
Model-to-text (M2T)
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit,
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit,
Extraction Injection
(syntaxe concrète textuelle ou graphique)
Kermeta,
QVT, ATL...
Xpand, JET,
MOFScript,
Acceleo...
Xtext,
EMFtext,
Sintaks,TCS,
Spoofax...
Sirius,
Graphiti,
GMF, ...
Xtext : principes
● ANTLR3-based parser
● EMF-based metamodel
● Eclipse editor with
Ο syntax highlighting
Ο code completion
Ο customizable outline
Ο code folding
Ο real-time constraint
checkingEn tant que DSL,
Xtext s'applique
à lui-même...
http://www.eclipse.org/Xtext/
Editeur de "code" DSL
Outline
(non personnalisée ici)
Completion
(CTRL + Espace)
Folding
Constraint-checking
(Error, Warning, Info)
Syntax
highlighting
(Keywords, litterals
comments, ... )
Intégration Xtext/Ecore
● Approche "(meta)model first" (celle vue en TP)
Ο Vous disposez d'un métamodèle ecore
Ο Vous disposez des metaclasses Java correspondantes,
générées via un fichier genmodel
Ο Il suffit d'indiquer au parseur de les importer (import)
pour les réutiliser
● Approche "grammar first"
Ο Vous de disposez pas d'un métamodèle ecore
Ο Vous vous concentrez sur la grammaire Xtext et il
génerera (generate) au passage les metaclasses Java
Catégories de règles Xtext
● Règle terminale
Ο Représente les unités lexicales (les feuilles de l'AST)
Ο terminal EMAIL: ('a'..'z')+ '@' ('a'..'z')+ '.' DN;
● Règle d'énumeration
Ο Représente des valeurs énumérées
Ο enum DN: org='org' | com='com' | fr='fr' | net='net'
● Règle de parsing (non-terminale)
Ο Règle de dérivation (les noeuds de l'AST) car fait appel
à d'autres règles, terminales ou non
Ο Message: 'send from' source=EMAIL 'to' target=EMAIL 'stop'
Nommage des règles Xtext
● Soit le nom de la règle se
confond avec le nom de la
metaclasse d'implementation
Ο Message : source=EMAIL
● Soit le nom de la règle est
dissociée de la metaclasse
d'implementation (conseillé !)
Ο R1 returns Message : source=EMAIL
+source : EString
+target: EString
Message
(extends EObject)
+getSource() : EString
+setSource(EString s) : void
+getTarget() : EString
+setTarget(EString s) : void
Vue d'ensemble
+source : EString
+target: EString
Message
(extends EObject)
+getSource() : EString
+setSource(EString s) : void
+getTarget() : EString
+setTarget(EString s) : void
terminal EMAIL: …
R1 returns Message:
'from' source=EMAIL
('to' target=EMAIL)? 'stop'
from olivier.legoaer@univ-pau.fr
to eric.cariou@univ-pau.fr stop
Msg.xtext
Sample.msg
Your DSL keywords
Rule ID (=> Type)
Xtext keywords
Ecore model elements (EClass, EAttribute, ...)
Cohérence
Type EMAIL
compatible
avec le type
EString
source=olivier.legoaer@univ-pau.fr
target=eric.cariou@univ-pau.fr
obj#1:Message
instanceOf
Mappings Ecore/Xtext
EcoreEcore DSLDSL Motif de règleMotif de règle EcoreEcore DSLDSL Motif de règleMotif de règle
eSuperType A: B|C EAttribute A : price=EFloat
EReference
containment=true
lowerBound=1
upperBound=1
A : r=B EReference
lowerBound=0
upperBound=1
A : (r=B)?
EReference
containment=false
lowerBound=1
upperBound=1
A : r=[B] EReference
lowerBound=0
upperBound=-1
A : (r+=B)*
EAttribute
(cas des booléens
liés à l'existence
de mots-clés)
A : isOk?='ok' EReference
lowerBound=1
upperBound=-1
A : (r+=B)+
ou bien
A : (r+=B)
(r+=B)*
C
<< extends >>
B
A
A B
A B
1
1
+r
+r
isOk : EBoolean
A
price : EFloat
A
A B0..1
+r
A B0..*
+r
A B1..*
+r
Injection (Conceptuellement)
● Lors de l'analyse du texte, le parseur ANTLR va
instancier les bonnes metaclasses, avec les
bonnes valeurs (attributs et références)
Ο Syntaxe concrète textuelle vers syntaxe abstraite
Ο Passage du « grammarware » au « modelware »
Ο Production d'un AST (ou plutôt un graphe d'objets)
Modèle
(arbre de
syntaxe abstraite)
Modèle
(arbre de
syntaxe abstraite)
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit,
Lorem ipsum
dolor sit amet,
consectetur
adipisicing elit, ANTLR
Injection (techniquement)
from olivier.legoaer@univ-pau.fr
to eric.cariou@univ-pau.fr stop
Msg.xtext
Sample.msg
Message current = null;
current = new Message();
current.setSource("olivier.legoaer@univ-pau.fr");
current.setTarget("eric.cariou@univ-pau.fr");
return current;
Appel de la
règle R1
Creation d'un
EObject
Code Java EMF réalisé par le parser ANTLR
R1 returns Message:
'from' source=EMAIL
('to' target=EMAIL)? 'stop'
Illustration : Le GPL Java
ClassDefRule returns Class :
(isAbstract?="abstract")?
"class" name=ID "{"
(methods+=MethodDefRule)*
"}"
class Voiture {
void demarrer() {...}
void stopper() {...}
}
isAbstract : EBoolean
name : EString
Class
(extends EObject)
isAbstract = false
name = ''Voiture''
c1:Class
name = ''demarrer''
m1:Method
name = ''stopper''
m2:Method
name : EString
Method
(extends EObject)+methods
0..*
M2
M1
« grammarware » « modelware »
Java.xtext
Voiture.java
Java.ecore
Voiture.xmi
DSL avec système de types
● Parfois, vous avez besoin d'implémenter un vrai
système de types pour votre DSL
Ο Typiquement le cas des langages de programmation
● Solutions
Ο Natives : invariants OCL/Constraint-Checking de Xtext
Ο Tierces : Xbase, XTS, Xsemantics, ...
def isCool as boolean
def price as integer
isCool <- true //cool
price <- ''foo'' //pas cool
DSL exécutable
● L'exécutabilité peut être obtenue en projetant
vers un langage cible, qui lui, est exécutable
Ο Sémantique translationnelle (~Compilateur)
Ο Transformation M2T (ex: MyDSL → code Python)
● Si le DSL doit être exécutable par lui-même
Ο Sémantique opérationnelle (~VM)
Ο Langage d'action (pur Java EMF, Kermeta, ...)
Ο Si votre DSL intègre des expressions "Java-like", on
utilise la grammaire Xbase
● L'utilisation de Xbase va gènèrer des implémentations
Java naturellement exécutables par la VM Java
Exercices pratiques
● Recréer des langages bien connus
Ο Redéfinir le langage Java
Ο Redéfinir le langage SQL
Ο ...
● Inventer de nouveaux langages
Ο Définir le langage WDL (Website Description Language)
● http://olegoaer.developpez.com/tutos/model/xtext/wdl/
Ο Définir le langage XMOB
● http://olegoaer.perso.univ-pau.fr/works/GlobalDSL2013.pdf
Ο ...

Contenu connexe

Tendances

Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
ENSET, Université Hassan II Casablanca
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
ENSET, Université Hassan II Casablanca
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
Lilia Sfaxi
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
Ahmed-Chawki Chaouche
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
ENSET, Université Hassan II Casablanca
 
Modele mvc
Modele mvcModele mvc
Modele mvc
Soulef riahi
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
Lilia Sfaxi
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
ENSET, Université Hassan II Casablanca
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
Abdoulaye Dieng
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
Lhouceine OUHAMZA
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
ENSET, Université Hassan II Casablanca
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)
Heithem Abbes
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
ENSET, Université Hassan II Casablanca
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
MongoDB
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQLebiznext
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
Cynapsys It Hotspot
 

Tendances (20)

Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Applications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLiteApplications Android - cours 12 : Persistance de données SQLite
Applications Android - cours 12 : Persistance de données SQLite
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 

En vedette

Using Xcore with Xtext
Using Xcore with XtextUsing Xcore with Xtext
Using Xcore with Xtext
Holger Schill
 
Executable modeling & dynamic adaptation
Executable modeling & dynamic adaptationExecutable modeling & dynamic adaptation
Executable modeling & dynamic adaptation
Olivier Le Goaër
 
Android executable modeling: beyond android programming
Android executable modeling: beyond android programmingAndroid executable modeling: beyond android programming
Android executable modeling: beyond android programming
Olivier Le Goaër
 
Introduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMGIntroduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMG
Olivier Le Goaër
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
Olivier Le Goaër
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Yet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile developmentYet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile development
Olivier Le Goaër
 
Adaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptablesAdaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptables
Olivier Le Goaër
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
Olivier Le Goaër
 
Meta-modelisation avec eclipse
Meta-modelisation avec eclipseMeta-modelisation avec eclipse
Meta-modelisation avec eclipse
meriem sari
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mda
Shili Mohamed
 
Builsing DSL using MDE
Builsing DSL using MDEBuilsing DSL using MDE
Builsing DSL using MDE
Sébastien Mosser
 
Xtext's new Formatter API
Xtext's new Formatter APIXtext's new Formatter API
Xtext's new Formatter API
meysholdt
 
Building a Python IDE with Xtext
Building a Python IDE with XtextBuilding a Python IDE with Xtext
Building a Python IDE with Xtext
Sebastian Zarnekow
 
Uml to code with acceleo
Uml to code with acceleoUml to code with acceleo
Uml to code with acceleo
Tarun Telang
 
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Amira Hakim
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework Xtext
Sebastian Zarnekow
 
Principe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSAPrincipe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSA
Kristen Le Liboux
 
Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With Xtext
Sven Efftinge
 

En vedette (20)

Using Xcore with Xtext
Using Xcore with XtextUsing Xcore with Xtext
Using Xcore with Xtext
 
Executable modeling & dynamic adaptation
Executable modeling & dynamic adaptationExecutable modeling & dynamic adaptation
Executable modeling & dynamic adaptation
 
Android executable modeling: beyond android programming
Android executable modeling: beyond android programmingAndroid executable modeling: beyond android programming
Android executable modeling: beyond android programming
 
Introduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMGIntroduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMG
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Yet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile developmentYet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile development
 
Adaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptablesAdaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptables
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Meta-modelisation avec eclipse
Meta-modelisation avec eclipseMeta-modelisation avec eclipse
Meta-modelisation avec eclipse
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mda
 
Builsing DSL using MDE
Builsing DSL using MDEBuilsing DSL using MDE
Builsing DSL using MDE
 
Xtext's new Formatter API
Xtext's new Formatter APIXtext's new Formatter API
Xtext's new Formatter API
 
Building a Python IDE with Xtext
Building a Python IDE with XtextBuilding a Python IDE with Xtext
Building a Python IDE with Xtext
 
Uml to code with acceleo
Uml to code with acceleoUml to code with acceleo
Uml to code with acceleo
 
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
Transformation de carrés en cercles avec Atlas Transformation Language(ATL)
 
Textual Modeling Framework Xtext
Textual Modeling Framework XtextTextual Modeling Framework Xtext
Textual Modeling Framework Xtext
 
Principe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSAPrincipe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSA
 
Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With Xtext
 

Similaire à Syntaxe concrète des DSL en IDM [avec Xtext]

Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1ISIG
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & DéveloppementsPaulin CHOUDJA
 
Eclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and AcceleoEclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and Acceleofmadiot
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetAmine Chkr
 
Uml
UmlUml
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
Laurent Guérin
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 
Confectionner des DSL avec XTEXT pour un programme pascale.pdf
Confectionner des DSL avec XTEXT pour un programme pascale.pdfConfectionner des DSL avec XTEXT pour un programme pascale.pdf
Confectionner des DSL avec XTEXT pour un programme pascale.pdf
VictoireTchamou
 
C#
C#C#
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
Arnaud Auroux
 
Modélisation et points de vue : Entre abstraction et pragmatisme
Modélisation et points de vue : Entre abstraction et pragmatismeModélisation et points de vue : Entre abstraction et pragmatisme
Modélisation et points de vue : Entre abstraction et pragmatismeChauvin Mariot
 
1 introduction
1 introduction1 introduction
1 introduction
said ousguine
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
lolopetit
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
Mickaël Rémond
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
CocoaHeads France
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
Association Agile Nantes
 
Réutilisation de code entre Windows 8 et Windows Phone 8.
Réutilisation de code entre Windows 8 et Windows Phone 8.Réutilisation de code entre Windows 8 et Windows Phone 8.
Réutilisation de code entre Windows 8 et Windows Phone 8.
Microsoft
 

Similaire à Syntaxe concrète des DSL en IDM [avec Xtext] (20)

Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
 
Environnements & Développements
Environnements & DéveloppementsEnvironnements & Développements
Environnements & Développements
 
Eclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and AcceleoEclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and Acceleo
 
Tour Horizont.Net
Tour Horizont.NetTour Horizont.Net
Tour Horizont.Net
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Uml
UmlUml
Uml
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
 
Confectionner des DSL avec XTEXT pour un programme pascale.pdf
Confectionner des DSL avec XTEXT pour un programme pascale.pdfConfectionner des DSL avec XTEXT pour un programme pascale.pdf
Confectionner des DSL avec XTEXT pour un programme pascale.pdf
 
C#
C#C#
C#
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
Modélisation et points de vue : Entre abstraction et pragmatisme
Modélisation et points de vue : Entre abstraction et pragmatismeModélisation et points de vue : Entre abstraction et pragmatisme
Modélisation et points de vue : Entre abstraction et pragmatisme
 
ORM
ORMORM
ORM
 
1 introduction
1 introduction1 introduction
1 introduction
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
Réutilisation de code entre Windows 8 et Windows Phone 8.
Réutilisation de code entre Windows 8 et Windows Phone 8.Réutilisation de code entre Windows 8 et Windows Phone 8.
Réutilisation de code entre Windows 8 et Windows Phone 8.
 

Plus de Olivier Le Goaër

The road to green code
The road to green codeThe road to green code
The road to green code
Olivier Le Goaër
 
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Olivier Le Goaër
 
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
Olivier Le Goaër
 
Enforcing Green Code With Android Lint
Enforcing Green Code With Android LintEnforcing Green Code With Android Lint
Enforcing Green Code With Android Lint
Olivier Le Goaër
 
GREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplaceGREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplace
Olivier Le Goaër
 
Introduction au langage SQL
Introduction au langage SQLIntroduction au langage SQL
Introduction au langage SQL
Olivier Le Goaër
 

Plus de Olivier Le Goaër (6)

The road to green code
The road to green codeThe road to green code
The road to green code
 
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
 
Enforcing Green Code With Android Lint
Enforcing Green Code With Android LintEnforcing Green Code With Android Lint
Enforcing Green Code With Android Lint
 
GREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplaceGREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplace
 
Introduction au langage SQL
Introduction au langage SQLIntroduction au langage SQL
Introduction au langage SQL
 

Syntaxe concrète des DSL en IDM [avec Xtext]

  • 1. Syntaxe des DSL en IDM [avec Xtext] Olivier Le Goaer olivier.legoaer@univ-pau.fr
  • 2. Prérequis du module ● Programmation Ο Java SE et Java EMF Ο Dialectes XML ● Ingénierie des langages Ο Grammaires EBNF Ο Métamodélisation (voir cours Eric Cariou)
  • 3. Plan du module ● Rappels sur la métamodélisation ● Les langages dédiés (DSL) ● Outillage EMF
  • 5. Pile de modélisation (OMG) Meta- modèle Modèle « Monde réel » Meta- meta- modèle M0 M1 M2 M3 Le MOF Le métamodèle UML et d'autres métamodèles Des modèles UML et d'autres modèles Usages variés de ces modèles
  • 6. Sources d'ambiguïté ● MOF est un langage de métamodèlisation Ο Est orienté objet. Est auto-défini (i.e. réflexif) Ο Il existe d'autres langages de métamodélisation... ● UML est un langage de modélisation objet Ο Contient 14 sous-langages (14 types de diagrammes) Ο Il existe pléthore de langages de modélisation... ● UML ≠ MOF Ο Le MOF engendre UML. Pas l'inverse. Ο Le MOF contient certains concepts similaires à ceux d'UML (logique, à cause de son orientation objet)
  • 7. Les *-tions de l'IDM Modèle (syntaxe abstraite) Modèle (syntaxe abstraite) code sourcecode source Transformation Model-to-model (M2M) Transformation Model-to-text (M2T) Lorem ipsum dolor sit amet, consectetur adipisicing elit, Lorem ipsum dolor sit amet, consectetur adipisicing elit, Extraction Injection (syntaxe concrète textuelle ou graphique)
  • 8. Illustration : Le GPL Java Modèle Java (syntaxe abstraite) Modèle Java (syntaxe abstraite) code html + css code html + css Transformation M2M Refactoring : « Extract SuperClass » Transformation M2T javadoc package fr.univ-pau; @author Olivier class Account { … } package fr.univ-pau; @author Olivier class Account { … } Extraction Injection (syntaxe concrète textuelle)
  • 11. IDM et Langages ● Ingénierie des modèles = ingénierie des langages Ο Définir un métamodèle revient à créer un langage (par sa syntaxe abstraite uniquement) Ο Définir un modèle conforme à ce métamodèle, c'est formuler des énoncés dans ce langage ● Des langages pour chaque besoin Ο Des langages communs et reconnus bien sûr... Ο ...mais aussi des langages « sur-mesure » ● Le futur du développement logiciel Ο Le cycle fera intervenir de nombreux micro-langages
  • 12. Domain-Specific Language ● Langage... Ο Tout type de langage (programmation, interrogation, modélisation, transformation, build, contrainte...) Ο On parle de DSML pour le cas spécifique des langages de modélisation ● ... dédié à un domaine Ο Expressivité basée sur le vocabulaire/les concepts propres à un domaine métier Ο Souvent plus concis (plus simple ?) qu'un langage généraliste (GPL) qui peut potentiellement traiter toutes les problématiques Exemples : SQL , ATL, Makefile ?
  • 13. Relations DSL/GPL ● DSL interne Ο Hébergé par un GPL hôte GPLGPL DSLDSL ● DSL externe Ο Autonome DSLDSL ● DSL implicite Ο API d'un GPL G/DSLG/DSL C# & Linq SQL Querydsl SQL Java API
  • 14. Relations DSL/GPL ● DSL interne Ο Hébergé par un GPL hôte ● DSL externe Ο Autonome ● DSL implicite Ο API d'un GPL C# & Linq SQL Querydsl SQL Java API QCustomer customer; customer = new QCustomer("c"); SQLQuery<?> query = new SQLQuery<Void>(connection); List<String> lastNames = query.select(customer.lastName) .from(customer) .where(customer.firstName.eq("Bob")) .fetch(); System.out.print(lastNames); SELECT lastName FROM customer WHERE firstName = 'Bob'; var queryBobCustomers = from cust in customer where cust.firstName == "Bob" select cust.lastName; foreach (var n in queryBobCustomers) { Console.WriteLine(n); }
  • 15. Syntaxe concrète d'un DSL ● Textuelle ? Ο Approche linéaire, séquentielle (la lecture) ● Gauche à droite, haut en bas, indentation, ... Ο On peut dire les choses de manière détaillée ● Ex : Expression mathématiques Ο Outillage mûre ● highlighting, autocompletion, diff/merge ● (Semi)graphique ? Ο Approche visuelle ● naturelle pour comprendre et communiquer Ο Parce que parfois "un dessin vaut mieux..." Ο Devient vite illisible si : ● nombreuses imbrications ● expressions complexes C'est souvent le cas des langages de programmation C'est souvent le cas des langages de modélisation
  • 16. Ateliers pour les DSL OutilOutil EditeurEditeur MetaEdit+ MetaCase Eclipse Modeling Framework (EMF) The Eclipse Foundation Meta Programming System (MPS) JetBrains Obeo Designer Obeo Visualization and Modeling SDK Microsoft Intentional Workbench Intentional Software Poseidon for DSLs Gentleware ... ...
  • 18. Pile de modélisation (EMF) Meta- modèle Modèle « Monde réel » Meta- meta- modèle M0 M1 M2 M3 Ecore.ecore UML2.ecore, BPEL.ecore, Java.ecore, ... Microwave.uml2, Shopping.bpel, Bank.java, ... Usages variés de ces modèles 100% XMI
  • 19. Ecore ● Implementation Java de E-MOF Ο Orientation objet Ο Minimaliste ● Racine de la hiérarchie : EObject Ο Hérite de Object (Java SE) ● Syntaxe concrète graphique « à la UML » par défaut
  • 20. Les *-tions avec EMF Modèle (syntaxe abstraite) Modèle (syntaxe abstraite) code sourcecode source Transformation Model-to-model (M2M) Transformation Model-to-text (M2T) Lorem ipsum dolor sit amet, consectetur adipisicing elit, Lorem ipsum dolor sit amet, consectetur adipisicing elit, Extraction Injection (syntaxe concrète textuelle ou graphique) Kermeta, QVT, ATL... Xpand, JET, MOFScript, Acceleo... Xtext, EMFtext, Sintaks,TCS, Spoofax... Sirius, Graphiti, GMF, ...
  • 21. Xtext : principes ● ANTLR3-based parser ● EMF-based metamodel ● Eclipse editor with Ο syntax highlighting Ο code completion Ο customizable outline Ο code folding Ο real-time constraint checkingEn tant que DSL, Xtext s'applique à lui-même... http://www.eclipse.org/Xtext/
  • 22. Editeur de "code" DSL Outline (non personnalisée ici) Completion (CTRL + Espace) Folding Constraint-checking (Error, Warning, Info) Syntax highlighting (Keywords, litterals comments, ... )
  • 23. Intégration Xtext/Ecore ● Approche "(meta)model first" (celle vue en TP) Ο Vous disposez d'un métamodèle ecore Ο Vous disposez des metaclasses Java correspondantes, générées via un fichier genmodel Ο Il suffit d'indiquer au parseur de les importer (import) pour les réutiliser ● Approche "grammar first" Ο Vous de disposez pas d'un métamodèle ecore Ο Vous vous concentrez sur la grammaire Xtext et il génerera (generate) au passage les metaclasses Java
  • 24. Catégories de règles Xtext ● Règle terminale Ο Représente les unités lexicales (les feuilles de l'AST) Ο terminal EMAIL: ('a'..'z')+ '@' ('a'..'z')+ '.' DN; ● Règle d'énumeration Ο Représente des valeurs énumérées Ο enum DN: org='org' | com='com' | fr='fr' | net='net' ● Règle de parsing (non-terminale) Ο Règle de dérivation (les noeuds de l'AST) car fait appel à d'autres règles, terminales ou non Ο Message: 'send from' source=EMAIL 'to' target=EMAIL 'stop'
  • 25. Nommage des règles Xtext ● Soit le nom de la règle se confond avec le nom de la metaclasse d'implementation Ο Message : source=EMAIL ● Soit le nom de la règle est dissociée de la metaclasse d'implementation (conseillé !) Ο R1 returns Message : source=EMAIL +source : EString +target: EString Message (extends EObject) +getSource() : EString +setSource(EString s) : void +getTarget() : EString +setTarget(EString s) : void
  • 26. Vue d'ensemble +source : EString +target: EString Message (extends EObject) +getSource() : EString +setSource(EString s) : void +getTarget() : EString +setTarget(EString s) : void terminal EMAIL: … R1 returns Message: 'from' source=EMAIL ('to' target=EMAIL)? 'stop' from olivier.legoaer@univ-pau.fr to eric.cariou@univ-pau.fr stop Msg.xtext Sample.msg Your DSL keywords Rule ID (=> Type) Xtext keywords Ecore model elements (EClass, EAttribute, ...) Cohérence Type EMAIL compatible avec le type EString source=olivier.legoaer@univ-pau.fr target=eric.cariou@univ-pau.fr obj#1:Message instanceOf
  • 27. Mappings Ecore/Xtext EcoreEcore DSLDSL Motif de règleMotif de règle EcoreEcore DSLDSL Motif de règleMotif de règle eSuperType A: B|C EAttribute A : price=EFloat EReference containment=true lowerBound=1 upperBound=1 A : r=B EReference lowerBound=0 upperBound=1 A : (r=B)? EReference containment=false lowerBound=1 upperBound=1 A : r=[B] EReference lowerBound=0 upperBound=-1 A : (r+=B)* EAttribute (cas des booléens liés à l'existence de mots-clés) A : isOk?='ok' EReference lowerBound=1 upperBound=-1 A : (r+=B)+ ou bien A : (r+=B) (r+=B)* C << extends >> B A A B A B 1 1 +r +r isOk : EBoolean A price : EFloat A A B0..1 +r A B0..* +r A B1..* +r
  • 28. Injection (Conceptuellement) ● Lors de l'analyse du texte, le parseur ANTLR va instancier les bonnes metaclasses, avec les bonnes valeurs (attributs et références) Ο Syntaxe concrète textuelle vers syntaxe abstraite Ο Passage du « grammarware » au « modelware » Ο Production d'un AST (ou plutôt un graphe d'objets) Modèle (arbre de syntaxe abstraite) Modèle (arbre de syntaxe abstraite) Lorem ipsum dolor sit amet, consectetur adipisicing elit, Lorem ipsum dolor sit amet, consectetur adipisicing elit, ANTLR
  • 29. Injection (techniquement) from olivier.legoaer@univ-pau.fr to eric.cariou@univ-pau.fr stop Msg.xtext Sample.msg Message current = null; current = new Message(); current.setSource("olivier.legoaer@univ-pau.fr"); current.setTarget("eric.cariou@univ-pau.fr"); return current; Appel de la règle R1 Creation d'un EObject Code Java EMF réalisé par le parser ANTLR R1 returns Message: 'from' source=EMAIL ('to' target=EMAIL)? 'stop'
  • 30. Illustration : Le GPL Java ClassDefRule returns Class : (isAbstract?="abstract")? "class" name=ID "{" (methods+=MethodDefRule)* "}" class Voiture { void demarrer() {...} void stopper() {...} } isAbstract : EBoolean name : EString Class (extends EObject) isAbstract = false name = ''Voiture'' c1:Class name = ''demarrer'' m1:Method name = ''stopper'' m2:Method name : EString Method (extends EObject)+methods 0..* M2 M1 « grammarware » « modelware » Java.xtext Voiture.java Java.ecore Voiture.xmi
  • 31. DSL avec système de types ● Parfois, vous avez besoin d'implémenter un vrai système de types pour votre DSL Ο Typiquement le cas des langages de programmation ● Solutions Ο Natives : invariants OCL/Constraint-Checking de Xtext Ο Tierces : Xbase, XTS, Xsemantics, ... def isCool as boolean def price as integer isCool <- true //cool price <- ''foo'' //pas cool
  • 32. DSL exécutable ● L'exécutabilité peut être obtenue en projetant vers un langage cible, qui lui, est exécutable Ο Sémantique translationnelle (~Compilateur) Ο Transformation M2T (ex: MyDSL → code Python) ● Si le DSL doit être exécutable par lui-même Ο Sémantique opérationnelle (~VM) Ο Langage d'action (pur Java EMF, Kermeta, ...) Ο Si votre DSL intègre des expressions "Java-like", on utilise la grammaire Xbase ● L'utilisation de Xbase va gènèrer des implémentations Java naturellement exécutables par la VM Java
  • 33. Exercices pratiques ● Recréer des langages bien connus Ο Redéfinir le langage Java Ο Redéfinir le langage SQL Ο ... ● Inventer de nouveaux langages Ο Définir le langage WDL (Website Description Language) ● http://olegoaer.developpez.com/tutos/model/xtext/wdl/ Ο Définir le langage XMOB ● http://olegoaer.perso.univ-pau.fr/works/GlobalDSL2013.pdf Ο ...