[antlr-interest] Change type of current AST

Terence Parr parrt at cs.usfca.edu
Fri Jun 6 14:46:24 PDT 2008


Oh, right.  ((Token)$tree.payload).setType(Operator) would do it.
Ter
On Jun 6, 2008, at 2:37 PM, Dimitrios Kolovos wrote:

> If I set ASTLabelType=CommonType, $tree.type = Operator; it generates
>
> if ( state.backtracking==0 ) {
>   ((CommonTree)retval.tree).type = Operator;
> }
>
> which is incorrect as CommonTree doesn't have a "type" field
>
> (without an ASTLabelType = it generates
>
> if ( state.backtracking==0 ) {
>   ((Object)retval.tree).type = Operator;
> }
>
> which is also (profoundly) incorrect
> )
>
> Cheers,
> Dimitrios
>
> Terence Parr wrote:
>> Oh, well $tree.type = foo; is what you want.
>> Ter
>> On Jun 6, 2008, at 1:50 PM, Dimitrios Kolovos wrote:
>>
>>> Thanks for your prompt reply. It seems we are getting closer (but  
>>> still no cigar :)
>>>
>>> both $tree = and $additiveExpression.tree = produce
>>>
>>> if ( state.backtracking==0 ) {
>>>  retval.tree = Operator;
>>> }
>>>
>>> which does not seem to change the type of the AST (the getType()  
>>> returns the value of a generated field named T_97). Everything  
>>> else in the grammar seems to be working fine (no warnings,  
>>> expected ASTs).
>>>
>>> Cheers,
>>> Dimitrios
>>>
>>>
>>> Terence Parr wrote:
>>>> Try $tree = or $additiveExpression.tree =  I believe.No doubt you  
>>>> are getting an error from antlr below?
>>>> Ter
>>>> On Jun 6, 2008, at 1:17 PM, Dimitrios Kolovos wrote:
>>>>
>>>>> Hi Ter,
>>>>>
>>>>> Unfortunately, that doesn't seem to work either.
>>>>>
>>>>> additiveExpression
>>>>> :    multiplicativeExpression (('+'|'-')^  
>>>>> multiplicativeExpression  
>>>>> {$additiveExpression.setType(Operator);})*
>>>>> ;
>>>>>
>>>>> in the parser grammar produces
>>>>>
>>>>> if ( state.backtracking==0 ) {
>>>>> $additiveExpression.setType(Operator);
>>>>> }
>>>>>
>>>>> in the parser class.
>>>>>
>>>>> (I'm using 3.1b in case this makes a difference.)
>>>>>
>>>>> Cheers,
>>>>> Dimitrios
>>>>>
>>>>> Terence Parr wrote:
>>>>>> Use $ not #
>>>>>> On Jun 6, 2008, at 6:27 AM, Dimitrios Kolovos wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> In ANTLR2 I was able to change the type of the current AST  
>>>>>>> like this:
>>>>>>>
>>>>>>> additiveExpression
>>>>>>> :    multiplicativeExpression ((PLUS^|MINUS^)  
>>>>>>> multiplicativeExpression  
>>>>>>> {#additiveExpression.setType(OPERATOR);})*
>>>>>>> ;
>>>>>>>
>>>>>>> but I haven't been able to find how to do the same in v3. Any  
>>>>>>> hints?
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Dimitrios
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>



More information about the antlr-interest mailing list