Re: AST observations
"Eric C. Newton" <[email protected]> Thu, 18 Apr 2002 07:14:08 -0400
| Newsgroups | gmane.comp.python.compiler |
|---|---|
| Message-ID | <20020418071408.A24756@ecn> |
Yes, I did a lot of this, too. I gave up when I wanted to re-use something like a "find all Name Nodes" visitor, and then look up the parents later. I can certainly keep a reverse map. I'm already keeping a reverse map from symbol to node, too. On Thu, Apr 18, 2002 at 09:37:52AM +0000, Finn Bock wrote: > [Eric C. Newton] > > >I gave up on trying to use recursion to figure out a Node's parents in > >an AST tree. Very often I need to know the parents of the Node I'm > >looking at, and using recursion to hold this information was becoming > >cumbersome. > > If you only need the ancestry of the current node in the visitXXXX > methods, then the open_level(), close_level() visitor methods that I > suggested previously should work nicely: > > class MyVisitor(ASTVisitor): > def __init__(self): > self.ancestry = [] > > def open_level(self, node): > self.ancestry.append(node) > > def close_level(self, node): > self.ancestry.pop() > > def visitFunctionDef(self, node): > print "parent is", self.ancestry[-2] > > > regards, > finn