コード例 #1
0
        public void buildTree()
        {
            //now the tree is ready to be built:
            int a = 1;

            while (a < TokenList.Count - 1)
            {
                Console.WriteLine($"test {a} result {this.ToString()}");
                OperatorToken newToken;
                switch (TokenList[a].Print())
                {
                case "*":
                    //create new token
                    newToken = new MultiplicationToken();
                    //take left and right values (could be constants or ready built tokens:
                    //                                 a
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    newToken.build(TokenList[a - 1], TokenList[a + 1]);
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    a = a - 1;
                    //                           a
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    TokenList[a] = newToken;
                    // after: ... | 5 | [ + ] | [2*3] | [ * ] | 3 |
                    TokenList.RemoveRange(a + 1, 2);
                    //        ... | 5 | [ + ] | [2*3] |
                    break;

                case "/":
                    //create new token
                    newToken = new DivisionToken();
                    newToken.build(TokenList[a - 1], TokenList[a + 1]);
                    a            = a - 1;
                    TokenList[a] = newToken;
                    TokenList.RemoveRange(a + 1, 2);
                    break;

                case "%":
                    newToken = new ModuloToken();
                    newToken.build(TokenList[a - 1], TokenList[a + 1]);
                    a            = a - 1;
                    TokenList[a] = newToken;
                    TokenList.RemoveRange(a + 1, 2);
                    break;

                case "+":
                    break;

                case "-":
                    break;
                }
                a++;
            }
            a = 1;
            while (a < TokenList.Count - 1)
            {
                Console.WriteLine($"test {a} result {this.ToString()}");
                OperatorToken newToken;
                switch (TokenList[a].Print())
                {
                case "+":
                    //create new token
                    newToken = new AdditionToken();
                    //take left and right values (could be constants or ready built tokens:
                    //                                 a
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    newToken.build(TokenList[a - 1], TokenList[a + 1]);
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    a = a - 1;
                    //                           a
                    // before: ... | 5 | [ + ] | 2 | [ * ] | 3 |
                    TokenList[a] = newToken;
                    // after: ... | 5 | [ + ] | [2*3] | [ * ] | 3 |
                    TokenList.RemoveRange(a + 1, 2);
                    //        ... | 5 | [ + ] | [2*3] |
                    break;

                case "-":
                    //create new token
                    newToken = new SubtractionToken();
                    newToken.build(TokenList[a - 1], TokenList[a + 1]);
                    a            = a - 1;
                    TokenList[a] = newToken;
                    TokenList.RemoveRange(a + 1, 2);
                    break;
                }
                a++;
            }
        }