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 に答える