Attribute Grammars for the Modular Design of Domain Specific Languages
Les grammaires attribuées pour la conception et l'assemblage de langages dédiés
Résumé
Language Oriented Programming (LOP) is a style of computer programming, via metaprogramming, which allows the programmer "to work in terms of the concepts and notions of the problem, instead of being forced to translate his ideas into the notions that a fixed general-purpose language is able to understand" (Ward & Sergey). That means the programmer creates one or more domain-specific languages (DSL) for the problem first, and solves the problem in those languages. In this thesis, we propose a methodological approach to software development based on this concept. We aim to follow the same methodological approach in terms of languages than what is conventionally done for software components. In this case, we use the formalism of attribute grammars to try to answer the following question: how can we create new languages by composing reusable existing languages? We take advantage of their translation into algebra of functional combinators to define functional executable specifications of domain-specific languages (viewed as software components), embedded in the purely functional language Haskell. From significant examples of extension and reuse of domain-specific languages (by stratification of DSLs or by changing the monad), we propose a type system for domain-specific languages for their assembly and reuse. To illustrate this approach, we describe a domain-specific language (a library of combinators) for editing structured documents. A document is represented by an attributed zipper, a localizable tree-structure, representing a tree and its context, and characterized by an attribute grammar. The proccess of editing consists therefore in the interactive modification of this structure, resulting in partial or total reevaluation of attributes. The data can also be edited through an abstract view obtained by projection of the concrete structure. This raises the problem of view update, a well-known problem of the database community, to which we give a solution with our editor combinators
La Programmation Orientée Langage est un paradigme de programmation qui tente, par la technique de méta-programmation, de changer les habitudes des développeurs de systèmes informatiques en leur permettant de "travailler en termes de concepts et notions du problème à résoudre, au lieu d'être toujours obligés de traduire leurs idées aux notions qu'un langage généraliste est capable de comprendre" (Ward et Sergey). Le développement de logiciels passe de ce fait par la conception de langages dédiés : on définit un ou plusieurs langages qui capturent les caractéristiques du domaine étudié, puis on écrit les applications visées en utilisant ces langages. Dans cette thèse, nous proposons une démarche méthodologique de développement logiciel reposant sur ce concept. Il s'agit de conduire la même démarche méthodologique au niveau des langages que ce qui est classiquement fait au niveau des composants logiciels. En l'occurrence, nous utilisons le formalisme des grammaires attribuées pour tenter de répondre à la question suivante : comment peut-on créer de nouveaux langages par composition de langages réutilisables existants ? Nous tirons profit de leur traduction en algèbres de combinateurs fonctionnels pour définir des spécifications exécutables de langages dédiés (vus comme composants logiciels), plongés dans le langage fonctionnel pur Haskell. \'{A} partir d'exemples significatifs d'extension et de réutilisation de langages dédiés (par stratification de ceux-ci, ou par changement de monade), nous proposons un typage de langages dédiés en vue de leur assemblage et leur réutilisation. Pour illustrer cette démarche, nous décrivons un langage dédié (bibliothèque de combinateurs) pour l'édition de documents structurés. Un document y est représenté par un zipper attribué, une structure arborescente localisable, représentant un arbre et son contexte, et caractérisée par une grammaire attribuée. L'édition consiste alors à la modification interactive de cette structure ; ce qui entraîne une réévaluation totale ou partielle des attributs. L'édition peut aussi être réalisée à travers une vue abstraite obtenue par projection de la structure concrète. Ce qui pose le problème de \textit{mise à jour de vue}, un problème familier de la communauté des bases de données, auquel nous donnons une solution grâce à nos combinateurs d'éditeurs.
Loading...