public static double EvaluateExpression(string strExp) { Stack <AbstractExpression> stack = new Stack <AbstractExpression>(); string[] tokenList = strExp.Split(' '); foreach (string s in tokenList) { if (IsOperator(s)) { AbstractExpression rightExpression = stack.Pop(); Console.WriteLine("Pop: " + rightExpression.Interpret()); AbstractExpression leftExpression = stack.Pop(); Console.WriteLine("Pop: " + leftExpression.Interpret()); AbstractExpression op = GetOperatorExpression(s, leftExpression, rightExpression); Console.WriteLine("Applica operatore: " + s); double result = op.Interpret(); stack.Push(new NumberExpression(result)); Console.WriteLine("Push result: " + result); } else { AbstractExpression i = new NumberExpression(s); Console.WriteLine("Push: " + s); stack.Push(i); } } AbstractExpression exp = stack.Pop(); return(exp.Interpret()); }
public override void Interpret(Context context) { if (context.Position < context.Source.Length) { terminalExpression = new TerminalExpression(); terminalExpression.Interpret(context); context.Position++; if (context.Result) { nonterminalExpression = new NonterminalExpression(); nonterminalExpression.Interpret(context); } } }