<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_files( self, files, compilation_mode=COMPILATION_MODE.FILE_BY_FILE):
 """ parses a set of files :param files: list of strings and\\or :class:`file_configuration_t` instances. :type files: list :param compilation_mode: determines whether the files are parsed individually or as one single chunk :type compilation_mode: :class:`COMPILATION_MODE` :rtype: [:class:`declaration_t`] """


        if compilation_mode == COMPILATION_MODE.ALL_AT_ONCE \
           and len(files) == len(self.get_os_file_names(files)):
            return self.__parse_all_at_once(files)
        else:
            if compilation_mode == COMPILATION_MODE.ALL_AT_ONCE:
                msg = ''.join([
                    "Unable to parse files using ALL_AT_ONCE mode. ",
                    "There is some file configuration that is not file. ",
                    "pygccxml.parser.project_reader_t switches to ",
                    "FILE_BY_FILE mode."])
                self.logger.warning(msg)
            return self.__parse_file_by_file(files)