Lors de la dernière PDC 2008 à Los Angeles, Microsoft a dévoilé les dernières avancées sur Oslo, sa plateforme de développement guidé par les modèles.

Dans l’épisode précédent, j’avais tenté de répondre à la question :

Aujourd’hui, je vais essayer de montrer comment on utilise cet atelier de fabrication de DSL qu’est Oslo.

Un atelier de fabrication de DSL

Selon la définition donnée par Martin Fowler, Oslo semble correspondre au concept de language workbench, en français, un atelier de fabrication de DSL. Ainsi, Quadrant et Intellipad sont les outils graphiques et textuels de design. Ils permettent de modifier un modèle (MSchema), une grammaire (MGrammar), mais également l’arbre syntaxique correspondant à la transformation d’un script particulier (MGraph).

Des différences existent cependant entre le concept de language workbench et Oslo. Ainsi, dans Oslo, l’arbre syntaxique n’est jamais abstrait. Il est manipulé et persisté sous forme textuelle, à l’aide de MGraph.

Un exemple de langage…

Pour approfondir le sujet, j’ai concocté un petit exemple. Il s’agit d’une grammaire simple permettant de décrire des personnes possédant des véhicules. Le DSL est baptisé DSLi.

DSLi doit permettre d’exprimer dans un script des informations toutes aussi variées que…

Hugues Martin possède une voiture   de marque Renault, de modèle Scenic,   de couleur grenat, mise en service en 2002.

ou…

Jean-Paul Dupont ne possède pas de véhicule.

ou bien encore…

François Berry possède une voiture   de marque Peugeot, de modèle 1007,   de couleur rouge, mise en service en 2006; il possède aussi une voiture   de marque Citroën, de modèle C4,   de couleur rouge, mise en service en 2007; il a également une moto   de marque Suzuki, de modèle SV650S,   de couleur rouge (décidément !), mise en service en 2004.

Et sa syntaxe

L’objectif de ma démarche est d’interpréter le contenu de tels scripts, en établissant une grammaire, afin d’exploiter les informations dans une application.

Voici un extrait de la grammaire.

syntax AucunVehicule = 'ne' 'possède' 'pas' 'de' 'véhicule.'; syntax Vehicules = AucunVehicule         => Vehicules { null }         | p:PremierVehicule v:AutreVehicule* '.'         => Vehicules         {             p,             valuesof(v)         }; syntax Main = p:Personne+         => Personnes         {             valuesof(p)         };

L’extrait présente 3 règles de grammaire :

  • La première règle repère les personnes n’ayant pas de véhicule.
  • La seconde gère l’alternative entre une personne ayant au moins un véhicule, et celle n’en ayant pas.
  • Enfin, la dernière règle est la règle principale. Elle génère le nœud racine de l’arbre syntaxique, une liste de personnes.

Construire et utiliser le DSL

Le schéma suivant présente la construction et l’utilisation de DSLi et de son modèle.

Les étapes sont les suivantes :

  1. Le modèle sémantique est défini à l’aide de MSchema.
  2. La grammaire est définie à l’aide de MGrammar.
  3. La grammaire est compilée pour être transformée en un parser spécifique à DSLi. Cette étape est en réalité plus complexe, puisqu’elle fait appel à une transformation intermédiaire en XAML, et que la création du parser est dynamique.
  4. Le script est rédigé en langage DSLi.
  5. Le script est finalement transformé par le parser en une représentation MGraph.

L’une des assemblies fournies permet de parcourir manuellement l’arbre syntaxique généré, et de le traduire en objets faiblement typés, au sein d’une application .NET. Gageons que les futures évolutions des API nous permettrons de réaliser cette étape de manière automatique, et récupérer des objets fortement typés. Certains projets de la communauté vont d’ailleurs dans ce sens.

Les outils de l’atelier

Du point de vue des outils, Intellipad s’avère pratique pour la définition du modèle sémantique. Pour la création de la grammaire, Intellipad propose un mode d’édition très pratique, à 3 volets : le volet de gauche pour le script de test, le volet central pour la grammaire MGrammar, le volet de droite pour la représentation MGraph.

Je n’ai malheureusement pas pu effectuer de test avec Quadrant, l’outil ne fait en effet pas partie de la version CTP d’Oslo.

Téléchargement du code

Références

Billets sur le même thème

Oslo

Les DSL