1 / 29

Sintaks : Tentative de guide de mise en œuvre

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

glennis
Download Presentation

Sintaks : Tentative de guide de mise en œuvre

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder

  2. Plan • Introduction • Beaucoup de façon de faire • Standard • Facultative • Motifs • Contraintes de séquencement • Conclusion

  3. 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

  4. Introduction - Métamodèle de sintaks

  5. Beaucoup de façon de faire : standard • Une classe • Un Template pour identifier la classe à manipuler

  6. 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

  7. 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

  8. Beaucoup de façon de faire : standard • Un attribut multiple • Une Iteration pour le container • Et une PrimitiveValue (extraire) ou une ConstantValue (fixer)

  9. 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

  10. 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

  11. Beaucoup de façon de faire : standard • Une référence unique • Un ObjectReference pour cibler la référence et faire l’affectation

  12. 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

  13. 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

  14. 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

  15. 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)

  16. 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()

  17. 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

  18. 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

  19. Beaucoup de façon de faire : motifs

  20. Beaucoup de façon de faire : motifs

  21. Beaucoup de façon de faire : motifs

  22. Beaucoup de façon de faire : motifs

  23. 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

  24. 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

  25. 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.

  26. 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

  27. 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

  28. 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 

More Related