Esempio n. 1
0
    public static double GetResult(char op, double number1, double number2)
    {
        OperatorReguler opReguler = null;

        switch (op)
        {
        case ADDITION:
            AddOperator add = new AddOperator(number1, number2);
            opReguler = add;
            break;

        case SUBTRACK:
            SubOperator sub = new SubOperator(number2, number1);
            opReguler = sub;
            break;

        case MULTIPLY:
            MulOperator mul = new MulOperator(number1, number2);
            opReguler = mul;
            break;

        case DIVISION:
            DivOperator div = new DivOperator(number2, number1);
            opReguler = div;
            break;
        }

        return(opReguler.GetResult());
    }
        public void FindOperation_ReturnsHighestPrecedence()
        {
            // Arrange
            var lOperand = new Operand(0);
            var op       = new MulOperator();
            var rOperand = new Operand(0);
            var elements = new Element[]
            {
                new Operand(0),
                new AddOperator(),
                new Operand(0),
                lOperand,
                op,
                rOperand
            };
            var sut = new ElementList(elements);

            // Act
            var result = sut.FindOperation();

            // Assert
            Assert.AreEqual(lOperand, result.LOperand);
            Assert.AreEqual(op, result.Op);
            Assert.AreEqual(rOperand, result.ROperand);
        }
Esempio n. 3
0
        private IMSILConstruction CreateUnaryMinusNode(IASTNode node)
        {
            var mulOperator = new MulOperator();

            mulOperator.FirstIntValue = -1;

            return(mulOperator);
        }
        public void MulOperator_PrecedenceSetCorrectly()
        {
            // Arrange
            var expected = 2;
            var sut      = new MulOperator();

            // Act
            var actual = sut.Precedence;

            // Assert
            Assert.AreEqual(expected, actual);
        }
Esempio n. 5
0
        public void TakesPrecedenceBoostIntoAccount()
        {
            // Arrange
            var precedenceBoost = 7;
            var expected        = 9;
            var sut             = new MulOperator(precedenceBoost);

            // Act
            var actual = sut.Precedence;

            // Assert
            Assert.AreEqual(expected, actual);
        }
Esempio n. 6
0
        public void MulOperator_ReturnsProduct()
        {
            // Arrange
            var leftOperand  = new Operand(10);
            var rightOperand = new Operand(25);
            var expected     = 250;
            var sut          = new MulOperator();

            // Act
            var actual = sut.Compute(leftOperand, rightOperand);

            // Assert
            Assert.AreEqual(expected, actual);
        }
Esempio n. 7
0
 void MulOp(out MulOperator op)
 {
     op = MulOperator.Multiply;
     if (la.kind == 13)
     {
         Get();
     }
     else if (la.kind == 14)
     {
         Get();
         op = MulOperator.Divide;
     }
     else
     {
         SynErr(22);
     }
 }
Esempio n. 8
0
        public IToken ParseTokens(string[] ops)
        {
            var    stack = new Stack <ApOperator>();
            IToken token = null;

            for (int i = 0; i < ops.Length; i++)
            {
                var op = ops[i];

                switch (op)
                {
                case "ap":
                    token = new ApOperator();
                    break;

                case "inc":
                    token = IncOperator.Acquire();
                    break;

                case "dec":
                    token = DecOperator.Acquire();
                    break;

                case "neg":
                    token = NegOperator.Acquire();
                    break;

                case "add":
                    token = AddOperator.Acquire();
                    break;

                case "mul":
                    token = MulOperator.Acquire();
                    break;

                //case "l":
                //    token = new LOperator();
                //    break;

                case "div":
                    token = DivOperator.Acquire();
                    break;

                //case "pwr2":
                //    return (new Pwr2Operator(), index);

                case "t":
                    token = KComb.Acquire();
                    break;

                //case "f":
                //    return (new FComb(), index);

                case "s":
                    token = SComb.Acquire();
                    break;

                case "c":
                    token = CComb.Acquire();
                    break;

                case "b":
                    token = BComb.Acquire();
                    break;

                case "i":
                    token = IComb.Acquire();
                    break;

                case "cons":
                case "vec":
                    token = ConsOperator.Acquire();
                    break;

                case "car":
                    token = CarOperator.Acquire();
                    break;

                case "cdr":
                    token = CdrOperator.Acquire();
                    break;

                case "nil":
                    token = NilOperator.Acquire();
                    break;

                case "isnil":
                    token = IsNilOperator.Acquire();
                    break;

                case "eq":
                    token = EqOperator.Acquire();
                    break;

                case "if0":
                    token = new If0Operator();
                    break;

                case "lt":
                    token = LtOperator.Acquire();
                    break;

                //case "mod":
                //    token = new ModOperator();
                //    break;

                //case "dem":
                //    token = new DemodOperator();
                //    break;

                case "interact":
                    token = new InteractOperator();
                    break;

                default:
                    if (decimal.TryParse(op, out var constant))     // int constant
                    {
                        token = ConstantOperator.Acquire(decimal.Parse(op));
                    }
                    else if (op.StartsWith("x"))
                    {
                        token = VarOperator.Acquire(op);
                    }
                    else if (op.StartsWith(":"))     // variable reference
                    {
                        token = LateBoundToken.Acquire(op);
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }

                    break;
                }

                if (stack.Count == 0)
                {
                    if (!(token is ApOperator))
                    {
                        if (i != ops.Length - 1)
                        {
                            throw new InvalidOperationException();
                        }

                        return(token);
                    }

                    stack.Push((ApOperator)token);
                }
                else
                {
                    var top = stack.Peek();
                    if (top.f == null)
                    {
                        top.f = token;
                        if (token is ApOperator ap)
                        {
                            stack.Push(ap);
                        }
                    }
                    else if (top.x == null)
                    {
                        top.x = token;
                        if (token is ApOperator ap)
                        {
                            stack.Push(ap);
                        }
                        else
                        {
                            while (stack.Count > 0 && stack.Peek().x != null)
                            {
                                token = stack.Pop();
                            }
                        }
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
            }

            if (stack.Count == 1)
            {
                return(stack.Pop());
            }

            return(token);
        }
Esempio n. 9
0
        private IMSILConstruction CreateMulOperator(IASTNode node)
        {
            var mulOperator = new MulOperator();

            return(mulOperator);
        }