public void Test() { var node1 = new Operator("+"); var node2 = new Operator("*"); var node3 = new Operator("-"); var node4 = new Number("1"); var node5 = new Number("2"); var node6 = new Number("3"); var node7 = new Variable("X"); var node8 = new Operator("*"); var node9 = new Operator("/"); var node10 = new Number("4"); var node11 = new Number("5"); var node12 = new Number("6"); node1.LeftChild = node2; node2.Parent = node1; node1.RightChild = node3; node3.Parent = node1; node2.LeftChild = node6; node6.Parent = node2; node2.RightChild = node5; node5.Parent = node2; node3.LeftChild = node9; node9.Parent = node3; node3.RightChild = node10; node10.Parent = node3; node9.LeftChild = node11; node11.Parent = node9; node9.RightChild = node12; node12.Parent = node9; TreeIterator engine = new TreeIterator(node1); }
/// <summary> /// Converts a ParseNode object into it correspondending AST node. Throws an exception when there is no conversion possible. /// </summary> /// <param name="parseNode">Parsenode to be converted</param> /// <returns>AST node</returns> private ASTNode ConvertPNtoASTNode(ParseNode parseNode) { ASTNode ret; switch (parseNode.GetEnum()) { case ParseEnum.Number: ret = new Number(parseNode.GetValue()); break; case ParseEnum.Operator: ret = new Operator(parseNode.GetValue()); break; case ParseEnum.Variable: ret = new Variable(parseNode.GetValue()); break; case ParseEnum.Equals: ret = new EqualSign(parseNode.GetValue()); break; default: throw new Exception("Could not convert Parsenode"); } return ret; }
/*private SemanticAnalyzer.SyntaxTree.ASTNode Operate(SemanticAnalyzer.SyntaxTree.ASTNode operateNode) { String Operator = operateNode.Value; float newValue; double doubleValue; String Value; switch (Operator) { case "*": newValue = Single.Parse(operateNode.LeftChild.Value) * Single.Parse(operateNode.RightChild.Value); case "+": newValue = Single.Parse(operateNode.LeftChild.Value) + Single.Parse(operateNode.RightChild.Value); case "-": newValue = Single.Parse(operateNode.LeftChild.Value) - Single.Parse(operateNode.RightChild.Value); case "^": doubleValue = Math.Pow(Single.Parse(operateNode.LeftChild.Value), Single.Parse(operateNode.RightChild.Value)); } if(newValue != null) { Value = newValue.ToString(); } else if (doubleValue != null) { Value = doubleValue.ToString(); } else { Value = ""; } SemanticAnalyzer.SyntaxTree.Node.Number newNode = new SemanticAnalyzer.SyntaxTree.Node.Number(Value); changeNode(operateNode, newNode); return newNode; }*/ private Variable CombineChildren(ASTNode parent) { String newString = parent.LeftChild.Value + parent.Value + parent.RightChild.Value; var newNode = new Variable(newString); return newNode; }