Should we maybe have some kind of Evaluatable interface, and then do something like:

    public ASTNode transform(Evaluatable evaluatable) {
        return evaluatable.evaluate();
    }

?