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