Talk:Interpreter pattern
This article is rated Start-class on Wikipedia's content assessment scale. It is of interest to the following WikiProjects: | |||||||||||||||||||||
|
What does the link "Block (Java programming language)" mean? It points to nowhere. Lathspell 18:12, 18 February 2006 (UTC)
I doubt that the interpreter patter is described correctly since this page describes it very differently. http://www.exciton.cs.rice.edu/JAvaResources/DesignPatterns/intepreter.htm80.141.90.99 13:35, 8 June 2007 (UTC) see also http://home.earthlink.net/~huston2/dp/interpreter.html 80.141.90.99 13:37, 8 June 2007 (UTC)
I dont know what you mean, the operation() method is replaced by the execute() method, the concept is exactly the same.
--98.225.38.255 (talk) 23:25, 13 February 2010 (UTC) I think the C# (and probably Java version is wrong). The problem is in Evaluator function, the left and right operands are switched. If you compute 6 - 4 or 6 4 - , the result that you get is 4 - 6. The solution is
IExpression r = stack.Pop();
IExpression l = stack.Pop();
stack.Push(new Plus(l, r));
instead of
stack.Push(new Plus(stack.Pop(), stack.Pop()));
Corrected code:
public Evaluator(string expression)
{
Stack<IExpression> stack = new Stack<IExpression>();
foreach (string token in expression.Split(' '))
{
if (token.Equals("+"))
{
IExpression r = stack.Pop();
IExpression l = stack.Pop();
stack.Push(new Plus(l, r));
}
else if (token.Equals("-"))
{
IExpression r = stack.Pop();
IExpression l = stack.Pop();
stack.Push(new Minus(l, r));
}
else
stack.Push(new Variable(token));
}
syntaxTree = stack.Pop();
}
Go language
[edit]If we ever wanted to supply an example of this pattern in the Go language , this may be a good starting point. Bovlb (talk) 20:06, 15 January 2010 (UTC)
Errors in diagram
[edit]The "Interpret(Context)" methods in TerminalExpression and NonTerminalExpression are in italics, which indicates they are abstract. Clearly they are meant to be concrete implementations of the abstract method "Interpret(Context)" in AbstractExpression. The "Interpret(Context)" should have italics removed in the *subclasses*. 14:41, 15 April 2012 (UTC) — Preceding unsigned comment added by 78.105.136.120 (talk)
- It has come to my attention that if this is a GoF diagram then it is probably in OMT and not UML. My reasoning above is for a UML diagram, I am not aware of correctness for OMT. I'll leave the comment above just in case some other unassuming developer comes across here and expects to be seeing UML. :) 20:37, 15 April 2012 (UTC)
Not confined to language processing
[edit]The point of design patterns is to recognize general patterns so that they can be applied anywhere. Unfortunately, the description of this pattern seems to be unnecessarily tied to a specific example both in the GOF book and in this article. A good counter-example would be to use an interpreter to determine the taxonomic classification of a specimen such as an animal, each level of the tree delegating the identification to the proper child branch until the specimen is identified. That identification could use image processing, chemical analysis, and other techniques which are not tied to any language. There is no grammar to interpret, yet this is the same pattern of code.
A more general and useful definition might be a "Rules Engine" as OODesign.com suggests. Really, it's a data structure of functional objects (each implementing the same single method). The functional objects "rules" delegate to one another until a terminal object (rule) is reached. The objects could be related through an interface and through the logic in their single implemented method instead of through an object-oriented inheritance hierarchy.
Hmm... I'm partly talking myself out of this. Interpreter is what it is. It would have been nice if GOF named it RuleDelegator because it would be more applicable to more problems and be a more useful pattern.