示例#1
0
        public void MustBeReturnListTwoFreePlusFourMinusTwo(string expression)
        {
            IList <Token> actual   = parser.Parse(expression);
            List <Token>  expected = new List <Token>();
            TokenOperand  op1      = new TokenOperand();

            op1.Value = "2";
            TokenOperation oper = new TokenOperation();

            oper.Value = "^";
            TokenOperand op2 = new TokenOperand();

            op2.Value = "3";
            TokenOperation op3 = new TokenOperation();

            op3.Value = "+";
            TokenOperand op4 = new TokenOperand();

            op4.Value = "4";
            TokenOperation op5 = new TokenOperation();

            op5.Value = "-";
            TokenOperand op6 = new TokenOperand();

            op6.Value = "2";
            expected.Add(op1);
            expected.Add(oper);
            expected.Add(op2);
            expected.Add(op3);
            expected.Add(op4);
            expected.Add(op5);
            expected.Add(op6);
            Assert.AreEqual(expected, actual);
        }
示例#2
0
        public void ShouldBeOperand(string expression)
        {
            IList <Token> actualListToken = parser.Parse(expression);
            TokenOperand  operand         = new TokenOperand()
            {
                Value = expression.Trim()
            };

            Assert.AreEqual(operand.Value, actualListToken[0].Value);
        }
示例#3
0
        public void ShouldBeEqual()
        {
            TokenOperand actual = new TokenOperand();

            actual.Value = "2";
            List <Token> actualListToken = new List <Token>();

            actualListToken.Add(actual);
            TokenOperand expected = new TokenOperand();

            expected.Value = "2";
            List <Token> expectedListToken = new List <Token>();

            expectedListToken.Add(expected);
            Assert.AreEqual(expectedListToken, actualListToken);
        }
示例#4
0
        public void MustBeReturnList2step3(string expression)
        {
            IList <Token> actual   = parser.Parse(expression);
            List <Token>  expected = new List <Token>();
            TokenOperand  op1      = new TokenOperand();

            op1.Value = "2";
            TokenOperation oper = new TokenOperation();

            oper.Value = "^";
            TokenOperand op2 = new TokenOperand();

            op2.Value = "3";
            expected.Add(op1);
            expected.Add(oper);
            expected.Add(op2);
            Assert.AreEqual(expected, actual);
        }
示例#5
0
        public void MustBeReturnListTwoFreePlusFourMinusTwoWithBrackets(string expression)
        {
            IList <Token> actual   = parser.Parse(expression);
            List <Token>  expected = new List <Token>();
            TokenOperand  op1      = new TokenOperand();

            op1.Value = "2";
            TokenOperation oper = new TokenOperation();

            oper.Value = "^";
            TokenBracket brOpen = new TokenBracket();

            brOpen.isOpened = true;
            brOpen.Value    = "(";
            TokenOperand op2 = new TokenOperand();

            op2.Value = "3";
            TokenOperation op3 = new TokenOperation();

            op3.Value = "+";
            TokenOperand op4 = new TokenOperand();

            op4.Value = "4";
            TokenOperation op5 = new TokenOperation();

            op5.Value = "-";
            TokenOperand op6 = new TokenOperand();

            op6.Value = "2";
            TokenBracket brClose = new TokenBracket();

            brOpen.isOpened = false;
            brClose.Value   = ")";
            expected.Add(op1);
            expected.Add(oper);
            expected.Add(brOpen);
            expected.Add(op2);
            expected.Add(op3);
            expected.Add(op4);
            expected.Add(op5);
            expected.Add(op6);
            expected.Add(brClose);
            Assert.AreEqual(expected, actual);
        }
示例#6
0
        public virtual Token GetToken(string expression)
        {
            string       expressionNew = expression.Replace(" ", "");
            TokenOperand operand       = new TokenOperand();

            operand.Value = "";
            TokenOperation operation = new TokenOperation();

            operation.Value = "";
            TokenBracket tokenBracket = new TokenBracket();

            tokenBracket.Value = "";
            string tempToken = "";

            for (int i = 0; i < expressionNew.Length; i++)
            {
                Char cCh = expressionNew[i];
                if (Char.IsDigit(cCh))
                {
                    operand.Value = String.Format("{0}{1}", operand.Value, cCh);
                }
                else
                {
                    if (CheckEligibleOperation(cCh))
                    {
                        if (operand.Value.ToString() != "")
                        {
                            break;
                        }
                        if (cCh == '(')
                        {
                            tokenBracket.isOpened = true;
                            tokenBracket.Value    = String.Format("{0}", cCh);
                            break;
                        }
                        if (cCh == ')')
                        {
                            tokenBracket.isOpened = false;
                            tokenBracket.Value    = String.Format("{0}", cCh);
                            break;
                        }
                        else
                        {
                            operation.Value = String.Format("{0}", cCh);
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }

            if (operation.Value != "")
            {
                SetOperationPriority(operation);
                return(operation);
            }
            if (operand.Value != "")
            {
                return(operand);
            }
            if (tokenBracket.Value != "")
            {
                SetOperationPriority(tokenBracket);
                return(tokenBracket);
            }
            else
            {
                throw new CalcBadSyntaxException();
            }
        }
示例#7
0
        public virtual void ExecuteOperation(Stack <Token> temp, TokenOperation operation)
        {
            TokenOperand op2 = temp.Pop() as TokenOperand;
            TokenOperand op1 = temp.Pop() as TokenOperand;

            switch (operation.Value.ToString())
            {
            case "+":
            {
                int r = Convert.ToInt32(op1.Value) + Convert.ToInt32(op2.Value);
                temp.Push(new TokenOperand()
                    {
                        Value = r
                    });
                break;
            }

            case "-":
            {
                int r = Convert.ToInt32(op1.Value) - Convert.ToInt32(op2.Value);
                temp.Push(new TokenOperand()
                    {
                        Value = r
                    });
                break;
            }

            case "*":
            {
                int r = Convert.ToInt32(op1.Value) * Convert.ToInt32(op2.Value);
                temp.Push(new TokenOperand()
                    {
                        Value = r
                    });
                break;
            }

            case "/":
            {
                int r = Convert.ToInt32(op1.Value) / Convert.ToInt32(op2.Value);
                temp.Push(new TokenOperand()
                    {
                        Value = r
                    });
                break;
            }

            case "^":
            {
                int r = (int)Math.Round(Math.Pow(Convert.ToInt32(op1.Value), Convert.ToInt32(op2.Value)), 0);
                temp.Push(new TokenOperand()
                    {
                        Value = r
                    });
                break;
            }

            default:
                break;
            }
        }