Talk:Interpreter pattern: Difference between revisions

Content deleted Content added
Go language: new section
No edit summary
Line 8:
 
I dont know what you mean, the operation() method is replaced by the execute() method, the concept is exactly the same.
 
--[[Special:Contributions/98.225.38.255|98.225.38.255]] ([[User talk: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
<code>
IExpression r = stack.Pop();
IExpression l = stack.Pop();
stack.Push(new Plus(l, r));
</code>
 
instead of
 
<code>
stack.Push(new Plus(stack.Pop(), stack.Pop()));
</code>
Corrected code:
<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();
}
</code>
 
 
== Go language ==