Exemple #1
0
        public void TestShuntingYard02()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "1"),
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Operator, "+"),
                GenerateTestToken(TokenType.Number, "3"),
                GenerateTestToken(TokenType.Number, "4"),
                GenerateTestToken(TokenType.Operator, "*"),
                GenerateTestToken(TokenType.Operator, "-"),
                GenerateTestToken(TokenType.Number, "5"),
                GenerateTestToken(TokenType.Number, "6"),
                GenerateTestToken(TokenType.Number, "7"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Number, "8"),
                GenerateTestToken(TokenType.Operator, "*"),
                GenerateTestToken(TokenType.Operator, "+"),
                GenerateTestToken(TokenType.Number, "9"),
                GenerateTestToken(TokenType.Operator, "-"),
            };
            var arrResult  = ShuntingYardParser.InfixToRpn("1 + 2 - 3*4 + 5^6^7*8 - 9").ToArray();
            var arrResultT = ShuntingYardParser.InfixToRpn("1 + 2 - 3 4 + 5^6^7*8 - 9").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
            Assert.IsTrue(arrResult.SequenceEqual(arrResultT));
        }
Exemple #2
0
        public void TestShuntingYard06()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "5"),
                GenerateTestToken(TokenType.Number, "-5"),
                GenerateTestToken(TokenType.Operator, "+"),
                GenerateTestToken(TokenType.Number, "5"),
                GenerateTestToken(TokenType.Operator, "+"),
            };
            var arrResult = ShuntingYardParser.InfixToRpn("5 +-5+ 5").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
        }
Exemple #3
0
        public void TestShuntingYard07()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "45"),
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Number, "54"),
                GenerateTestToken(TokenType.Function, "sqrt"),
            };

            var arrResult = ShuntingYardParser.InfixToRpn("sqrt(45 ^ 2, 54)", "a").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
        }
Exemple #4
0
        public void TestShuntingYard05()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Number, "3"),
                GenerateTestToken(TokenType.Function, "max"),
                GenerateTestToken(TokenType.Number, "3"),
                GenerateTestToken(TokenType.Operator, "/"),
                GenerateTestToken(TokenType.Constant, "π"),
                GenerateTestToken(TokenType.Operator, "*"),
                GenerateTestToken(TokenType.Function, "sin"),
            };
            var arrResult = ShuntingYardParser.InfixToRpn("sin ( max ( 2, 3 ) / 3 * π )").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
        }
Exemple #5
0
        public void TestShuntingYard03()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "1"),
                GenerateTestToken(TokenType.Number, "5"),
                GenerateTestToken(TokenType.Function, "ln"),
                GenerateTestToken(TokenType.Number, "8"),
                GenerateTestToken(TokenType.Function, "exp"),
                GenerateTestToken(TokenType.Operator, "-"),
                GenerateTestToken(TokenType.Function, "sin"),
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Operator, "+"),
                GenerateTestToken(TokenType.Function, "cos"),
            };
            var arrResult = ShuntingYardParser.InfixToRpn("cos(1 + sin(ln(5) - exp(8))^2)").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
        }
Exemple #6
0
        /// <summary>
        /// Erstellt eine Baumstruktur, die einen mathematischen Term repräsentiert.
        /// </summary>
        /// <param name="token">Eine Liste an Token, die den mathematischen Term abbilden.</param>
        /// <param name="environment">Die Umgebung, in dessen Kontext der mathematische Term seine Gültigkeit besitzt.</param>
        /// <param name="bInfix">true, wenn der Term in der Infix-Notation formatiert ist, ansonsten false.</param>
        /// <returns>Eine Baumstruktur, die einen mathematischen Term repräsentiert.</returns>
        public static Node Get(IEnumerable <Token> token, MathEnvironment environment, bool bInfix)
        {
            if (bInfix)
            {
                token = ShuntingYardParser.InfixToRpn(token);
            }

            Stack <Node> stack = new Stack <Node>();

            foreach (Token t in token)
            {
                stack.Push(GenerateNodeFromToken(t, stack, environment));
            }

            if (stack.Count != 1)
            {
                throw new ArithmeticException("Unable to parse the given term.");
            }

            return(stack.Pop());
        }
Exemple #7
0
        public void TestShuntingYard04()
        {
            var arrExpected = new[]
            {
                GenerateTestToken(TokenType.Number, "3"),
                GenerateTestToken(TokenType.Number, "4"),
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Operator, "*"),
                GenerateTestToken(TokenType.Number, "1"),
                GenerateTestToken(TokenType.Number, "5"),
                GenerateTestToken(TokenType.Operator, "-"),
                GenerateTestToken(TokenType.Number, "2"),
                GenerateTestToken(TokenType.Number, "3"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Operator, "^"),
                GenerateTestToken(TokenType.Operator, "/"),
                GenerateTestToken(TokenType.Operator, "+"),
            };
            var arrResult = ShuntingYardParser.InfixToRpn("3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3").ToArray();

            Assert.IsTrue(arrResult.SequenceEqual(arrExpected));
        }
 /// <summary>
 /// Parst einen mathematischen Term und gibt diesen aufgeteilt in einzelne Bauteile und in umgedrehter polnischer Notation zurück.
 /// </summary>
 /// <param name="strTerm">Der mathematische Term als String, z.B. "5 + 5 - sqrt(9)"</param>
 /// <param name="arrVariables">Eine Liste mit Variablen, die in dem Term vortkommen, beispielsweise "x", "y"</param>
 /// <returns></returns>
 public static Token[] TokenizeTermToRpn(string strTerm, params string[] arrVariables)
 {
     return(ShuntingYardParser.InfixToRpn(strTerm, arrVariables).ToArray());
 }