Contribution aux relations entre les grammaires attribuees et la programmation fonctionnelle
Institution:
OrléansDisciplines:
Directors:
Abstract EN:
Pas de résumé disponible.
Abstract FR:
L'ingenierie du logiciel doit concilier, d'une part, la modularite requise par les phases de developpement et de maintenance et, d'autre part, l'efficacite indispensable dans la mise en uvre des applications. Ce dilemme necessite des methodes et des techniques de transformation permettant d'accroitre l'efficacite des programmes modulaires. La deforestation, qui consiste a eliminer les structures intermediaires apparaissant lors de la composition des differentes parties d'un programme, a suscite beaucoup d'interet, notamment en grammaires attribuees et en programmation fonctionnelle. En depit de la diversite des formalismes utilises, cette these compare les differentes techniques existantes et s'inspire de leurs atouts pour developper une nouvelle methode de deforestation plus generale. Tout d'abord, une extension naturelle des grammaires attribuees est introduite pour permettre de representer une plus large classe de programmes fonctionnels. Les grammaires attribuees dynamiques peuvent se passer de la presence physique d'un arbre pour guider les calculs et les transformations, mais beneficient des methodes classiques d'evaluation des grammaires attribuees. Ensuite, les principales methodes fonctionnelles de deforestation (algorithme de wadler, regle d'elimination foldr/build, normalisation des folds, fusion d'hylomorphismes) sont etudiees et comparees avec la composition descriptionnelle des grammaires attribuees. Les limitations de chaque methode sont etablies et permettent de determiner les atouts necessaires pour ces transformations de programmes. Finalement, une nouvelle methode de deforestation est proposee. La composition symbolique utilise la puissance du formalisme des grammaires attribuees et incorpore un mecanisme d'evaluation partielle. Cette technique generale peut etre appliquee sur des grammaires attribuees ou sur des programmes fonctionnels et permet de deforester des programmes pour lesquelles les methodes existantes restaient impuissantes.