在Irony解析器中获取父节点

时间:2014-02-04 12:13:09

标签: c# parsing irony

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

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

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

1 个答案:

答案 0 :(得分: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属性。