[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