Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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;
        }
Esempio n. 3
0
 /*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;
 }