Académique Documents
Professionnel Documents
Culture Documents
2023
Sommaire
1
1- Introduction
-> Notion de DSL (Domain Specific Language) et de Méta-DSL
▪ Les DSL captures mieux les besoins spécifiques. Nous les utilisons
chaque jour (xml, hmtl, css, json, etc.) sans même le savoir.
▪ Un méta-DSL est un DSL conçu pour créer des DSL, d’où l’appellation méta
(exemple xtext, bizon, etc).
2
2- Exemples de DSL
-> Html (Hypertext Markup Language) : langage de définition de page web
3
2- Exemples de DSL
-> CSS (Cascading Style Sheet) : langage de style pour page web
4
2- Exemples de DSL
-> SQl (Structured Query Language) : langage de requêtes pour base de données
5
3- L’outil Eclipse Xtext
Xtext est un méta-DSL fonctionnant avec l’éditeur éclipse. Il permet de construire des
DSLs avec les fonctionnalités suivantes :
▪ Coloration syntaxique
▪ Complétion de code
▪ Vue d’ensemble
▪ Navigation dans le code source
▪ Validation
▪ Renommage et Remaniement (Refractoring)
de noms
▪ …
6
3- L’outil Eclipse Xtext
-> Les grammaires comme outils de spécification
▪ Xtext utilise des grammaires pour spécifier des DSLs
7
3- L’outil Eclipse Xtext
-> Quelques DSLs faits avec Xtext
Retrouvez une liste non exhaustive des DSLs faits avec Xtext à cette adresse :
https://www.eclipse.org/Xtext/community.html
8
4- Modélisation d’un DSL avec Xtext
-> Création d’un DSL pour spécifier des entités d’un blog
9
4- Modélisation d’un DSL avec Xtext
-> Outils nécessaires
La liste des outils nécessaires pour confectionner un DSL avec xtext est la suivante:
10
4- Modélisation d’un DSL avec Xtext
-> Création du projet xtext
- Extension : blog
11
4- Modélisation d’un DSL avec Xtext
-> Résultat du projet créé
12
4- Modélisation d’un DSL avec Xtext
-> Première règle grammaticale : La règle d’entrée
Blog:
(elements+=Type)*;
13
4- Modélisation d’un DSL avec Xtext
-> La règle Type
Type:
DataType | Entity;
14
4- Modélisation d’un DSL avec Xtext
-> La règle Entité
Entity :
'entity' name=ID ('extends' superType=[Entity])? '{'
(features+=Feature)*
'}';
15
4- Modélisation d’un DSL avec Xtext
-> La règle Feature
Feature:
(many?='many')? name=ID ':' type=[Type];
16
4- Modélisation d’un DSL avec Xtext
-> La grammaire complète
grammar org.uds.master.blog.xtext.Blog with org.eclipse.xtext.common.Terminals
Blog:
(elements+=Type)*;
Type:
DataType | Entity;
DataType:
'datatype' name=ID;
Entity:
'entity' name=ID ('extends' superType=[Entity])? '{'
(features+=Feature)*
'}';
Feature:
(many?='many')? name=ID ':' type=[Type];
17
Rassurer vous d’avoir téléchargé
4- Modélisation d’un DSL avec Xtext et copié l’antlr generator dans le
projet xtext, avant d’effectuer
-> Génération des artefacts du langage l’operation
18
4- Modélisation d’un DSL avec Xtext
-> Tester le langage : lancer le projet comme application eclipse
19
4- Modélisation d’un DSL avec Xtext
-> Tester le langage : Créer un fichier .blog dans un projet
20
4- Modélisation d’un DSL avec Xtext
-> Tester le langage : Amusez vous !
21
4- Modélisation d’un DSL avec Xtext
-> Utilisation avancé : réalisation d’import
Import:
'import'
importedNamespace=QualifiedNameWithWildcard;
QualifiedNameWithWildcard:
QualifiedName '.*'?;
22
4- Modélisation d’un DSL avec Xtext
-> Utilisation avancé, réalisation d’import : nouvelle grammaire
grammar org.uds.master.blog.xtext.Blog with org.eclipse.xtext.common.Terminals
Blog:
(elements+=AbstractElement)*;
PackageDeclaration:
'package' name=QualifiedName '{'
(elements+=AbstractElement)*
'}';
AbstractElement:
PackageDeclaration | Type | Import;
QualifiedName:
ID ('.' ID)*;
Import:
'import' importedNamespace=QualifiedNameWithWildcard;
QualifiedNameWithWildcard:
QualifiedName '.*'?;
Type:
DataType | Entity;
DataType:
'datatype' name=ID;
Entity:
'entity' name=ID ('extends' superType=[Entity|QualifiedName])? '{'
(features+=Feature)*
'}';
Feature:
(many?='many')? name=ID ':' type=[Type|QualifiedName];
23
4- Modélisation d’un DSL avec Xtext
-> Tester à nouveau le langage
24
5- Allons plus loin : Compilation avec xtend
C’est quoi Xtend ?
▪ Xtend est un dialecte flexible et expressif de Java, qui se
compile en code source compatible avec Java 8.
25
5- Allons plus loin : Compilation avec xtend
-> Une simple génération de code affichant les noms des entités
package org.uds.master.blog.xtext.generator
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.AbstractGenerator
import org.eclipse.xtext.generator.IFileSystemAccess2
import org.eclipse.xtext.generator.IGeneratorContext
import org.uds.master.blog.xtext.blog.Entity
/**
* Generates code from your model files on save.
*
* See
https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#
code-generation
*/
class BlogGenerator extends AbstractGenerator {
26
5- Allons plus loin : Compilation avec xtend
-> Résultat de la génération de code
27
6- Conclusion
Xtext vous ouvre les portes de l’ingénierie des langages. Pour mieux
prendre en main Xtext vous pouvez explorer les autres
fonctionnalités suivantes :
- Débogage
- Quixfix
- Validation
- Etc.
28
Documentations
1 - https://www.eclipse.org/Xtext/index.html
2- https://www.eclipse.org/Xtext/community.html
3- https://www.eclipse.org/xtend/
4- https://www.eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html
5- https://github.com/dvojtise/mde-crashcourse-logo
6- https://en.wikipedia.org/wiki/Xtext
7- https://en.wikipedia.org/wiki/ANTLR
8- https://en.wikipedia.org/wiki/GNU_Bison
29