Title: Ingnierie des modles
1(No Transcript)
2Sintaks Ingénierie Dirigée par les Modèles
Appliquée à lAnalyse et la Synthèse de Syntaxe
Textuelle
3Model-Driven Analysis and Synthesis of Concrete
SyntaxModels 2006 GenoaSosym 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
4Model-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
5Plan
- Introduction
- Métamodèle de sintaks
- Sémantique lors de la synthèse
- Sémantique lors de l'analyse
- Exemples
- Conclusion
6Introduction - 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 -gt AST -gt Model)
- Modelware text lt-gt Model
7Introduction - Illustration
- Un métamodèle très simple
- Des syntaxes concrètes
Type Mail From User To User Type
User Name String Type String
Mail_at_From (User) Mail_at_To (User) User_at_Name
(String) String
8Processus
Meta-Language (Mof, Kermeta,)
Conforme
Conforme
Métamodèle de Syntaxe concrète
Métamodèle de Syntaxe abstraite
Conforme
Conforme
Modèle
Modèle de Syntaxe concrète
Conforme
Sintaks
Texte
Transformation Bidirectionnelle
9Métamodèle de sintaks
10Métamodèle de sintaks
- eClass and eStructuralFeature
- Ponts vers le métamodèle cible
- Rule
- Classe abstraite de base
- Root
- Container de fragments (rule)
- Donne le point de départ
11Métamodèle de sintaks
- 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
12Métamodèle de sintaks
- Value (abstraite)
- Un ensemble de propriétés quil faut utiliser
- PrimitiveValue
- Une portion de texte qui provient dune 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 quil
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 linvocation dune 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.
13Métamodèle de sintaks
- Iteration
- Permet de gérer une propriété de type container
- Assure la gestion dun éventuel séparateur
14Métamodèle de sintaks
- 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 - Dune valeur que doit prendre une 'expression
- Une règle quil faut exécuter
- CustomCondition
- Permet de décrire la propriété quil faut tester
- PolymorphicCondition
- Permet de décrire la classe quil faut tester
15Métamodèle de sintaks
- 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)
16Sintaks est bidirectionnel !
- Synthèse
- Impression par descente récursive
- Visiteur en profondeur
- Analyse
- Compilateur par descente récursive
- Comme du LL(k) (k0..)
Synthèse
Texte
Analyse
17Sé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
18Sé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
10
blabla blabla
référence
leRéférencé
unObject
clé hello
hello
blabla blabla
19Sémantique lors de la synthèse
blabla
blabla
blabla
sép
sép
- Règle Iteration
- La sous règle est invoquée pour chaque objet dans
le container - Lordre utilisé est lordre 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 lensemble des conditionset 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
10
hello
true
blabla blabla
20Sé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
- Que peut-on tester ?
- valeur"" faux
- valeur"null" objetCourant.propriété null
- valeur"any" objetCourant.propriété ! null
- valeur"empty" ((String) objetCourant.propriété).l
ength 0 - ((List) objetCourant.propriété).size 0
- valeur"filled" ((String) objetCourant.propriété).
length ! 0 - ((List) objetCourant.propriété).size ! 0
Kermeta à laide
21Sémantique lors de lanalyse
- 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 dentré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 lobjet
courant - La sous règle est invoquée pour continuer
lanalyse
blabla
blabla
Texte_fixe
22Sémantique lors de lanalyse
unObject
- Règle PrimitiveValue
- Extrait un mot du flux dentrée
- Conversion vers le type de la propriété cible
- Affectation à la propriété cible de lobjet
courant - Règle Constant
- Conversion de la valeur incluse vers le type de
la propriété cible - Affectation à la propriété cible de lobjet
courant - Règle ObjectReference
- Extrait un mot du flux dentrée
- Recherche dans le modèle courant avec la
propriété clé un objet capable dutiliser 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
lobjet courant avec le référencé - Sinon création dun fantôme qui devra être résolu
plus tard - Règle RuleRef
- Invoque la règle interne
Propriété
10
blabla
blabla
unObject
blabla
blabla
10
Propriété
Modèle
référence
leRéférencé
clé hello
unObject
blabla
blabla
hello
23Sémantique lors de lanalyse
blabla
blabla
10
sép
sép
- Règle Iteration
- La sous règle est invoquée jusquà échec
- Chaque invocation avec succès permet linsertion
dans le container - Eventuellement un séparateur est analysé entre
chaque invocation - Règle Alternative
- Une Itération sur lensemble des conditions
- Chaque règle dans chaque condition est évaluée
- La première qui analyse avec succès stoppe
litération - Après chaque erreur, lanalyseur revient en
arrière - Règle Once
- Répétition de lItération sur lensemble des
conditions - Jusquà ce quune itération ne trouve pas de
condition satisfaisante - La première qui analyse avec succès stoppe
litération - Après chaque erreur, lanalyseur revient en
arrière - Condition
- Les 'expressions' ne sont pas évaluées
1
2
(en EBNF x a b c)
(en EBNF x (a b c) )
24Exemples
- Exemple 1 Type
- Exemple 2 Expression notation préfixée
- Exemple 2 Expression - notation infixée
25Example 1 Type / MetaModel Model
Type Mail From User To User Type
User Name String Type String
26Exemple 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 lobjet dans le modèle qui possède
lattribut 'name' qui a la valeur extraite
du flux
27Exemple 1 Type / Modèle de syntaxe concrète
Travaille sur la classe 'Model'
Invoque le fragment bon cest le Template Type
Travaille sur la classe 'Type'
Invoque le fragment bon cest le Template
Attribut
Travaille sur la classe 'Attribute'
28Exemple 2 metamodèle dExpression
29Exemple 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
30Exemple 2 Expression / infixée
- ltAdditiveOpgt ltTermgt ltExprgt
- ltMultiplicativeOpgt ltFactorgt ltTermgt
- ltNumberIntegergt 0-9
- ltExpressiongt ltAdditiveOpgt
- ltTermgt
- ltTermgt ltMultiplicativeOpgt
- ltFactorgt
- ltFactorgt ltNumberIntegergt
31Conclusion
- 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