code: def execute(self, sources, target):
          
          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
docs: :type sources: list[DFAdapter]
          :type target: DFAdapter