terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat interpreter.md
guest@codeandosimple: ~/blog/design-patterns $ cat interpreter.md

Interpreter Pattern_

// "Las cosas no se dicen, se hacen. Porque al hacerlas se dicen solas" - Woody Allen

# Propósito

El patrón Interpreter (Intérprete) proporciona una manera de evaluar sentencias en un lenguaje, permitiendo interpretar dichas sentencias dentro del programa.

De forma simple: Como un traductor que toma instrucciones complicadas y las convierte en pasos simples que podemos seguir.

# Problema

Necesidad de procesar lenguajes o expresiones definidos por reglas gramaticales (compiladores, motores de reglas, etc.).

# Solución

Implementar una clase por cada regla gramatical. Cada regla es una expresión que puede ser interpretada para evaluar la sentencia.

# Ãrbol de Sintaxis Abstracta (AST)

Representación clave de la estructura de una expresión.

  • Nodos Hoja: Valores u operandos (números).

  • Nodos Internos: Operadores (+, -).

Nodos Interpreter

# Estructura

Estructura UML Interpreter

# Participantes

  • AbstractExpression: Declara la operación interpretativa.
  • TerminalExpression: Interpretación para símbolos finales.
  • NonTerminalExpression: Reglas gramaticales complejas.
  • Context: Información global de la interpretación.
  • Client: Construye el AST e invoca la interpretación.

# Cuándo Usarlo

  • Lenguajes representables como árboles de sintaxis abstracta.

  • Interpretar notaciones simples o DSLs.

# Ventajas

  • verified

    Flexibilidad: Nuevos tipos de expresiones.

  • verified

    Extensibilidad: Fácil de ampliar la gramática.

# Desventajas

  • warning

    Complejidad: Difícil para gramáticas pesadas.

  • warning

    Rendimiento: Interpretación menos eficiente que compilación.

# Ejemplo: Expresiones Matemáticas

Interpretación de "1 + 2". Descomposicion en partes: constante, operador, constante.

Ejemplo Interpreter

# Código Java

interface Expression { int interpret(); }

class NumberExpression implements Expression {
    private int number;
    public int interpret() { return number; }
}

class AddExpression implements Expression {
    private Expression left, right;
    public int interpret() { return left.interpret() + right.interpret(); }
}

# Mapeo Participantes

  • Expression: AbstractExpression.
  • NumberExpression: TerminalExpression.
  • AddExpression: NonterminalExpression.
  • Client: Evaluador.

# Conclusiones

Proporciona flexibilidad para construir sistemas que necesitan "entender" entradas estructuradas dinámicamente.

# Patrones relacionados

Composite

Para construir el árbol de sintaxis abstracta.

Flyweight

Para compartir instancias de TerminalExpression.