<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse( files, config=None, compilation_mode=COMPILATION_MODE.FILE_BY_FILE, cache=None):
 """ Parse header files. :param files: The header files that should be parsed :type files: list of str :param config: Configuration object or None :type config: :class:`parser.xml_generator_configuration_t` :param compilation_mode: Determines whether the files are parsed individually or as one single chunk :type compilation_mode: :class:`parser.COMPILATION_MODE` :param cache: Declaration cache (None=no cache) :type cache: :class:`parser.cache_base_t` or str :rtype: list of :class:`declarations.declaration_t` """

    if not config:
        config = xml_generator_configuration_t()
    parser = project_reader_t(config=config, cache=cache)
    declarations = parser.read_files(files, compilation_mode)
    config.xml_generator_from_xml_file = parser.xml_generator_from_xml_file
    return declarations