Définir son propre DSL avec Xtext

Pourquoi un DSL ?

Un DSL (Domain Specific Language) est un langage dédié à une problématique métier spécifique. C’est une notion qui s’oppose aux langages de programmation dits généralistes, de type Java ou C, ou bien aux langages de modélisation généralistes de type UML.

L’avantage des DSLs réside dans leur puissance d’expression, puisque conçus pour une problématique précise, et dans leur facilité de traitement lorsqu’il s’agit d’effectuer de la validation ou de la transformation (génération de code par exemple).

En contrepartie, un DSL nécessite de définir un méta-modèle et une notation, ce qui représente un temps de développement et d’apprentissage du langage supplémentaire.

DSL textuel ou graphique ?

Il y a plusieurs manières de concevoir un DSL.

Tout d’abord, la définition du DSL peut être envisagée de différentes manières.

def-dsl

Définition d'un DSL

Bien que toutes ces possibilités soient valides, le choix doit être fait en tenant compte de l’existant, du contexte d’utilisation et de l’outillage existant.

De même, la notation du DSL peut être graphique ou textuelle.

Notation Graphique vs Textuelle

Notation Graphique vs Textuelle

Les notations graphiques sont bien sûr plus visuelles et efficaces pour représenter des relations entre éléments. Par contre, dés qu’il s’agit de décrire et d’éditer des détails, la notation textuelle est souvent plus simple d’utilisation. D’autre part, elle permet de mettre en œuvre plus simplement des mécanismes de diff et merge.

Il est également possible de mixer les deux notations.

Xtext

Xtext est un projet Eclipse pour réaliser des DSLs textuels (http://www.eclipse.org/Xtext/).

Il est ainsi possible de définir simplement son DSL sous la forme d’une grammaire de type EBNF.

Voici un exemple de grammaire :

Exemple de grammaire

Exemple de grammaire

Les 2 premières lignes permettent de définir le nom et l’espace de nom du DSL.

On définit ensuite un modèle qui est constitué de types simples ou d’entités, contenant elles-mêmes des propriétés. Chaque propriété est caractérisée par un type simple ou référencent une entité.

A partir de cette grammaire, on génère un ensemble d’outils basés sur EMF qui vont permettre de travailler avec son propre DSL :

  • un parseur
  • le modèle Ecore
  • un éditeur, basé sur sa propre grammaire, offrant des possibilités personnalisables de complétion de code, coloration syntaxique, liens, validation, …

Voici un exemple de modèle décrit avec le DSL défini ci-dessus :

Exemple de modèle

Exemple de modèle

Xtext est intégré avec un autre projet Eclipse Xpand qui permet de générer du code (ou tout autre élément textuel comme du XML), de faire de la transformation de modèle et offre un langage définition de contraintes de type OCL.

Le format interne du modèle est basé sur EMF. Il est ainsi possible de réutiliser ce modèle avec d’autres technologies compatibles. Par exemple, il est possible d’introduire des aspects graphiques, en utilisant GMF.

Conclusion

Xtext offre donc une chaine d’outil intégrée permettant de définir et de travailler avec son propre DSL textuel, allant de la définition du méta-modèle jusqu’à la génération de code.

Pour en savoir plus, des tutoriaux et webinar sont disponibles sur le site http://www.eclipse.org/Xtext/.

Pour démarrer simplement avec Xtext, il est possible de télécharger la distribution fournie par itemis sur le site http://xtext.itemis.com.

Le projet open source Xtext est développé et maintenu par itemis, qui propose formation et support sur ces technologies.

Laisser un commentaire