Revenons sur ce qu'est un visteur, un visteur est un objet qui associe à
une classe (
Value ou
BinOp) à un code à exécuter.
Il peut donc est implanter avec une table de hachage qui associe à une classe
(un objet de type
java.lang.Class) une lambda contenant le code
à exécuter.
On se propose d'écrire la classe
ExprVisitor de tel sorte à ce que
le code suivant fonctionne
ExprVisitor<Void, Integer> evalVisitor = new ExprVisitor<>();
evalVisitor
.when(Value.class, value -> {
...
})
.when(BinOp.class, binOp -> {
...
});
evalVisitor.call(expr);