Sintaks Ingnierie Dirige par les Modles Applique lAnalyse

  • Slides: 31
Download presentation

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

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

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

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 Model-Driven Analysis and Synthesis of Concrete Syntax 4

Plan • • • 5 / 429 Introduction Métamodèle de sintaks Sémantique lors de

Plan • • • 5 / 429 Introduction Métamodèle de sintaks Sémantique lors de la synthèse Sémantique lors de l'analyse Exemples Conclusion Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Introduction - Motivation 6 / 429 • En général : Comment créer un modèle

Introduction - Motivation 6 / 429 • 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 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Introduction - Illustration 7 / 429 • Un métamodèle très simple • Des syntaxes

Introduction - Illustration 7 / 429 • Un métamodèle très simple • Des syntaxes concrètes Type Mail { From : User To : User } Type User { Name : String } Type String; Type: Mail@From (User) Mail@To (User) User@Name (String) Type: User Attribute: From Attribute: To String; Attribute: Name Type: String Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Processus 8 / 429 Meta-Language (Mof, Kermeta, …) Conforme Métamodèle de Syntaxe concrète Métamodèle

Processus 8 / 429 Meta-Language (Mof, Kermeta, …) Conforme Métamodèle de Syntaxe concrète Métamodèle de Syntaxe abstraite Conforme Modèle de Syntaxe concrète Conforme Sintaks Texte Transformation Bidirectionnelle Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks 9 / 429 Sintaks : Ingénierie Dirigée par les Modèles Appliquée

Métamodèle de sintaks 9 / 429 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks • 10 / 429 e. Class and e. Structural. Feature Ponts

Métamodèle de sintaks • 10 / 429 e. Class and e. Structural. Feature Ponts vers le métamodèle cible • Rule Classe abstraite de base • Root Container de fragments (rule) Donne le point de départ Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks 11 / 429 • Sequence Une collection ordonnée de règles •

Métamodèle de sintaks 11 / 429 • Sequence 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 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks • Value (abstraite) • Primitive. Value • Constant • Object. Reference

Métamodèle de sintaks • Value (abstraite) • Primitive. Value • Constant • Object. Reference • Rule. Ref • URIValue 12 / 429 Un ensemble de propriétés qu’il faut utiliser 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, … Une valeur fixe connue à la modélisation qu’il faut affecter à une ou plusieurs propriétés 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) Permet l’invocation d’une règle typiquement un fragment possédé par Root Ce concept permet le partage de règles Concept interne de sintaks pour sa propre syntaxe concrète. Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks • 13 / 429 Iteration Permet de gérer une propriété de

Métamodèle de sintaks • 13 / 429 Iteration Permet de gérer une propriété de type container Assure la gestion d’un éventuel séparateur Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks • 14 / 429 Choice (Abstraite) Ce concept permet de modéliser

Métamodèle de sintaks • 14 / 429 Choice (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 • Custom. Condition Permet de décrire la propriété qu’il faut tester • Polymorphic. Condition Permet de décrire la classe qu’il faut tester Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Métamodèle de sintaks • 15 / 429 Choice (Abstraite) Ce concept permet de modéliser

Métamodèle de sintaks • 15 / 429 Choice (Abstraite) 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 : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sintaks est bidirectionnel ! 16 / 429 • Synthèse Impression par descente récursive Visiteur

Sintaks est bidirectionnel ! 16 / 429 • Synthèse Impression par descente récursive Visiteur en profondeur • Analyse Compilateur par descente récursive Comme du LL(k) (k=0. . *) Modèle Synthèse Texte Analyse Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de la synthèse • Règle Sequence Un container de règle à invoquer

Sémantique lors de la synthèse • Règle Sequence Un container de règle à invoquer en séquence • blabla … #1 blabla … #2 blabla … #3 Règle Terminal La valeur est ajoutée dans le flux de sortie Ajoute des espaces pour délimiter • 17 / 429 blabla … Texte_fixe 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é Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de la synthèse • Règle Primitive. Value 18 / 429 un. Object

Sémantique lors de la synthèse • Règle Primitive. Value 18 / 429 un. Object Propriété = 10 Extrait une propriété de l'objet courant Conversion en texte puis impression avec délimiteurs • Règle Constant • Règle Object. Reference blabla … 10 Aucun effet un. Object référence Cherche l'objet référencé Cherche la propriété utilisée comme clé Conversion la valeur en texte puis impression avec délimiteurs le. Référencé clé = hello blabla … • Règle Rule. Ref • Règle URIValue hello Invoque la règle interne Secret de fabrication Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de la synthèse • 19 / 429 blabla … Règle Iteration sép

Sémantique lors de la synthèse • 19 / 429 blabla … Règle Iteration sép blabla … sép #1 blabla … #2 #3 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 • un. Object Règle Alternative prop 1 = 10 prop 2 = hello prop 3 = true Chaque condition est évaluée et la première à vraie déclenche la règle associée blabla … • hello Règle Once Itération sur l’ensemble des conditions et chaque condition valide déclenche la règle associée blabla … 10 hello un. Object prop 1 = 10 prop 2 = hello prop 3 = true Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de la synthèse • 20 / 429 Polymorphic. Condition [ valeur, meta.

Sémantique lors de la synthèse • 20 / 429 Polymorphic. Condition [ valeur, meta. Classe, objet. Courant ] Que peut-on tester ? l’a id e a et m Que peut-on tester ? à Custom. Condition [ valeur, propriété, objet. Courant ] Ke r • … valeur="" objet. Courant. class == meta. Classe valeur="null" objet. Courant. class == null valeur="any" objet. Courant. class != null valeur="equals" objet. Courant. class == meta. Classe valeur="differs" objet. Courant. class != meta. Classe valeur="" faux valeur="null" objet. Courant. propriété == null valeur="any" objet. Courant. propriété != null valeur="empty" ((String) objet. Courant. propriété). length == 0 ((List) objet. Courant. propriété). size == 0 valeur="filled"((String) objet. Courant. propriété). length != 0 ((List) objet. Courant. propriété). size != 0 valeur="= v 0"(String) objet. Courant. propriété == v 0 valeur="!= v 0" (String) objet. Courant. propriété != v 0 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de l’analyse • 21 / 429 Analyseur lexical Supprime les espaces blancs

Sémantique lors de l’analyse • 21 / 429 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 • blabla … Texte_fixe blabla … Règle Adornment Rien, car les espaces blancs sont déjà supprimés • Règle Template La meta. Classe 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é Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de l’analyse • • 22 / 429 un. Object Règle Primitive. Value

Sémantique lors de l’analyse • • 22 / 429 un. Object Règle Primitive. Value 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 Propriété = … blabla … Règle Constant • Conversion de la valeur incluse vers le type de la propriété cible Affectation à la propriété cible de l’objet courant un. Object 10 Propriété = … Règle Object. Reference • Règle Rule. Ref • 10 blabla … Extrait un mot du flux d’entrée 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é Modèle Sinon création d’un fantôme qui devra être résolu plus tard référence le. Référencé clé = hello Invoque la règle interne Règle URIValue un. Object Secret de fabrication blabla … hello blabla … Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Sémantique lors de l’analyse • Règle Iteration 23 / 429 blabla … sép #1

Sémantique lors de l’analyse • Règle Iteration 23 / 429 blabla … sép #1 blabla … sép 10 #2 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 (en EBNF : x : : = a | b | c) 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 (en EBNF : x : : = (a | b | c)* ) Répétition de l’Itération sur l’ensemble des conditions Jusqu’à ce qu’une itération ne trouve pas de condition satisfaisante La première qui analyse avec succès stoppe l’itération Après chaque erreur, l’analyseur revient en arrière • Condition Les 'expressions' ne sont pas évaluées Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemples 24 / 429 • Exemple 1 : Type • Exemple 2 : Expression

Exemples 24 / 429 • Exemple 1 : Type • Exemple 2 : Expression – notation préfixée • Exemple 2 : Expression - notation infixée Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Example 1 : Type / Meta. Model & Model 25 / 429 Type Mail

Example 1 : Type / Meta. Model & Model 25 / 429 Type Mail { From : User To : User } Type User { Name : String } Type String; Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemple 1 : Type / Modèle de syntaxe concrète 26 / 429 Travaille sur

Exemple 1 : Type / Modèle de syntaxe concrète 26 / 429 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 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemple 1 : Type / Modèle de syntaxe concrète 27 / 429 Travaille sur

Exemple 1 : Type / Modèle de syntaxe concrète 27 / 429 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' Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemple 2 : metamodèle d’Expression 28 / 429 Sintaks : Ingénierie Dirigée par les

Exemple 2 : metamodèle d’Expression 28 / 429 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemple 2 : Expression / préfixée 29 / 429 Notation préfixée operator + (

Exemple 2 : Expression / préfixée 29 / 429 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 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Exemple 2 : Expression / infixée <Additive. Op> : : = 30 / 429

Exemple 2 : Expression / infixée <Additive. Op> : : = 30 / 429 <Term> ‘+’ <Expr> <Multiplicative. Op> : : = <Factor> ‘*’ <Term> <Number. Integer> : : = [0 -9]+ <Expression> | : : = <Additive. Op> <Term> : : = | <Multiplicative. Op> <Factor> : : = <Number. Integer> Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle

Conclusion 31 / 429 • Spécification une syntaxe concrète textuelle • Mapping bidirectionnel Syntaxe

Conclusion 31 / 429 • 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 Sintaks : Ingénierie Dirigée par les Modèles Appliquée à l’Analyse et la Synthèse de Syntaxe Textuelle