[antlr-interest] Change type of current AST

Terence Parr parrt at cs.usfca.edu
Fri Jun 6 15:19:25 PDT 2008


ok, i'm not going to predict code anymore for you...please start  
reading the source or book or examples:

	/** A single token is the payload */
	public Token token;

try it with that field.
Ter
On Jun 6, 2008, at 3:15 PM, Dimitrios Kolovos wrote:

> Unfortunately this doesn't work as it generates
>
> if ( state.backtracking==0 ) {
>  ((Token)((CommonTree)retval.tree).payload).setType(Operator);
> }
>
> which doesn't compile as CommonTree doesn't have a payload field...
>
> Cheers,
> Dimitrios
>
> On Fri, Jun 6, 2008 at 10:46 PM, Terence Parr <parrt at cs.usfca.edu>  
> wrote:
>> 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