[antlr-interest] Tree Rewrite Issue with Negation (~)
    Foust 
    javafoust at gmail.com
       
    Wed Jul 30 17:00:10 PDT 2008
    
    
  
At 2:08 PM Gavin Lambert wrote:
> At 05:44 31/07/2008, Foust wrote:
> >Although this works (nonsense):
> >x :           ':' ( v+=(';'|'}') )* ';'  -> ^(':' $v) ;
> 
> Last time I checked, that wouldn't have worked either (= and +=
> didn't work against blocks; you had to use an extra rule). 
Yes, the content may not have all been there -- just generated the grammar
successfully (no internal error).
Page 146 of the DAR only shows an example using a single token "ids+=ID (','
ids+=ID)*", but it just seemed like a logical extension that it would work
for synthetic tokens specified as an inline union, as well. The tilde
operator is doing its job on the union of tokens -- it's just the +=
operator that's having trouble storing the result.
And that's probably what causes the internal error when a tree rewrite rule
is added, because only then is the value of $v actually used.
This seems like something that would make sense to support, although in the
mean time, a better error message would help.
> 
> Or possibly it still hasn't been fixed -- depends what definition
> of "works" you're using.  Certainly in older versions of ANTLR,
> the above would compile perfectly fine but would lead to null
> references or empty lists at runtime instead of providing the
> content you're expecting.
> 
> (And incidentally, that should have been $v* in the rewrite.)
Yes, thank you for your comments and for looking so closely.
Brent
    
    
More information about the antlr-interest
mailing list