Bonjour à tous,
Je vous propose un tutoriel Java intitulé "Tutoriel architectural sur le patron de conception visiteur par injection (ou Visitor Injector)".
Ce patron de conception vise à contourner le caractère statique du patron Visiteur du Gang of Four par injection de dépendance. L'idée m'en est venue lorsque j'ai réalisé l'analyseur syntaxique que j'ai nommé JASI (qui sera l'objet d'une ouverture des sources très prochainement).
Pour séparer la syntaxe (l'AST) de l'implémentation (la sémantique), la plupart des parseurs proposent une solution toute trouvée par le Gang Of four : le patron Visiteur. Or celui-ci contient une méthode de visite pour chaque Classe de l'AST. Si, à posteriori, une classe venait à être ajoutée au modèle, la définition du visiteur devrait être modifiée. Dans le cas d'une architecture à plusieurs niveaux, celui-ci devrait être surclassé pour accepter de nouvelles méthodes de visite. Cela engendre des transtypages et des teste de types peu élégants.
Terrence Parr lui-même propose une solution de contournement dans son livre : Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages. Il y expose un visiteur dans lequel le test de type est effectué lors du parcours en profondeur de l'arbre.
Grace à ce patron, je propose une solution plus en amont du problème. Le visiteur ne définit plus qu'une méthode générique à tous les types de l'AST. Un tableau associatif (Map en Java) référence toutes les associations Class / Visiteur, et, lors d'un parcours en profondeur préliminaire, les visiteurs associés sont "injecté" aux ASTs traversés. La suite reste inchangée si ce n'est que lors du parcours ce sont les visiteurs injecté qui sont appelés.
Tout est détaillé ici, suivez le guide ;-)
Partager