Пример #1
0
        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}.");
        }
Пример #2
0
 public BinaryEvaluation(Evaluation left, Evaluation right, BinaryOperation oper)
 {
     this.left  = left;
     this.right = right;
     this.oper  = oper;
 }