sintaks : ingénierie dirigée par les modèles appliquée à lanalyse et la synthèse de syntaxe...
TRANSCRIPT
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 – GenoaSosym – en instance
Pierre-Alain MullerFranck FleureyFrédéric FondementMichel HassenforderRémi SchneckenburgerSébastien GérardJean-Marc Jézéquel
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
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
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
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;
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
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
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
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
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.
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
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
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)
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
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
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
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
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
…
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
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 …
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)
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
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;
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'
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
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
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
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>
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