[antlr-interest] ANTLR 2.7.7 TreeParser transformation question
Kevin J. Cummings
cummings at kjchome.homeip.net
Wed Apr 18 19:52:56 PDT 2007
Ric Klaren wrote:
> Hi,
>
> On 4/14/07, Kevin J. Cummings <cummings at kjchome.homeip.net> wrote:
>> > aexpr :! #( PLUS p1:aexpr p2:aexpr )
>> > {
>> > // Anything plus 0 is Anything
>> > if (isZero(p1))
>> > {
>> > #aexpr = #p2;
>> > }
>> > else if (isZero(p2))
>> > {
>> > #aexpr = #p1;
>> > }
>> > else
>> > {
>> > #aexpr = #(PLUS, p1, p2);
>> > }
>> > }
>> > |! ( #( MINUS aexpr aexpr ) )=> #( minus:MINUS m1:aexpr
>> m2:aexpr )
>> > |! #( mult:MULT mu1:aexpr mu2:aexpr )
>> > |! #( div:DIV d1:aexpr d2:aexpr )
>> > |! #( neg:MINUS n:aexpr )
>> > | NUM
>> > | STRING
>> > ;
>>
>> What I'm trying to do is transform the tree passed into aexpr in those
>> cases when I can remove complexity. My isZero() method is correctly
>> recognizing those NUM trees which contain the number "0".
>> If I examine #aexpr before leaving this rule, I can see that:
>> (PLUS 2 0)
>> is correctly reduced to just
>> 2
>>
>> My problem is that the assignment to #aexpr appears in the .cpp code as
>> a reference to: aexpr_AST_in, but it is never used again after it gets
>> assigned!
>>
>> The end of the case continues with assigning _retTree = _t and not my
>> new tree. The result of this is that when I examine my aexpr subtree in
>> the bexpr rule, it is the original (PLUS 2 0) tree! Not the transformed
>> one!
>
> Try using ## in stead of #aexpr. Does removing the ! from the first
> alternative work as well?
Using ## generates:
aexpr_AST = RefGenevaAST(currentAST.root);
before the actions for the rule, but neither aexpr_AST nor currentAST
are declared inside the code blocks in which they are used, and G++
complains about this.
It doesn't seem to matter if I take the ! off the production rule or not.
> Cheers,
>
> Ric
>
--
Kevin J. Cummings
kjchome at rcn.com
cummings at kjchome.homeip.net
cummings at kjc386.framingham.ma.us
Registered Linux User #1232 (http://counter.li.org)
More information about the antlr-interest
mailing list