---
name: base_parser
lang: py
domain: core
version: "1.0.0"
algebraic: product
definition: |
  class BaseParser(ABC):
      @property
      @abstractmethod
      def supported_extensions(self) -> list[str]: ...

      @abstractmethod
      async def parse(self, source: str | Path, **kwargs) -> ParseResult: ...

      @abstractmethod
      async def parse_content(self, content: str, source_path: str | None = None, **kwargs) -> ParseResult: ...

      def can_parse(self, path: str) -> bool:
          return Path(path).suffix.lower() in self.supported_extensions
description: "Protocolo abstracto que todo parser del registry debe implementar. Define la interfaz minima para parsers extensibles: extensiones soportadas, parse desde path y parse desde contenido en memoria. El ParserRegistry usa esta interfaz para despachar al parser correcto segun extension de archivo."
tags: [parser, protocol, abstract, extensible, plugin]
uses_types: [parse_result_py_core]
file_path: "python/types/core/base_parser.py"
---

## Notas

Clase base abstracta (ABC) con tres metodos obligatorios y un helper concreto `can_parse`. Los parsers concretos heredan de BaseParser e implementan los tres metodos abstractos.

El metodo `can_parse` es concreto — verifica la extension del archivo contra `supported_extensions`. No es necesario sobreescribirlo salvo casos especiales.

Disenado para composicion con ParserRegistry: el registry registra instancias de BaseParser y las resuelve automaticamente por extension de archivo.
