def METHOD_NAME(self, file_path: str) -> Document:
    """
    This function parses the provided .sdoc file and returns a Document
    object.
    """
    path_to_tmp_dir = tempfile.gettempdir()
    full_path_to_file = (
        file_path
        if os.path.abspath(file_path)
        else os.path.abspath(file_path)
    )
    # File name contains an MD5 hash of its full path to ensure the
    # uniqueness of the cached items. Additionally, the unique file name
    # contains a full path to the output root to prevent collisions
    # between StrictDoc invocations running against the same set of SDoc
    # files in parallel.
    unique_identifier = self.path_to_output_root + full_path_to_file
    unique_identifier_md5 = hashlib.md5(
        unique_identifier.encode("utf-8")
    ).hexdigest()
    file_name = os.path.basename(full_path_to_file)
    file_name += "_" + unique_identifier_md5
    path_to_cached_file = os.path.join(
        path_to_tmp_dir,
        "strictdoc_cache",
        file_name,
    )
    if os.path.isfile(path_to_cached_file):
        cached_file_mtime = get_file_modification_time(path_to_cached_file)
        sdoc_file_mtime = get_file_modification_time(file_path)
        if sdoc_file_mtime < cached_file_mtime:
            with open(path_to_cached_file, "rb") as cache_file:
                sdoc_pickled = cache_file.read()
            return assert_cast(pickle_load(sdoc_pickled), Document)
    path_to_cached_file_dir = os.path.dirname(path_to_cached_file)
    Path(path_to_cached_file_dir).mkdir(parents=True, exist_ok=True)
    with open(file_path, encoding="utf8") as file:
        sdoc_content = file.read()
    try:
        sdoc = self.read(sdoc_content, file_path=file_path)
        sdoc_pickled = pickle_dump(sdoc)
        with open(path_to_cached_file, "wb") as cache_file:
            cache_file.write(sdoc_pickled)
        return sdoc
    except StrictDocException as exception:
        print(f"error: {exception.args[0]}")  # noqa: T201
        sys.exit(1)
    except NotImplementedError:
        traceback.print_exc()
        sys.exit(1)
    except StrictDocSemanticError as exc:
        print(exc.to_print_message())  # noqa: T201
        sys.exit(1)
    except Exception as exc:  # pylint: disable=broad-except
        print(  # noqa: T201
            f"error: could not parse file: "
            f"{file_path}.\n{exc.__class__.__name__}: {exc}"
        )
        # TODO: when --debug is provided
        traceback.print_exc()
        sys.exit(1)