[antlr-interest] CommonTree & Tree grammar versus DIY
Johannes Luber
jaluber at gmx.de
Fri Aug 15 12:29:00 PDT 2008
Terence Parr schrieb:
>
> On Aug 15, 2008, at 10:13 AM, Andy Tripp wrote:
>> There are an awful lot of parser/lexer tools out there besides ANTLR.
>> I would guess that of all the people doing AST manipulation, few of them
>> use ANTLR treewalkers to do it.
>
> I don't recommend rewriting asts unless you stay in same tree structure.
>
>>>> The "manipulating an AST" work of building a translator is quite a
>>>> different
>>>> job than the "build a lexer/parser" part of it.
>>> Yep. i'm mostly a fan of walking not rewriting ASts by the
>>> way...that gets WAY too hard.
>>
>> Maybe I'm misunderstanding you, but walking vs. rewriting is like
>> apples vs. oranges (or "the drive to and from work" vs. "going to
>> work all day"). Walking is what you do when there's (almost) nothing
>> to do.
>
> Except the entire work of the semantic analyzer of a compiler etc... ;)
> Compute symb tables, flow analysis, well, just about everything right? ;)
>
>> Further, Andy has a nice approach of rewriting.
>>> Expect ANTLRMorph, by Leon Su, this Fall!
>>
>> To pick an AST manipulation rule at random...consider that when
>> translating
>> C to Java, you can assign a zero value to any C struct. The C struct
>> will become
>> a Java class, and the zero needs to change to "null". Where in the AST
>> do we need to check? Here are a few ways to "assign 0" in C:
>>
>> * simple assignment: a = NULL; (where we have #define NULL 0
>> somewhere)
>> * function call arg: f(0); (where f's first arg is some
>> struct type)
>> * ternary operator: a = b ? 0 : 0; * function return: a =
>> f(); (where f() returns struct type)
>
> You mean pointer to struct not struct right?
>
>> So if we have a checkForZeroAssignment() method, calls to it will have
>> to be inserted
>> in at least four distinct places in our Ctree.g file. And
>> checkForZero() will
>> have to "know" where it's being called from anyway (for example, in the
>> simple assignment case, it may have to search deep into nested curly
>> braces
>> for array assignment).
>>
>> So which way is best to slice the problem? We can have a
>> ZeroAssignmentRule class (along with a couple hundred others to do
>> other things)
>> that searches the AST for these four cases. Or
>> we can have a Ctree.g that, at the ASSIGN node calls
>> checkForZeroAssignment()
>> and a bunch (20? 50?) of other checks to do other things.
>>
>> I'll be pretty impressed if ANTLRMorph makes this kind of work any
>> easier,
>> as none of the other AST-rewrite systems seem to.
>
> We don't do AST rewrite. We go text-to-text. You would list those
> rules above as you've specified.
>
> assignment:
> "x = NULL;" -> "<x> = null"
>
> expr:
> "f(0)" -> "<f>(null)"
>
> the ternary could be handled a few ways...but it's worse, right? You
> have a type conflict from int to ptr. You have to decide what to do in
> that case in general.
>
> ANTLRMorph rocks!
>
> Ter
Can ANTLRmorph translate from Java to C# or any other language without
requiring an analysis depending on an AST?
Johannes
More information about the antlr-interest
mailing list