@Override
 public final <T> T accept(ExpressionVisitor<T> visitor) {
   List<T> l = acceptChildren(visitor, visitor.visitEnter(this));
   T t = visitor.visitLeave(this, l);
   if (t == null) {
     t = visitor.defaultReturn(this, l);
   }
   return t;
 }
 @Override
 public final <T> T accept(ExpressionVisitor<T> visitor) {
   return visitor.visit(this);
 }