310 likes | 451 Views
Sintaks : Tentative de guide de mise en œuvre. Michel Hassenforder. Plan. Introduction Beaucoup de façon de faire Standard Facultative Motifs Contraintes de séquencement Conclusion. Introduction - Problèmes de base. Beaucoup de concept Certains sont uniques Beaucoup se chevauchent
E N D
Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder
Plan • Introduction • Beaucoup de façon de faire • Standard • Facultative • Motifs • Contraintes de séquencement • Conclusion
Introduction - Problèmes de base • Beaucoup de concept • Certains sont uniques • Beaucoup se chevauchent • Certains sont simples • D'autres complexes • Comment les choisir • Comment procéder pour construire un fichier STS • Organisation du fichier • STS qui marche en écriture • STS qui marche en lecture
Beaucoup de façon de faire : standard • Une classe • Un Template pour identifier la classe à manipuler
Beaucoup de façon de faire : standard • Une famille de classes • Un Template par classe fille, si X est abstraite pas de template X • Et une Alternative et une polymorphicCond pour chaque template
Beaucoup de façon de faire : standard • Un attribut unique • Une PrimitiveValue pour extraire/affecter la valeur • Ou une ConstantValue pour fixer/affecter la valeur
Beaucoup de façon de faire : standard • Un attribut multiple • Une Iteration pour le container • Et une PrimitiveValue (extraire) ou une ConstantValue (fixer)
Beaucoup de façon de faire : standard • Une agrégation unique • Un template pour manipuler la classe cible • Et un RuleRef pour affecter la relation
Beaucoup de façon de faire : standard • Un agrégation multiple • Une Iteration pour le container • Et un template pour la classe cible ou un RuleRef vers le template
Beaucoup de façon de faire : standard • Une référence unique • Un ObjectReference pour cibler la référence et faire l’affectation
Beaucoup de façon de faire : standard • Une référence multiple • Une Iteration pour le container • Et un ObjectReference pour cibler la référence
Beaucoup de façon de faire : facultatif • Les concepts Alternative + CustomCondition • Permettent de modéliser des variations dans la syntaxe textuelle • Selon la valeur d’un attribut • Selon la valeur de plusieurs attributs (si on introduit des attributs dérivés…) • Dans l’exemple TinyJava • la manipulation de 'static' était basée sur ce principe
Beaucoup de façon de faire : facultatif • Le concept Once (ou tout autre nom à l’issue de cette journée) • Permet la modélisation d’un texte composé • d’un grand nombre de propriétés • qui ne sont pas dans un container • qui peuvent apparaître dans un ordre quelconque • Dans l’exemple TinyJava • la manipulation de abstract/final • était basée sur ce principe
Beaucoup de façon de faire : facultatif • Le concept RuleRef • Permet d’invoquer une règle • Permet de manipuler une propriété • Combiner un RuleRef avec d’autres concepts • RuleRef (RR) possède une propriété à manipuler • L’autre concept (C) possède aussi une propriété à manipuler • Deux formes de combinaisons possibles • RR(p) x C() • RR() x C(p)
Beaucoup de façon de faire : facultatif • Pour un attribut • Pour un texte : packagehassen; • Il y trois façons différentes de le manipuler PV(p) RR() -> PV(p) RR(p) -> PV()
Beaucoup de façon de faire : motifs • Selon le voisinage de la propriété avec sa classe et les propriétés des autres classes • Une propriété totalement indépendante • Une propriété dans une classe mère • Des propriétés dans une fratrie • Des propriétés distribuées dans des classes • Selon le degré de partage la syntaxe textuelle • Syntaxe textuelle partagée • Syntaxe textuelle non partagée
Beaucoup de façon de faire : motifs • Trois cas "génériques" clairement identifiés : • X : propriété indépendante • Y : propriété dans la classe mère, syntaxe textuelle partagée • Z* : propriété dans une classe, syntaxe textuelle partagée • différentes variantes
Beaucoup de façon de faire : motifs • Les motifs illustrés pour • Attribut unique • Sont extensibles pour • Attribut multiple • Agrégation unique • Agrégation multiple • Référence unique • Référence multiple
Contraintes de séquencement • Le concept primordial est le template. Tout est construit autour de lui. • C'est lors du traitement du template que l'on profite de ses liens d'agrégation pour visiter l'ensemble des propriétés qu'il possède. • Un attribut ou une agrégation (unique ou multiple) ne peuvent être traités qu'après l’occurrence du template définissant la classe les possédants. • Lorsqu’une classe doit sérialiser plusieurs propriétés, il n’y a pas d’ordre imposé par sintaks entre les différentes propriétés. • Un container est toujours complètement sérialisé lors d'une opération, il n’est pas possible de sérialiser indépendamment des fractions de container. • Une référence ne peut pas servir à manipuler un objet. En principe c'est le possesseur de l'objet référencé qui s'occupe de lui
Effet de ces contraintes • Très facile de manipuler un texte sous une forme préfixée : • classabstract final privateAbstractValue { } • class -> Template puis utilise les propriétés de la classe • Plus difficile de manipuler un texte sous une forme infixée voire postfixée • abstract final privateclassAbstractValue { } • class arrive trop tard car il faut déjà remplir les propriétés de la classe… • Solution : faire commencer le template class plus tôt dès la définition de la première propriété la concernant : abstract • Problème induit • abstract final privateclassAbstractValue { } • abstract final privateinterfaceIValue { } • Les deux templates class et interface sont en concurrence et c’est le KW qui va les départager… au prix d’une lecture ‘longue’ puis d’un backtracking.
Effets de ces contraintes • Exemple dans TinyJava • private String val; • public String getValue(); • TJData et TJMethod ont la même description • début générique • pour TJMethod les () avec les paramètres • fin générique • Alternative "data or method" les met en concurrence • Factorisation • les séquences de début et de fin • Remarque • 4 propriétés ont été factorisées dans …begin
Effet de ces contraintes • Une référence ne peut pas servir à manipuler l'objet • Dommage car si l'objet est très synthétique (que la clé) • On aurait pu imaginer un langage plus simple
Conclusion • Sintaks est très riche • Sintaks peut être très déroutant • Sintaks peut servir à une étude de GL • Les règles Sintaks peuvent faire l’objet d’un refactoring … • Il doit y avoir bien d’autres motifs • PS : le Once n’est pas traité dans toutes les propositions car il est trop récent