def execute(self, sources, target):
        """
        :type sources: list[DFAdapter]
        :type target: DFAdapter
        """
        existing_ml_fields = self._get_fields_list_from_eps(sources)

        def gen_field(field_str):
            parts = field_str.split(':')
            if len(parts) > 2:
                roles = set(MLField.translate_role_name(rn) for rn in parts[2].strip().split('#')) - set([None])
            else:
                roles = set([FieldRole.FEATURE, ])
            return MLField(parts[0].strip(), parts[1].strip(), roles)

        fields = [gen_field(fstr) for fstr in self.evaluator().split(',')
                  if fstr.strip() != '']

        dup_ml_fields = [f.copy(None) for f in fields]
        if self.is_append:
            src = list([copy.deepcopy(f) for f in existing_ml_fields[0]])
            src.extend(dup_ml_fields)
            target._ml_fields = src
        else:
            target._ml_fields = fields
:type sources: list[DFAdapter]
        :type target: DFAdapter