示例#1
0
        // string representation of the parse tree, for debugging
        public override string ToString()
        {
            String s = "";

            Stack <IParseNode> nodeStack  = new Stack <IParseNode>();
            Stack <int>        depthStack = new Stack <int>();

            nodeStack.Push(this);
            depthStack.Push(0);

            while (nodeStack.Count > 0)
            {
                IParseNode node   = nodeStack.Pop();
                int        depth  = depthStack.Pop();
                string     indent = "";
                for (int i = 0; i < depth; i++)
                {
                    indent += "  ";
                }
                if (node is ParseLeaf)
                {
                    s += indent + node.ToString() + '\n';
                }
                else
                {
                    ParseTree t = node as ParseTree;
                    s += indent + t.nonterminal.ToString() + '\n';
                    for (int i = t.children.Count - 1; i >= 0; i--)
                    {
                        IParseNode next = t.children[i];
                        nodeStack.Push(next);
                        depthStack.Push(depth + 1);
                    }
                }
            }

            return(s);
        }
示例#2
0
        private void VisitNode(IParseNode node, IParseNode parentNode, TreeNode parentTreeItem)
        {
            if (node == null)
            {
                throw new ArgumentNullException();
            }

            TreeNode treeNode = new TreeNode(node.ToString());

            treeNode.Tag         = node;
            treeNode.ToolTipText = treeNode.Text;

            if (parentTreeItem == null)
            {
                this.treeParseNodes.Nodes.Add(treeNode);
            }
            else
            {
                parentTreeItem.Nodes.Add(treeNode);
            }

            if (this.Errors.ContainsKey(node))
            {
                treeNode.ForeColor = Color.Red;
                TreeNode n = treeNode;
                while (n != null)
                {
                    n.Expand();
                    n = n.Parent;
                }
            }

            foreach (IParseNode child in node.GetChildNodes())
            {
                this.VisitNode(child, node, treeNode);
            }
        }
示例#3
0
        private void VisitNode(IParseNode node, IParseNode parentNode, TreeNode parentTreeItem)
        {
            if (node == null)
                throw new ArgumentNullException();

            TreeNode treeNode = new TreeNode(node.ToString());
            treeNode.Tag = node;
            treeNode.ToolTipText = treeNode.Text;

            if (parentTreeItem == null)
                this.treeParseNodes.Nodes.Add(treeNode);
            else
                parentTreeItem.Nodes.Add(treeNode);

            if (this.Errors.ContainsKey(node))
            {
                treeNode.ForeColor = Color.Red;
                TreeNode n = treeNode;
                while (n != null)
                {
                    n.Expand();
                    n = n.Parent;
                }
            }

            foreach (IParseNode child in node.GetChildNodes())
                this.VisitNode(child, node, treeNode);
        }