31

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

Embed Size (px)

Citation preview

Page 1: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder
Page 2: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

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

Textuelle

Michel Hassenforder

Page 3: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

Model-Driven Analysis and Synthesis of Concrete Syntax

Models 2006 – GenoaSosym – en instance

Pierre-Alain MullerFranck FleureyFrédéric FondementMichel HassenforderRémi SchneckenburgerSébastien GérardJean-Marc Jézéquel

Page 4: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

4Model-Driven Analysis and Synthesis of Concrete Syntax

Model-Driven Analysis and Synthesis of Concrete Syntax

Pierre-Alain MullerFranck Fleurey

Michel HassenforderJean-Marc Jézéquel

Frédéric Fondement

Rémi SchneckenburgerSébastien Gérard

David TouzetMichel HassenforderPierre-Alain Muller

Page 5: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

5

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

/ 429Plan

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

Page 6: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

6

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

/ 429Introduction - 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èlesTous 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

Page 7: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

7

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

/ 429Introduction - 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;

Page 8: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

8

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

/ 429Processus

Meta-Language(Mof, Kermeta,…)

Métamodèle deSyntaxe concrète

Métamodèle deSyntaxe abstraite

Modèle deSyntaxe concrète

Modèle

Texte

Conforme

Conforme Conforme

ConformeConforme

Sintaks

TransformationBidirectionnelle

Page 9: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

9

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

/ 429Métamodèle de sintaks

Page 10: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

10

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

/ 429Métamodèle de sintaks

• eClass and eStructuralFeaturePonts vers le métamodèle cible

• RuleClasse abstraite de base

• RootContainer de fragments (rule)Donne le point de départ

Page 11: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

11

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

/ 429Métamodèle de sintaks

• SequenceUne collection ordonnée de règles

• TemplateSpécifie la classe à utiliser du métamodèle cibleSpécifie la règle à appliquer

• TerminalUn texte connu et fixe lors de la modélisationUn symbol terminal dans le grammarware

• AdornmentUn symbole de décoration invisible comme la fin de ligne ou la tabulation

Page 12: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

12

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

/ 429Métamodèle de sintaks

• Value (abstraite)Un ensemble de propriétés qu’il faut utiliser

• PrimitiveValueUne portion de texte qui provient d’une ou de plusieurs propriétésAssure la manipulation des types de base : Integer, String, Real, Boolean, …

• ConstantUne valeur fixe connue à la modélisation qu’il faut affecter à une ou plusieurs propriétés

• ObjectReferencePermet de manipuler les propriétés qui référencent un autre objet en utilisant une de ses propriétés comme clé (unique)

• RuleRefPermet l’invocation d’une règle typiquement un fragment possédé par RootCe concept permet le partage de règles

• URIValueConcept interne de sintaks pour sa propre syntaxe concrète.

Page 13: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

13

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

/ 429Métamodèle de sintaks

• IterationPermet de gérer une propriété de type containerAssure la gestion d’un éventuel séparateur

Page 14: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

14

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

/ 429Métamodèle de sintaks

• Choice (Abstraite)Ce concept permet de modéliser des variations dans la formulation de la syntaxe concrèteIl 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

• CustomConditionPermet de décrire la propriété qu’il faut tester

• PolymorphicConditionPermet de décrire la classe qu’il faut tester

Page 15: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

15

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

/ 429Métamodèle de sintaks

• Choice (Abstraite)Ce concept permet de modéliser des variations dans la formulation de la syntaxe concrèteIl possède un ensemble de condition

• AlternativeLa 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)

Page 16: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

16

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

/ 429

Texte

Sintaks est bidirectionnel !

• SynthèseImpression par descente récursiveVisiteur en profondeur

• AnalyseCompilateur par descente récursiveComme du LL(k) (k=0..*)

Synthèse Modèle

Analyse

Page 17: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

17

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

/ 429Sémantique lors de la synthèse

• Règle SequenceUn container de règle à invoquer en séquence

• Règle TerminalLa valeur est ajoutée dans le flux de sortieAjoute des espaces pour délimiter

• Règle AdornmentSelon le cas soit une tabulation (tab) soit une fin de ligne (eoln) est inséré dans le flux de sortie

• Règle TemplateLe template ne fait que spécifier le type de l'objetLa sous règle est invoquée pour générer le texte associé

blabla … blabla … blabla …

blabla … blabla … Texte_fixe

#1 #2 #3

Page 18: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

18

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

/ 429Sémantique lors de la synthèse

• Règle PrimitiveValueExtrait une propriété de l'objet courantConversion en texte puis impression avec délimiteurs

• Règle ConstantAucun effet

• Règle ObjectReferenceCherche 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 RuleRefInvoque la règle interne

• Règle URIValueSecret de fabrication

blabla … blabla …

Propriété = 10

unObject

10

blabla … blabla …

clé = hello

leRéférencé

hello

unObjectréférence

Page 19: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

19

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

/ 429Sémantique lors de la synthèse

• Règle IterationLa sous règle est invoquée pour chaque objet dans le containerL’ordre utilisé est l’ordre du containerEventuellement un séparateur est inséré entre chaque invocation

• Règle AlternativeChaque condition est évaluée et la première à vraie déclenche la règle associée

• Règle OnceItération sur l’ensemble des conditionset chaque condition valide déclenche la règle associée

blabla … blabla …

prop1 = 10prop2 = helloprop3 = true

unObject

10

blabla … blabla … blabla …

#1 #2 #3

sép sép

hello

blabla … blabla …

prop1 = 10prop2 = helloprop3 = true

unObject

hello

true

Page 20: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

20

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

/ 429Sémantique lors de la synthèse

• PolymorphicCondition [ valeur, metaClasse, objetCourant ]Que peut-on tester ?

valeur="" objetCourant.class == metaClassevaleur="null" objetCourant.class == nullvaleur="any" objetCourant.class != nullvaleur="equals" objetCourant.class == metaClassevaleur="differs" objetCourant.class != metaClasse

• CustomCondition [ valeur, propriété, objetCourant ]Que peut-on tester ?

valeur="" fauxvaleur="null" objetCourant.propriété == nullvaleur="any" objetCourant.propriété != nullvaleur="empty" ((String) objetCourant.propriété).length == 0

((List) objetCourant.propriété).size == 0valeur="filled" ((String) objetCourant.propriété).length != 0

((List) objetCourant.propriété).size != 0valeur="= v0" (String) objetCourant.propriété == v0valeur="!= v0" (String) objetCourant.propriété != v0

Kerm

eta

à l’a

ide

Page 21: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

21

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

/ 429Sémantique lors de l’analyse

• Analyseur lexicalSupprime 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 SequenceUn 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 TerminalUne valeur est extraite du flux d’entréeSi elle correspond elle est consommée, sinon erreur

• Règle AdornmentRien, car les espaces blancs sont déjà supprimés

• Règle TemplateLa metaClasse est instanciée et devient l’objet courantLa sous règle est invoquée pour continuer l’analyseSi une erreur apparaît l’objet courant est oublié

blabla … blabla …Texte_fixe

Page 22: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

22

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

/ 429Sémantique lors de l’analyse

• Règle PrimitiveValueExtrait un mot du flux d’entréeConversion vers le type de la propriété cibleAffectation à la propriété cible de l’objet courant

• Règle ConstantConversion de la valeur incluse vers le type de la propriété cibleAffectation à la propriété cible de l’objet courant

• Règle ObjectReferenceExtrait un mot du flux d’entréeRecherche 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 fluxSi 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 RuleRefInvoque la règle interne

• Règle URIValueSecret de fabrication

blabla …

Propriété = …

unObject

10

blabla …

clé = hello

leRéférencé

hello

unObject

référence

blabla …

blabla …Propriété = …

unObject10 blabla …

Modèle

blabla …

Page 23: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

23

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

/ 429Sémantique lors de l’analyse

• Règle IterationLa sous règle est invoquée jusqu’à échecChaque invocation avec succès permet l’insertion dans le containerEventuellement un séparateur est analysé entre chaque invocation

• Règle AlternativeUne Itération sur l’ensemble des conditionsChaque règle dans chaque condition est évaluéeLa première qui analyse avec succès stoppe l’itérationAprès chaque erreur, l’analyseur revient en arrière

• Règle OnceRépétition de l’Itération sur l’ensemble des conditionsJusqu’à ce qu’une itération ne trouve pas de condition satisfaisanteLa première qui analyse avec succès stoppe l’itérationAprès chaque erreur, l’analyseur revient en arrière

• ConditionLes 'expressions' ne sont pas évaluées

blabla … blabla … 10

#1 #2

sép sép

(en EBNF : x ::= (a | b | c)* )

(en EBNF : x ::= a | b | c)

Page 24: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

24

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

/ 429Exemples

• Exemple 1 : Type

• Exemple 2 : Expression – notation préfixée

• Exemple 2 : Expression - notation infixée

Page 25: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

25

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

/ 429Example 1 : Type / MetaModel & Model

Type Mail { From : User To : User}Type User { Name : String }Type String;

Page 26: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

26

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

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

Travaille sur la classe 'Model'Opère sur la collection 'chidren'Travaille sur la classe 'Type'

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

Un simple point-virgule

Mot clé : Type

La liste 'attributes' est vide

Un saut de ligne pour faire joli

Des accolades pour encadrer la liste

Opère sur la collection 'attributes'

Travaille sur la classe 'Attribute'

Extraction de la propriété 'name'

Page 27: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

27

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

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

Invoque le fragment … bon c’est le Template Type

Travaille sur la classe 'Model'

Travaille sur la classe 'Type'

Travaille sur la classe 'Attribute'

Invoque le fragment … bon c’est le Template Attribut

Page 28: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

28

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

/ 429Exemple 2 : metamodèle d’Expression

Page 29: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

29

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

/ 429Exemple 2 : Expression / préfixée

Notation préfixéeoperator + (

operator * (3 , 2

) ,1

)

Notation infixée3 * 2 + 1

En BNFexpr ::= operator * ( expr , expr )

| operator + ( expr , expr )

| integer

Page 30: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

30

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

/ 429Exemple 2 : Expression / infixée

<AdditiveOp> ::= <Term> ‘+’ <Expr>

<MultiplicativeOp> ::= <Factor> ‘*’ <Term>

<NumberInteger> ::= [0-9]+

<Expression> ::= <AdditiveOp>| <Term>

<Term> ::= <MultiplicativeOp>| <Factor>

<Factor> ::= <NumberInteger>

Page 31: Sintaks : Ingénierie Dirigée par les Modèles Appliquée à lAnalyse et la Synthèse de Syntaxe Textuelle Michel Hassenforder

31

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

/ 429Conclusion

• Spécification une syntaxe concrète textuelle• Mapping bidirectionnel

Syntaxe concrète vers syntaxe abstraiteSyntaxe abstraite vers syntaxe concrète

• Un outilLecture par descente récursiveImpression par visite en profondeur