Re: parent pointers in AST nodes

torbenm@diku.dk (Torben Ęgidius Mogensen)
Mon, 30 Nov 2009 16:11:36 +0100

          From comp.compilers

Related articles
parent pointers in AST nodes eliben@gmail.com (eliben) (2009-11-27)
Re: parent pointers in AST nodes bobduff@shell01.TheWorld.com (Robert A Duff) (2009-11-27)
Re: parent pointers in AST nodes zaimoni@zaimoni.com (Kenneth 'Bessarion' Boyd) (2009-11-27)
Re: parent pointers in AST nodes idbaxter@semdesigns.com (Ira Baxter) (2009-11-27)
Re: parent pointers in AST nodes DrDiettrich1@aol.com (Hans-Peter Diettrich) (2009-11-28)
Re: parent pointers in AST nodes bartc@freeuk.com (bartc) (2009-11-30)
Re: parent pointers in AST nodes torbenm@diku.dk (2009-11-30)
Re: parent pointers in AST nodes kkylheku@gmail.com (Kaz Kylheku) (2009-12-01)
Re: parent pointers in AST nodes quinn_jackson2004@yahoo.ca (Quinn Tyler Jackson) (2009-12-01)
Re: parent pointers in AST nodes mwso@earthlink.net (Gary Oblock) (2009-12-14)
| List of all articles for this month |
From: torbenm@diku.dk (Torben Ęgidius Mogensen)
Newsgroups: comp.compilers
Date: Mon, 30 Nov 2009 16:11:36 +0100
Organization: Department of Computer Science, University of Copenhagen
References: 09-11-060
Keywords: AST
Posted-Date: 30 Nov 2009 23:52:43 EST

eliben <eliben@gmail.com> writes:


> When implementing an AST for some language, each AST node typically
> holds information about the language construct it represents and
> pointers to children nodes (such as a binary op node pointing to its
> left-hand and right-hand operands).
>
> Is it common / useful to supply a pointer to the node's parent as
> well?
>
> In favor:
> * This can simplify some AST processing tasks, especially when using
> the visitor pattern - we may get to an interesting node and then need
> to look at its ancestors to do the required analysis.


I find the visitor pattern non-intuitive for AST processing. A set of
mutually recursive functions (one for each syntactic category, i.e., one
for expressions, one for statements etc.) that each do case analysis
over the node type and calls recursively on children nodes is much more
intuitive.


> Against:
> * Maintaining parent nodes makes the AST creation code more complex


Even more of a problem is that rewriting the AST becomes more complex,
and you can't share subtrees between several parents (unless you use a
list of parent pointers).


> * Wastes space (another pointer for each node)


That is hardly an issue. Having to maintain an extra invariant is more
of an issue.


> What are your thoughts?


I can't really see any cases where it would be worth the effort.


Torben



Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.