Question

I am using Irony parser for NET in order to get a simple structure for an algebraic-like syntax:

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

The parsing works fine and I am using ParseTreeNode in order to get a reference for each node in my input. How can I get for a given ParseTreeNode node the parent node?

Was it helpful?

Solution

Well, it's pretty simple. You just traverse all the nodes, and pick the parent :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);

   }
}

I have taken a look at ParseTreeNode and quite frankly, I can't see anything that will give you the information you need. You can either download the source and add the functionality, or use the code I have given.

Alternatively, you can build AST tree which allows your nodes to have all the properties you ever want, and make sure that nodes always have Parent property.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top