0

我正在为 NET 使用 Irony 解析器,以便为类似代数的语法获得一个简单的结构:

2 + 3 * 5
7 + (2 * 5) a.s.o.

解析工作正常,我正在使用ParseTreeNode它来获取输入中每个节点的引用。如何获得给定 ParseTreeNode 节点的父节点?

4

1 回答 1

0

嗯,这很简单。您只需遍历所有节点,然后选择父节点:P。

Stack<ParseTreeNode> stack = new Stack { yourRootTreeNode };
while(!stack.Empty)
{
   var current = stack.Pop();
   if(current.ChildNodes != null)
   {
     if(current.ChildNodes.Contains(yourChildNode))
        return current; /*parent of yourChildNode */

     foreach(var child in current.ChildNodes)
       stack.Push(child);

   }
}

我查看了 ParseTreeNode,坦率地说,我看不到任何可以为您提供所需信息的东西。您可以下载源代码并添加功能,也可以使用我提供的代码。

或者,您可以构建 AST 树,它允许您的节点拥有您想要的所有属性,并确保节点始终具有 Parent 属性。

于 2014-03-25T16:09:32.693 回答