Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder.

Slides:



Advertisements
Présentations similaires
Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder.
Advertisements

Produit Gammes Nomenclatures Modules Techniques Prix de Revient Prix de Vente Modules Techniques Client Marges Mise en route Temps Unitaire Prix (Ex:
A l’issue des conseils de classe de 3ème,
Portée des variables VBA & Excel
Classification et prédiction
Classe : …………… Nom : …………………………………… Date : ………………..
Story-board version 1.1 Statut : à valider Rédacteur : Nicole Djuissi
Les Prepositions.
19 septembre 2006 Tendances Logicielles IBM Rational Data Architect Un outil complet de modélisation et de conception pour SGBD Isabelle Claverie-Berge.
1 V-Ingénierie… La compétence au service de lexigence… vous présente.
Cours n° 8 Conception et Programmation à Objets
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Présentation de l’application « Livret personnel de compétences »
Tutoriel XSLT F. Sajous ERSS – 01/04/2005.
Systèmes Experts implémentation en Prolog
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
Autorisations Utilisation eCATT
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
JOME, un Composant Logiciel pour le Télé-Enseignement des Mathématiques via le WEB, Compatible OpenMath et MathML Laurent DIRAT OVE / I3S-UNSA.
Algorithme et programmation
Les fonctions.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Développement d’applications web
IFT313 Introduction aux langages formels
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Contrôles d'accès aux données
Introduction : Compilation et Traduction
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
le profil UML en temps réel MARTE
Les structures de données arborescentes
II. Chaînage, SDD séquentielles
18/05/ Utiliser le cahier de texte en ligne avec lapplication SPIP Adresse du site du lycée :
Xml/xslt : Extensible Stylesheet Language Transformation réalisé par: saÏd NAÏM.
1.2 COMPOSANTES DES VECTEURS
Projet de Compilation Manuel VACELET, Jean Pierre CAURIER, Gaël COLLE,
Configuration de Windows Server 2008 Active Directory
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Complément Le diagramme des classes
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
La Saint-Valentin Par Matt Maxwell.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Xpath XML Path language par Yves Bekkers
Expressions régulières et hash tables
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Notre calendrier français MARS 2014
Chapitre 3 Syntaxe et sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
C'est pour bientôt.....
Veuillez trouver ci-joint
1 Couplage dun langage de contrôle de formatage avec un système de formatage existant DEA ISC : 1 avril 2003 Fateh Boulmaiz
Le diagramme de séquences
Programmation logique Le Langage PROLOG
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI Jean-Jacques DUMÉRY -1-
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 8 Filtres UNIX.
LUNDI – MARDI – MERCREDI – JEUDI – VENDREDI – SAMEDI – DIMANCHE
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Page 1 © Jean Elias Recherche et veille. Page 2 © Jean Elias Les fournisseurs.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Paradigmes des Langages de Programmation
Objectifs À la fin de ce cours, vous serez capables de :
CALENDRIER-PLAYBOY 2020.
Projet de stage d’année IIR4 sous le thème:
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
Algorithmique et programmation (1)‏
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Modélisation des documents: DTD et Schéma
Transcription de la présentation:

Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

Model-Driven Analysis and Synthesis of Concrete Syntax Models 2006 – Genoa Sosym – en instance Pierre-Alain Muller Franck Fleurey Frédéric Fondement Michel Hassenforder Rémi Schneckenburger Sébastien Gérard Jean-Marc Jézéquel

Model-Driven Analysis and Synthesis of Concrete Syntax Frédéric Fondement Pierre-Alain Muller Franck Fleurey Michel Hassenforder Jean-Marc Jézéquel David Touzet Michel Hassenforder Pierre-Alain Muller Rémi Schneckenburger Sébastien Gérard

Plan Introduction Métamodèle de sintaks Sémantique lors de la synthèse Sémantique lors de l'analyse Exemples Conclusion

Introduction - Motivation En général : Comment créer un modèle conforme à un métamodèle Il existe des outils pour faire des métamodèles Tous l'outillage autour de ecore Il existe des outils pour faire des modèles Tous l'outillage généré avec ecore Dans le cadre de la création/lecture de programme conforme à un métamodèle Grammarware : compilateur (text -> AST -> Model) Modelware : text <-> Model

Introduction - Illustration Un métamodèle très simple Des syntaxes concrètes Type:String Type:User Type:Mail Attribute:From Attribute:To Attribute:Name Type Mail { From : User To : User } Type User { Name : String Type String; Mail@From (User) Mail@To (User) User@Name (String) String;

Processus Sintaks Transformation Bidirectionnelle Meta-Language (Mof, Kermeta,…) Conforme Conforme Métamodèle de Syntaxe concrète Métamodèle de Syntaxe abstraite Conforme Conforme Modèle de Syntaxe concrète Modèle Conforme Sintaks Texte Transformation Bidirectionnelle

Métamodèle de sintaks

Métamodèle de sintaks eClass and eStructuralFeature Rule Root Ponts vers le métamodèle cible Rule Classe abstraite de base Root Container de fragments (rule) Donne le point de départ

Métamodèle de sintaks Sequence Template Terminal Adornment Une collection ordonnée de règles Template Spécifie la classe à utiliser du métamodèle cible Spécifie la règle à appliquer Terminal Un texte connu et fixe lors de la modélisation Un symbol terminal dans le grammarware Adornment Un symbole de décoration invisible comme la fin de ligne ou la tabulation

Métamodèle de sintaks Value (abstraite) PrimitiveValue Constant Un ensemble de propriétés qu’il faut utiliser PrimitiveValue Une portion de texte qui provient d’une ou de plusieurs propriétés Assure la manipulation des types de base : Integer, String, Real, Boolean, … Constant Une valeur fixe connue à la modélisation qu’il faut affecter à une ou plusieurs propriétés ObjectReference Permet de manipuler les propriétés qui référencent un autre objet en utilisant une de ses propriétés comme clé (unique) RuleRef Permet l’invocation d’une règle typiquement un fragment possédé par Root Ce concept permet le partage de règles URIValue Concept interne de sintaks pour sa propre syntaxe concrète.

Métamodèle de sintaks Iteration Permet de gérer une propriété de type container Assure la gestion d’un éventuel séparateur

Métamodèle de sintaks Choice (Abstraite) Condition (Abstraite) Ce concept permet de modéliser des variations dans la formulation de la syntaxe concrète Il possède un ensemble de condition Condition (Abstraite) Ce concept permet de décrire une condition particulière sous la forme D’une valeur que doit prendre une 'expression‘ Une règle qu’il faut exécuter CustomCondition Permet de décrire la propriété qu’il faut tester PolymorphicCondition Permet de décrire la classe qu’il faut tester

Métamodèle de sintaks Choice (Abstraite) Alternative Ce concept permet de modéliser des variations dans la formulation de la syntaxe concrète Il possède un ensemble de condition Alternative La liste de conditions est exploitée une fois pour en sélectionner la plus pertinente Once (expérimental) La liste de conditions est exploitée répétitivement pour sélectionner toutes les plus pertinente (comparable au concept all dans un schéma XML)

Sintaks est bidirectionnel ! Synthèse Impression par descente récursive Visiteur en profondeur Analyse Compilateur par descente récursive Comme du LL(k) (k=0..*) Synthèse Modèle Texte Analyse

Sémantique lors de la synthèse Règle Sequence Un container de règle à invoquer en séquence Règle Terminal La valeur est ajoutée dans le flux de sortie Ajoute des espaces pour délimiter Règle Adornment Selon le cas soit une tabulation (tab) soit une fin de ligne (eoln) est inséré dans le flux de sortie Règle Template Le template ne fait que spécifier le type de l'objet La sous règle est invoquée pour générer le texte associé blabla … blabla … blabla … #1 #2 #3 blabla … blabla … Texte_fixe

Sémantique lors de la synthèse unObject Règle PrimitiveValue Extrait une propriété de l'objet courant Conversion en texte puis impression avec délimiteurs Règle Constant Aucun effet Règle ObjectReference Cherche l'objet référencé Cherche la propriété utilisée comme clé Conversion la valeur en texte puis impression avec délimiteurs Règle RuleRef Invoque la règle interne Règle URIValue Secret de fabrication  Propriété = 10 blabla … blabla … 10 référence unObject leRéférencé clé = hello blabla … blabla … hello

Sémantique lors de la synthèse blabla … sép blabla … sép blabla … Règle Iteration La sous règle est invoquée pour chaque objet dans le container L’ordre utilisé est l’ordre du container Eventuellement un séparateur est inséré entre chaque invocation Règle Alternative Chaque condition est évaluée et la première à vraie déclenche la règle associée Règle Once Itération sur l’ensemble des conditions et chaque condition valide déclenche la règle associée #1 #2 #3 unObject prop1 = 10 prop2 = hello prop3 = true blabla … blabla … hello unObject prop1 = 10 prop2 = hello prop3 = true blabla … blabla … 10 hello true

Sémantique lors de la synthèse PolymorphicCondition [ valeur, metaClasse, objetCourant ] Que peut-on tester ? valeur="" objetCourant.class == metaClasse valeur="null" objetCourant.class == null valeur="any" objetCourant.class != null valeur="equals" objetCourant.class == metaClasse valeur="differs" objetCourant.class != metaClasse CustomCondition [ valeur, propriété, objetCourant ] valeur="" faux valeur="null" objetCourant.propriété == null valeur="any" objetCourant.propriété != null valeur="empty" ((String) objetCourant.propriété).length == 0 ((List) objetCourant.propriété).size == 0 valeur="filled" ((String) objetCourant.propriété).length != 0 ((List) objetCourant.propriété).size != 0 valeur="= v0" (String) objetCourant.propriété == v0 valeur="!= v0" (String) objetCourant.propriété != v0 Kermeta à l’aide …

Sémantique lors de l’analyse Analyseur lexical Supprime les espaces blancs (espace, tabulation, fin de ligne, …) Découpage mot par mot (un mot est délimité par des espaces blancs) Sait revenir à une position antérieur particulière Règle Sequence Un container de règle à invoquer en séquence sans échouer … Si on échoue, annulation de la séquence, backtracking pour restituer l’état initial Règle Terminal Une valeur est extraite du flux d’entrée Si elle correspond elle est consommée, sinon erreur Règle Adornment Rien, car les espaces blancs sont déjà supprimés Règle Template La metaClasse est instanciée et devient l’objet courant La sous règle est invoquée pour continuer l’analyse Si une erreur apparaît l’objet courant est oublié blabla … Texte_fixe blabla …

Sémantique lors de l’analyse unObject Règle PrimitiveValue Extrait un mot du flux d’entrée Conversion vers le type de la propriété cible Affectation à la propriété cible de l’objet courant Règle Constant Conversion de la valeur incluse vers le type de la propriété cible Règle ObjectReference Recherche dans le modèle courant avec la propriété clé un objet capable d’utiliser la clé Vérification que la valeur de la clé sur cet objet est celle extraite du flux Si oui affectation de la propriété cible de l’objet courant avec le référencé Sinon création d’un fantôme qui devra être résolu plus tard Règle RuleRef Invoque la règle interne Règle URIValue Secret de fabrication  Propriété = … blabla … 10 blabla … unObject blabla … blabla … 10 Propriété = … Modèle référence leRéférencé clé = hello unObject blabla … hello blabla …

Sémantique lors de l’analyse blabla … sép blabla … sép 10 Règle Iteration La sous règle est invoquée jusqu’à échec Chaque invocation avec succès permet l’insertion dans le container Eventuellement un séparateur est analysé entre chaque invocation Règle Alternative Une Itération sur l’ensemble des conditions Chaque règle dans chaque condition est évaluée La première qui analyse avec succès stoppe l’itération Après chaque erreur, l’analyseur revient en arrière Règle Once Répétition de l’Itération sur l’ensemble des conditions Jusqu’à ce qu’une itération ne trouve pas de condition satisfaisante Condition Les 'expressions' ne sont pas évaluées #1 #2 (en EBNF : x ::= a | b | c) (en EBNF : x ::= (a | b | c)* )

Exemples Exemple 1 : Type Exemple 2 : Expression – notation préfixée Exemple 2 : Expression - notation infixée

Example 1 : Type / MetaModel & Model Type Mail { From : User To : User } Type User { Name : String Type String;

Exemple 1 : Type / Modèle de syntaxe concrète Travaille sur la classe 'Model' Opère sur la collection 'chidren' Travaille sur la classe 'Type' Mot clé : Type Extraction de la propriété 'name' La liste 'attributes' est vide Un simple point-virgule Des accolades pour encadrer la liste Un saut de ligne pour faire joli Opère sur la collection 'attributes' Travaille sur la classe 'Attribute' Extraction de la propriété 'name' Référence l’objet dans le modèle + qui possède l’attribut 'name' + qui a la valeur extraite du flux

Exemple 1 : Type / Modèle de syntaxe concrète Travaille sur la classe 'Model' Invoque le fragment … bon c’est le Template Type Travaille sur la classe 'Type' Invoque le fragment … bon c’est le Template Attribut Travaille sur la classe 'Attribute'

Exemple 2 : metamodèle d’Expression

Exemple 2 : Expression / préfixée Notation préfixée operator + ( operator * ( 3 , 2 ) , 1 ) En BNF expr ::= operator * ( expr , expr ) | operator + ( expr , expr ) | integer Notation infixée 3 * 2 + 1

Exemple 2 : Expression / infixée <AdditiveOp> ::= <Term> ‘+’ <Expr> <MultiplicativeOp> ::= <Factor> ‘*’ <Term> <NumberInteger> ::= [0-9]+ <Expression> ::= <AdditiveOp> | <Term> <Term> ::= <MultiplicativeOp> | <Factor> <Factor> ::= <NumberInteger>

Spécification une syntaxe concrète textuelle Mapping bidirectionnel Conclusion Spécification une syntaxe concrète textuelle Mapping bidirectionnel Syntaxe concrète vers syntaxe abstraite Syntaxe abstraite vers syntaxe concrète Un outil Lecture par descente récursive Impression par visite en profondeur