我正在为 NET 使用 Irony 解析器,以便为类似代数的语法获得一个简单的结构:
2 + 3 * 5
7 + (2 * 5) a.s.o.
解析工作正常,我正在使用ParseTreeNode
它来获取输入中每个节点的引用。如何获得给定 ParseTreeNode
节点的父节点?
嗯,这很简单。您只需遍历所有节点,然后选择父节点: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 属性。