Search code examples
c#parsingirony

Getting parent node in Irony parser


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?


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.