Exemplo n.º 1
0
        private ICalculationExpression ReadNonTerminal(List <string> tokenList)
        {
            string token = tokenList.First();

            tokenList.RemoveAt(0);
            ICalculationExpression right = ReadNextToken(tokenList);
            ICalculationExpression left  = ReadNextToken(tokenList);

            if (token == "+")
            {
                return(new AddExpression(left, right));
            }
            else if (token == "-")
            {
                return(new SubtractExpression(left, right));
            }
            else if (token == "*")
            {
                return(new MultiplyExpression(left, right));
            }
            else if (token == "/")
            {
                return(new DivideExpression(left, right));
            }
            else if (token == "pow2")
            {
                return(new PowerOfTwoExpression(right));
            }
            else if (token == "√")
            {
                return(new SquareRootExpression(right));
            }
            else if (token == "1/x")
            {
                return(new MultiplicativeInverseExpression(right));
            }
            else if (token == "(" || token == ")")
            {
                return(right);
            }

            return(null);
        }
Exemplo n.º 2
0
 public MultiplyExpression(ICalculationExpression left, ICalculationExpression right)
 {
     this.leftEx  = left;
     this.rightEx = right;
 }
Exemplo n.º 3
0
 public DivideExpression(ICalculationExpression left, ICalculationExpression right)
 {
     this.leftEx  = left;
     this.rightEx = right;
 }
Exemplo n.º 4
0
 public SubtractExpression(ICalculationExpression left, ICalculationExpression right)
 {
     this.leftEx  = left;
     this.rightEx = right;
 }
Exemplo n.º 5
0
 public MultiplicativeInverseExpression(ICalculationExpression expr)
 {
     this.rightEx = expr;
 }
Exemplo n.º 6
0
 public SquareRootExpression(ICalculationExpression expr)
 {
     this.rightEx = expr;
 }
Exemplo n.º 7
0
 public PowerOfTwoExpression(ICalculationExpression expr)
 {
     this.rightEx = expr;
 }
Exemplo n.º 8
0
        private double CalculateAnswer()
        {
            //if (m_PolishStack.Count <= 1) return;

            TokenReader PolishTokenReader = new TokenReader();

            string m_CombinedInfixString = m_InfixString;

            if (m_NumberString != "")
            {
                m_CombinedInfixString += m_NumberString + ' ';
            }

            List <string> polishTokenList  = m_PolishStack.ToList();
            List <string> infixStringArray = m_CombinedInfixString.Split(' ').ToList();

            infixStringArray.RemoveAll(IsEmptySpace);
            infixStringArray.RemoveAt(infixStringArray.Count - 1);

            string        rpnString        = ConvertInfixToRPN(infixStringArray.ToArray());
            List <string> rpnDisplayString = rpnString.Split(' ').ToList();

            rpnDisplayString.Reverse();
            //rpnDisplayString.RemoveAt(rpnDisplayString.Count - 1);
            rpnDisplayString.RemoveAt(0);

            debugBox.Text = rpnString;

            string stackRpnString = "";

            foreach (string token in polishTokenList)
            {
                stackRpnString += token + " ";
            }

            //debugBox.Text = stackRpnString + Environment.NewLine + m_sInfixString;

            ICalculationExpression resultExpression = null;

            try
            {
                resultExpression = PolishTokenReader.ReadToken(rpnDisplayString);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }

            ResetInputString();
            BuildCalculationString();

            double result = 0.0;

            if (resultExpression != null)
            {
                string resultString = "Infinity?";
                try {
                    result       = resultExpression.Interpret();
                    resultString = result.ToString();
                }
                catch (NullReferenceException exception)
                {
                    Console.WriteLine(exception.Message);
                }

                calcResultLabel.Text = resultString;
            }
            else
            {
                calcResultLabel.Text = "Error";
                //ClearCalculations();
                Console.WriteLine("Error: resultExpression is a 'null' object");
            }

            return(result);
        }