On 11/30/2009 12:32 PM, Chad J wrote:
Ellery Newcomer wrote:
On 11/30/2009 03:53 AM, Ary Borenszweig wrote:
Chad J wrote:
Given an Expression object in dmd, I'd like to know how many
subexpressions it contains and, even better, iterate over them. I'd
like to do this in a general way, without having to create cases for all
of the different kinds of Expressions. Is there some way to do this
that I've been missing?

Thanks,
- Chad

Where's the Expression object defined in D? I don't think there's such a
thing (I mean, a reflection capability to get an expression out of
something).

DMD source, eg parse.c, expression.c, etc

Right.  That.

Not that I know anything about DMD outside parse.c, but in expression.h, there be decls along the lines of

struct UnaExp{
  Expression* e1;
}
struct BinExp{
  Expression* e1;
  Expression* e2;
}

Iterating them would just be a tree walk. That takes care of 90% and ...

Oh. Yeah. There are a bunch of special cases.

But from what I've seen, iterating over an expression or any part of the AST involves implementing a function (like semantic) at each subclass. I'm betting there is no other way to do this.

I love ANTLR. It generates an arbitrary child/sibling AST, and walking it is a piece of cake.


Reply via email to