Interpreter (patrón de diseño)

Interpreter (patrón de diseño)

El interpreter es un patrón de diseño que, dado un lenguaje, define una representación para su gramática junto con un intérprete del lenguaje.

Se usa para definir un lenguaje para representar expresiones regulares que representen cadenas a buscar dentro de otras cadenas. Además, en general, para definir un lenguaje que permita representar las distintas instancias de una familia de problemas.

Ejemplos

Java

El siguiente ejemplo en Java muestra como un lenguaje de propósito general podría interpretar un lenguaje más especializado, aquí la Notación polaca inversa.

La salida es:

'42 2 1 - +' equals 43
import java.util.*;
 
interface Expression {
   public void interpret(Stack<Integer> s);
}
 
class TerminalExpression_Number implements Expression {
   private int number;
   public TerminalExpression_Number(int number)       { this.number = number; }
   public void interpret(Stack<Integer> s)  { s.push(number); }
}
 
class TerminalExpression_Plus implements Expression {
   public void interpret(Stack<Integer> s)  { s.push( s.pop() + s.pop() ); }
}
 
class TerminalExpression_Minus implements Expression {
   public void interpret(Stack<Integer> s)  { int tmp = s.pop(); s.push( s.pop() - tmp ); }
}
 
class Parser {
   private ArrayList<Expression> parseTree = new ArrayList<Expression>(); // only one NonTerminal Expression here
 
   public Parser(String s) {
       for (String token : s.split(" ")) {
           if      (token.equals("+")) parseTree.add( new TerminalExpression_Plus() );
           else if (token.equals("-")) parseTree.add( new TerminalExpression_Minus() );
           // ...
           else                        parseTree.add( new TerminalExpression_Number(Integer.valueOf(token)) );
       }
   }
 
   public int evaluate() {
       Stack<Integer> context = new Stack<Integer>(); 
       for (Expression e : parseTree) e.interpret(context);
       return context.pop();
   }
}
 
class InterpreterExample {
   public static void main(String[] args) {
       System.out.println("'42 2 1 - +' equals " + new Parser("42 2 1 - +").evaluate());
   }
}

Wikimedia foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Mira otros diccionarios:

  • Interpreter (patrón de diseño) — Propósito Dado un lenguaje, define una representación para su gramática junto con un intérprete del lenguaje Usos Conocidos Definir un lenguaje para representar expresiones regulares que representen cadenas a buscar dentro de otras cadenas En… …   Enciclopedia Universal

  • Patrón de diseño — Saltar a navegación, búsqueda Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de… …   Wikipedia Español

  • PHP — Desarrollador(es) PHP Group php.net/ Información general …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”