private void CreateChild(ref AbstractTreeElement node, string expression, ref int curNumber)
 {
     if (curNumber >= expression.Length)
         return;
     while (expression[curNumber] == ' ' || expression[curNumber] == ')')
         ++curNumber;
     if (expression[curNumber] == '(')
     {
         Operator newOpertator;
         switch (expression[curNumber + 1])
         {
             case '+':
                 newOpertator = new PlusOperator();
                 break;
             case '-':
                 newOpertator = new MinusOperator();
                 break;
             case '*':
                 newOpertator = new MultiplicationOperator();
                 break;
             case '/':
                 newOpertator = new DivisionOperator();
                 break;
             default:
                 throw new System.Exception();
         }
         curNumber += 2;
         var newNode = newOpertator.LeftChild;
         CreateChild(ref newNode, expression, ref curNumber);
         newOpertator.LeftChild = newNode;
         if (expression[curNumber] == ')')
         {
             ++curNumber;
         }
         newNode = newOpertator.RightChild;
         CreateChild(ref newNode, expression, ref curNumber);
         newOpertator.RightChild = newNode;
         node = newOpertator;
     }
     else
     {
         Operand newOperand = new Operand();
         newOperand.Element = 0;
         while (expression[curNumber] != ' ')
         {
             if (expression[curNumber] == ')')
                 break;
             newOperand.Element = newOperand.Element * 10 + (expression[curNumber] - '0');
             ++curNumber;
         }
         node = newOperand;
     }
 }
Beispiel #2
0
        private void CreateChild(ref AbstractTreeElement node, string expression, ref int curNumber)
        {
            if (curNumber >= expression.Length)
            {
                return;
            }
            while (expression[curNumber] == ' ' || expression[curNumber] == ')')
            {
                ++curNumber;
            }
            if (expression[curNumber] == '(')
            {
                Operator newOpertator;
                switch (expression[curNumber + 1])
                {
                case '+':
                    newOpertator = new PlusOperator();
                    break;

                case '-':
                    newOpertator = new MinusOperator();
                    break;

                case '*':
                    newOpertator = new MultiplicationOperator();
                    break;

                case '/':
                    newOpertator = new DivisionOperator();
                    break;

                default:
                    throw new System.Exception();
                }
                curNumber += 2;
                var newNode = newOpertator.LeftChild;
                CreateChild(ref newNode, expression, ref curNumber);
                newOpertator.LeftChild = newNode;
                if (expression[curNumber] == ')')
                {
                    ++curNumber;
                }
                newNode = newOpertator.RightChild;
                CreateChild(ref newNode, expression, ref curNumber);
                newOpertator.RightChild = newNode;
                node = newOpertator;
            }
            else
            {
                Operand newOperand = new Operand();
                newOperand.Element = 0;
                while (expression[curNumber] != ' ')
                {
                    if (expression[curNumber] == ')')
                    {
                        break;
                    }
                    newOperand.Element = newOperand.Element * 10 + (expression[curNumber] - '0');
                    ++curNumber;
                }
                node = newOperand;
            }
        }