[antlr-interest] Re: High level semantic analysis
lgcraymer
lgc at mail1.jpl.nasa.gov
Tue May 20 11:47:46 PDT 2003
Yahoo did weird things with my first attempted response. Assuming
that went into the bit bucket, I'll try again.
--- In antlr-interest at yahoogroups.com, "Tiller, Michael (M.M.)"
<mtiller at f...> wrote:
> > From: lgcraymer [mailto:lgc at m...]
> > Subject: [antlr-interest] Re: High level semantic analysis
> >
> > ANTLR's approach to the general problem is syntax tree
> > transformation (possibly multiple passes) followed by an "output"
> > pass which might generate an internal form that might not be tree
> > structured or might produce code. Ter is working towards an
"output
> > template" approach for this final pass--details are still being
> > worked out. I think that their "rule based semantic analysis"
could
> > be effected through one or more transformation passes, one or more
> > linking passes (tree walks which build links connecting AST
nodes),
> > and a resolution pass to "decorate the tree" (attribute grammar
> > terminology).
>
> Is there any built-in support for the "linking" and "decorating" you
talk about. Being relatively inexperienced in this aspect, I found
this to be one of the more confusing parts. It was easy for me to see
how the lexer, the parser and even the tree walker worked (and why
they existed).
Yes and no. The support is through user-developed AST classes;
"decorating" is simply the assignment of attributes, and linking is
the setting of reference pointers. Ter and I have talked about adding
some target-language-independent attribute syntax to ANTLR so that AST
classes would be automatically defined. Right now, all of this has to
be done in action code.
>
> ANTLR was great for getting to the point where all the information
was nicely arranged in a tree. What I struggle with is "Now what?".
For example, one of the first passes I could imagine doing on my AST
would be type/name lookup. Once I've done that, I'd like to keep that
information around. I'm assuming that is what you mean by linking.
... (example deleted)
Type/name information is usually kept in a symbol table as a routine
optimization. For Java, look at java.util.Hashtable; for C++, check
out the "map" template in the standard library.
By linking, I mean setting pointers to link one AST node to another in
a separate part of the tree. The idea is to generate a graph which
can be navigated efficiently for the analysis and output generation
desired.
> Assuming I am right (which is a big assumption), I didn't see
anything in ANTLR that supports these kinds of associations. Am I
missing something? I know I can define my own AST node types and I
could add some data structures to support linking but there were two
reasons I didn't do this:
>
> 1) I figured if this is what I'm supposed to do then everybody would
have to do it and ANTLR would support it somehow. The fact that I
didn't see this functionality in ANTLR led me to think perhaps I
wasn't going about this the correct way.
ANTLR started out with the lex/yacc view that access to target
language actions was essential to the specification process. ANTLR is
still evolving from there. For many things, ANTLR does provide
support, but that support is through target language action code.
ANTLR 3 will get a little further away from that than ANTLR2.
> 2) I was quite concerned about how all this linking and associating
would impact the garbage collection system for AST nodes. To be
honest, I find the whole process of defining a new AST type pretty
complicated. There seem to be so many different AST types and I never
know when to use one or the other (e.g when do I use my AST type and
when do I use RefAST, etc).
Performance cost is not high; you can either choose to use
reference-counted pointers for the linking or bypass this if dangling
pointers are not going to be a problem.
>
> Now I'm not really blaming ANTLR for either of these issues. I'm
just saying that for me this was somewhat intimidating and so I was
hesitant to get all tangled up in implementing these details.
>
> These are just some things to consider in the development of ANTLR 3
that might make the tool easier and more approachable to people like
me.
Part of this is that ANTLR documentation, while excellent for a public
domain package, is not quite what one would get with a mature
commercial product. The documentation will improve: Ter is actively
teaching, and students are very useful for debugging documentation.
We are envisioning a "language translator's workbench" for ANTLR
3--that may help as well. Mostly, I think that your difficulties are
just learning curve-related--problems look different from a language
processing perspective, and it takes a while to adjust to the new
perspective. That said, I still wish that I could figure out
some generic insight from the paper you referenced and how it could be
applied to ANTLR.
--Loring
> --
> Mike
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list