Download Interpreter (patrón de diseño)

Document related concepts
no text concepts found
Transcript
20/10/2014
Interpreter (patrón de diseño) - Wikipedia, la enciclopedia libre
Interpreter (patrón de diseño)
De Wikipedia, la enciclopedia libre
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 Ex
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
}
}
}
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());
}
http://es.wikipedia.org/w/index.php?title=Interpreter_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
1/2
20/10/2014
Interpreter (patrón de diseño) - Wikipedia, la enciclopedia libre
}
Obtenido de «http://es.wikipedia.org/w/index.php?title=Interpreter_(patrón_de_diseño)&oldid=64500731»
Categoría: Patrones de diseño
Esta página fue modificada por última vez el 8 mar 2013 a las 20:15.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; podrían ser
aplicables cláusulas adicionales. Léanse los términos de uso para más información.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de
lucro.
http://es.wikipedia.org/w/index.php?title=Interpreter_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
2/2