我正在为NET使用Irony解析器,以获得类似代数语法的简单结构:
2 + 3 * 5
7 + (2 * 5) a.s.o.
解析工作正常,我使用ParseTreeNode
来获取输入中每个节点的引用。
如何为父节点获取给定的ParseTreeNode
节点?
答案 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属性。