private Evaluation PerformEvaluate(ParseTreeNode node) { switch (node.Term.Name) { case "BinaryExpression": var leftNode = node.ChildNodes[0]; var opNode = node.ChildNodes[1]; var rightNode = node.ChildNodes[2]; Evaluation left = PerformEvaluate(leftNode); Evaluation right = PerformEvaluate(rightNode); BinaryOperation op = BinaryOperation.Add; switch (opNode.Term.Name) { case "+": op = BinaryOperation.Add; break; case "-": op = BinaryOperation.Sub; break; case "*": op = BinaryOperation.Mul; break; case "/": op = BinaryOperation.Div; break; } return(new BinaryEvaluation(left, right, op)); case "Number": var value = Convert.ToSingle(node.Token.Text); return(new ConstantEvaluation(value)); } throw new InvalidOperationException($"Unrecognizable term {node.Term.Name}."); }
public BinaryEvaluation(Evaluation left, Evaluation right, BinaryOperation oper) { this.left = left; this.right = right; this.oper = oper; }