[antlr-interest] BUG: Constant (literal) token is incorrectly assumed to be present in AST rewrite

Johannes Luber jaluber at gmx.de
Thu Aug 14 02:55:40 PDT 2008


Foust schrieb:
> Austin  wrote:
>> At the same time, this is pretty clearly a bug: antlr is confusing two
>> tokens that look the same, but one of which doesn't exist.
> 
> The way to do this is to create a synthetic token (called "imaginary", for
> some reason), by adding a section to your grammar just after the "options":
> 
> tokens {
> 	T_TERCIARY = '?';
> }
> 
> Then use that token in your tree output:
> 
> 	-> ^(TERCIARY logical_or expression? conditional_expr?) ;
> 
> Brent

An imaginary token is defined like

tokens {
IMAGINARY;
}

Note that no assignment to a particular input string happens - that is 
the reason why such tokens are imaginary tokens.

> 
>> -----Original Message-----
>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
>> bounces at antlr.org] On Behalf Of Austin Hastings
>> Sent: Wednesday, August 13, 2008 6:07 PM
>> To: antlr-interest
>> Subject: [antlr-interest] BUG: Constant (literal) token is incorrectly
>> assumed to be present in AST rewrite
>>
>> Howdy,
>>
>> I have a C-like grammar with this entry:
>>
>> conditional_expr
>>     : logical_or ( '?' expression ':' conditional_expr )?
>>        -> ^( '?' logical_or expression? conditional_expr?)
>>     ;
>>
>> I am using antlr v3.1. In this case, the generated code assumes that
>> the
>> rewrite-rule's '?' token is the same as the possibly-nonexistent '?' in
>> the matching rule, and tries to dereference the "stream" that would
>> contain that token, if it were present.
>>
>> In the case where no conditional expression is present, the rewrite
>> should collapse into ^( '?' logical_or )
>>
>> I suspect that there's a better way to handle this particular rewrite
>> scenario. I'd like to hear it.
>>
>> At the same time, this is pretty clearly a bug: antlr is confusing two
>> tokens that look the same, but one of which doesn't exist.
>>
>> =Austin
> 



More information about the antlr-interest mailing list