270 likes | 431 Views
Composant logiciel. M O Ï R A. Une méthode et un outil destinés à simplifier le traitement des langages. Le traitement du langage. Présent dans 90% des développements logiciels scientifiques et techniques : configuration d’un logiciel (phrases cle=valeur),
E N D
Composant logiciel M O Ï R A Une méthode et un outil destinés à simplifier le traitement des langages
Le traitement du langage Présent dans 90% des développements logiciels scientifiques et techniques : • configuration d’un logiciel (phrases cle=valeur), • interprétation d’une commande, • calcul d’une expression, • génération de code, dérivation formelle, • contrôle sémantique, preuve de programmes, • etc ... Remarque : On ne traite pas les langues naturelles
Etat de l’art • Des algorithmes d’analyse syntaxique sont au point depuis les années 70, des outils de base standard sont disponibles (Yacc, Bison). • Démarche classique : • 1) Ecriture de la grammaire du langage à traiter, (formalisme BNF) décorée par des actions sémantiques. • 2) un constructeur syntaxique génère automatiquement le programme de reconnaissance de ce langage : un analyseur syntaxique.
Illustration (1) • Grammaire BNF (Backus Naur Form) : <phrase type> ::= <sujet> <verbe> <complément> . <affectation ::= <identifieur> = <expression> <addition> ::= <operande> + <operande> • Phrase syntaxiquement correcte : y = x + 1 • Erreur syntaxique : y = = x + 1 • Contrôle sémantique : x et y sont-ils déclarés ? du bon type ? • Action sémantique : Faut-il calculer y, traduire l‘instruction ?
Illustration (2) • La démarche classique : Constructeur Syntaxique Grammaire Analyseur Syntaxique Application Fichier de données
Exemple de code YACC %token UL_REEL UL_IDENT SP_PTV SP_EGAL SP_PLUS SP_MOINS ... %{ %} %start les_donnees %% les_donnees : {debut_liste_aff ();} des_affectations {fin_liste_aff ();}; affectation : identifieur SP_EGAL expression { creer_affectation ();} ; expression : addition | soustraction | terme; addition : expression SP_PLUS terme { creer_addition ();} ; soustraction : expression SP_MOINS terme { creer_soustraction ();} ; terme : multiplication | division; . . ................. reel : UL_REEL { creer_reel ();} ; identifieur : UL_IDENT { creer_identifieur ();} ; des_affectations : affectation { ajouter_affectation ();} | affectation SP_PTV { ajouter_affectation ();} des_affectations | SP_PTV ;
Problèmes liés au traitement du langage • De trop nombreux développeurs préfèrent un codage manuel. • Si l’analyse syntaxique est bien formalisée, la sémantique l’est beaucoup moins. • Yacc : Cohabitation de deux types de code dans un même fichier (grammaire formelle + code C) : lisibilité restreinte. • Séquencement des actions sémantiques : nécessité de comprendre le fonctionnement de l’analyseur pour savoir à quel moment les actions sont déclenchées, et sur quelles variables elles agissent. • Obligation d’écrire des grammaires régulières.
Spécificité de Moïra • La sémantique est implicite : aucune instruction n’apparaît dans la grammaire. • Utilisation d’une sémantique par arbre abstrait : le texte à analyser est transformé en une structure arborescente • qui coïncide à sa description formelle, • et qui est plus adaptée aux traitements applicatifs.
Exemple de grammaire MOïRA LesDonnees::= { Affectation }*; Affectation ::= identifieur "=" expression expression ::= Addition | Soustraction | terme Addition ::= expression "+" terme Soustraction ::= expression "-" terme terme ::= Multiplication | Division | facteur Multiplication ::= terme "*" facteur Division ::= terme "/" facteur facteur ::= Parentheses | Identifieur | Reel Parentheses ::= "(" expression ")" Identifieur ::= %IDENT Reel ::= %REEL
affectation expression addition expression terme multiplication terme terme facteur facteur facteur identifieur identifieur identifieur identifieur Y = A * X + B Arbre syntaxique • Texte analysé : Y = A*X + B • La conformité d'un texte est prouvée si l'on peut énumérer les règles grammaticales qui ont permis de structurer ce texte • On peut faire apparaître ces règles sous forme arborescente
affectation expression addition expression terme multiplication terme terme facteur facteur facteur identifieur identifieur identifieur identifieur Y = A * X + B Arbre abstrait (1) L'arbre abstrait est une simplification de l'arbre syntaxique. On élimine : • Les règles intermédiaires non significatives (expression, terme, facteur) • Les mot-clés et séparateurs qui sont des symboles de ponctuation devenus inutiles
affectation expression addition expression terme multiplication terme terme facteur facteur facteur identifieur identifieur identifieur identifieur Y = A * X + B Arbre abstrait : élimination des nœuds inutiles
Arbre généré Vue d’ensemble Constructeur syntaxique 1) Écriture d ’une grammaire Grammaire MOÏRA 2) Génération de l’automate de reconnaissance x = 5 y = 3*x+1 y = ? y=16 Calcul Texte en entrée Application Résultat
Exemple : un programme de calcul double calcul (arbre racine) { arbre ndgauche, nddroite; int rule; aa_interroger_noeud (racine, &rule, &ndgauche, &nddroite); switch (rule) { caseCD_Affectation : ident = aa_ident(ndgauche); result = calcul (nddroite); set_value(ident, result); break; caseCD_Addition : result = calcul(ndgauche) + calcul(nddroite); break; caseCD_Multiplication : result = calcul(ndgauche) * calcul(nddroite); break; caseCD_Parentheses : result = calcul(ndgauche); break; ......... caseCD_Reel : result = aa_reel (racine); break; caseCD_Identifieur: ident = aa_ident(racine); result = get_value (ident); break; } return result;
Conséquences de la méthode • Séparation nette de 2 classes d’algorithmes correspondant chacune à un métier différent. • On fait abstraction de l’analyse syntaxique et des fonctions de bas niveau (analyse lexicale, saisie du texte, …). • On se consacre aux tâches à réelle valeur ajoutée de l’application : développement plus rapide (et plus intéressant).
Mise en œuvre de Moïra • Lancer la commande : $ moira MyData Effet : • analyse le fichier MyData.bnf • génère l’include MyDataRules.h qui contient les codes associés aux règles, • ainsi que le module C++ MyDataLoad.cc … • qui contient la fonction MyDataLoad() … • laquelle fournit l’objet de classe MoiraLang configuré selon le langage MyData.
Fourniture Moïra • Le générateur (C Ansi). • La bibliothèque de support à l’exploitation (C/C++). • Manuel de référence (WORD). • Guide HTML. • Quelques exemples d’algorithmes : traduction, calcul arithmétique, dérivation formelle, résolution formelle, …
MOÏRA Quelques références
Historique • 1980 Mise en œuvre de cette technique de sémantique par arbre abstrait par Jacques Raguideau pour le compilateur Quatrix (Cisi Saclay). • 1989 redécouverte pour ALLAN/Simulation (version FORTRAN de l’analyseur). • 1991 Création de Moïra (C Ansi, s’appuyant sur YACC, puis autonome) • 2004 : version C++ de MOïRA 4.
Références en modélisation et simulation (1) Objet : Modélisation de systèmes physiques par équations différentielles et/ou schémas-blocs. Génération de simulateur, directe ou via un solveur. Techniques : Contrôle sémantique du texte, assemblage de modèles, traduction, génération de code, dérivation formelle. • ALLAN.™Simulation, (Gaz de France, 1987-94) : pré/post processeur de Neptunix.(ancêtre écrit en FORTRAN). • SCRIBT (CEA,GDF, 1993) : Modélisation au moyen de Bondgraphs. • ARCJET : (Dassault, 1993) Génération de langage NEPTUNIX à partir d'une forme itérée d’équations.
Références en modélisation et simulation (2) • ULM (GDF, 1993) : Un Langage de Modélisation destiné à l'échange de modèles physiques. • VENUS (Cisi, 1995) : Maquettage d'un générateur de simulateurs. • ADASSL (DDS, 1995) : Interface ALLAN/DASSL. • NEPTUNIX+ (Cisi+GIAT,1998) : Nouvelle génération du langage de description des équations.
Références en programmation Objet : Compilation, contrôle sémantique, traduction. • QUATRIX (Cisi, 1980) : langage dédié aux applications scientifiques. (Ancêtre Pascalien de Moïra). • ATES (Projet Esprit, 1986) : Mise en oeuvre de techniques de preuve de programme. • PEGASE (CEA/IPSN, 1993) : Génération de jeux de données décrits formellement à partir des chemins sémantiques des programmes. • MOïRA (Cisi,1994) Traduction du générateur PL1 en C. • HORUS (2003 CEA/DAM) : Traduction de fonctions FORTRAN en C.
Références bases de données • LMD2 (EDF, 1991) : (1ère maquette YACC de Moïra) Journalisation et réinterprétation des requêtes. • LDV (1993, EDF) : Traduction et optimisation des requêtes du Modèle Conceptuel des données en SQL. • OTARIE (1994 CNET) : Interprétation du langage de commande destiné à gérer les réseaux de télécommunication. • SACBASE (1996 EDF) : Acquisition d'une base de connaissances pour une centrale thermique.
Analyse des données en calcul scientifique • NEPTUNIX 3 (1994, Cisi) : Langage d’exploitation des simulateurs. • CEDRES (1998 CEA) : Code de calcul d'équilibre d'un plasma dans un Tokamak. Analyse des données et étude des scénarios. • LINDEP (1999 GIAT) : Interpréteur de spécifications de plans d’expériences . • HERA (2004 CEA/DAM) : Lecture d’un fichier de données structurées. Version C++ de l’analyseur.
Références diverses • ALLAN2 et ALLAN3 (GDF 1989 et 1995) , ODESSA (2000 CEA Saclay) : Calculettes utilisées en post-traitements sur des variables affichées • ISEPUMS (1999 ESI Project 2792) : Respécification en VDM-SL d’un module du segment sol de SPOT4. • HERA (2003 CEA/DAM) : Mise en place d’un mécanisme de contrôle d’assertions post-simulation.
FIN Merci de votre attention. Avez vous des Questions ???