代数的な構文の単純な構造を取得するために、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 プロパティを持つようにすることもできます。