Exemplo n.º 1
0
        //This function prints the trie depth first
        public void PrintDepthFirst()
        {
            ArrayList toVisit = new ArrayList(root.Children);
            ArrayList Visited = new ArrayList();
            ArrayList AddList = new ArrayList();

            Console.WriteLine("#########");

            while (toVisit.Count != 0)
            {
                ParsedTreeNode node = (ParsedTreeNode)toVisit[0];
                Console.WriteLine(node);
                if (node.IsLeaf() == false)
                {
                    foreach (ParsedTreeNode toAdd in node.Children)
                    {
                        if (!Visited.Contains(toAdd))
                        {
                            AddList.Add(toAdd);
                        }
                    }
                }
                toVisit.Remove(node);
                toVisit.InsertRange(0, AddList);
                Visited.Add(node);
                AddList.Clear();
            }

            Console.WriteLine("#########");
        }
Exemplo n.º 2
0
        public void SetAST()
        {
            AST = new ParsedTreeNode(-1, Tokens.EMPTY, null);

            ArrayList toVisit = new ArrayList {
                root
            };
            ArrayList Visited   = new ArrayList();
            ArrayList Operators = new ArrayList {
                Tokens.Plus, Tokens.Minus, Tokens.Multiply, Tokens.Divide, Tokens.Exponent, Tokens.Equal
            };
            ParsedTreeNode lastOp = AST;

            while (toVisit.Count != 0)
            {
                ParsedTreeNode node = (ParsedTreeNode)toVisit[0];

                if (Operators.Contains(node.Value))
                {
                    lastOp.Children.Add(node);
                    lastOp = node;
                }
                else if (!(node.Value is null) && !(node.ToString().Contains("<<")))
                {
                    lastOp.Children.Add(node);
                }
                if (node.IsLeaf() == false)
                {
                    foreach (ParsedTreeNode toAdd in node.Children)
                    {
                        if (!Visited.Contains(toAdd))
                        {
                            toVisit.Add(toAdd);
                        }
                    }
                }
                toVisit.Remove(node);
                Visited.Add(node);
            }
        }
Exemplo n.º 3
0
        //This function adds new nodes to the trie using their depth and parent value
        public void AddNewNode(int depth, object parentValue, object value)
        {
            if (root.IsLeaf())
            {
                root.Children.Add(new ParsedTreeNode(depth, parentValue, value)); return;
            }

            ArrayList toVisit = new ArrayList(root.Children);
            ArrayList Visited = new ArrayList();

            while (toVisit.Count != 0)
            {
                ParsedTreeNode node = (ParsedTreeNode)toVisit[0];
                if (node.Value == parentValue && node.Depth == depth - 1)
                {
                    node.Children.Add(new ParsedTreeNode(depth, parentValue, value));
                    if (depth > Deepest_node)
                    {
                        Deepest_node = depth;
                    }
                    return;
                }
                else
                {
                    if (node.IsLeaf() == false)
                    {
                        foreach (ParsedTreeNode toAdd in node.Children)
                        {
                            if (!Visited.Contains(toAdd))
                            {
                                toVisit.Insert(0, toAdd);
                            }
                        }
                    }
                    toVisit.Remove(node);
                    Visited.Add(node);
                }
            }
        }
Exemplo n.º 4
0
 //This funciton is used to add children to a given node
 public void AddChild(ParsedTreeNode node)
 {
     this.Children.Add(node);
 }
Exemplo n.º 5
0
 public ParseTree()
 {
     root         = new ParsedTreeNode(0, Tokens.EMPTY, null);
     Final_result = 0;
     AST          = new ParsedTreeNode(0, Tokens.EMPTY, null);
 }
Exemplo n.º 6
0
 internal override PositiveReply ChangeAST(ParsedTreeNode aST)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 7
0
 internal override PositiveReply ChangeAST(ParsedTreeNode AST)
 {
     //this.AST = AST;
     return(this);
 }
Exemplo n.º 8
0
 internal abstract PositiveReply ChangeAST(ParsedTreeNode aST);