Patrón Interpreter en C#: Guía Completa

Introducción: Mini lenguajes

Interpreter define una gramática y clases para interpretar expresiones. Es útil para reglas simples y lenguajes específicos de dominio (DSL) muy acotados.

Su fortaleza está en representar cada regla como un objeto, haciendo que el lenguaje sea extensible y legible.

Símbolos interpretados
Prompt: Abstract symbols being decoded, clean minimal style.

1. Naturaleza: Señales de aves

Ciertos pájaros interpretan patrones de sonido como "peligro" o "alimento".

Esos patrones forman un lenguaje simple: combinaciones de sonidos con significados concretos, tal como un intérprete evalúa reglas.

Señales
Prompt: Birds responding to sound waves, natural scene, soft colors.

2. Mundo Real: Filtros en búsqueda

Un buscador interpreta consultas como "tipo:pdf AND fecha>2024".

Cada parte de la consulta se convierte en un nodo del árbol de interpretación, permitiendo combinar reglas sin reescribir el motor.

Filtros
Prompt: Search bar with filters, minimal UI design.

3. Implementación en C#: Código Paso a Paso

public interface IExpresion { bool Interpretar(string contexto); }

public class Terminal : IExpresion
{
    private string _palabra;
    public Terminal(string palabra) { _palabra = palabra; }
    public bool Interpretar(string contexto) => contexto.Contains(_palabra);
}

public class And : IExpresion
{
    private IExpresion _izq, _der;
    public And(IExpresion izq, IExpresion der) { _izq = izq; _der = der; }
    public bool Interpretar(string contexto) => _izq.Interpretar(contexto) && _der.Interpretar(contexto);
}

// Uso
IExpresion expr = new And(new Terminal("C#"), new Terminal(".NET"));
Console.WriteLine(expr.Interpretar("Curso C# .NET avanzado"));

4. Interpreter vs Parser Generator

Interpreter es manual y simple. Generadores de parser son más potentes para gramáticas complejas.

Si tu lenguaje crece rápidamente o requiere rendimiento alto, un parser generator será más adecuado.

5. Diagrama UML

UML Interpreter
Prompt: UML diagram of Interpreter pattern, clean vector layout.
Árbol de expresiones
Prompt: Expression tree diagram, minimal infographic style.

⚠️ Cuándo NO Usar Interpreter

  • Si la gramática es grande o compleja.
  • Si el rendimiento es crítico.
  • Si puedes resolverlo con expresiones simples o reglas configurables.

💪 Ejercicio

Implementa expresiones OR y NOT para un filtro de textos.

Conclusión

Interpreter es ideal para mini lenguajes y reglas simples en sistemas configurables. Aporta claridad cuando quieres que las reglas se expresen como objetos.