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)); }
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)); }
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)); }
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)); }
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)); }
/// <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()); }
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()); }