[antlr-interest] Exploit ambiguity in tree rewriter

nafur nafur42 at gmail.com
Mon Jun 11 02:01:05 PDT 2012


Hi,

I asked about this ambiguity quite a while ago. Does nobody has any idea
how to do this?

Gereon

On 05/29/2012 12:48 PM, nafur wrote:
> Hi,
> 
> I'm using tree rewriters to manipulate formulas that are represented as
> ASTs. One operation I'd like to do is: "remove any identity from a
> multiplication".
> 
> The replacement rule I'm currently working with is the following:
> 
> topdown :
> 	^( MULT (before += .)* x=. (after += .)* )
> 	{ $x.has("IDENTITY") }?
> 	-> ^( MULT $before* $after* )
> ;
> 
> As you probably see, we have some ambiguity here: before and after can
> both take arbitrarily many elements. If I take an AST like
> ^( MULT A I x ), the replacement will not match. printing some debug
> output reveals, that ANTLR will only check $x.has("IDENTITY"), i.e. will
> only try to match the last element in a multiplication.
> (That is actually not a surprise, as ANTLR issues a warning...)
> 
> Is there any way to resolve this ambiguity in a way, such that I can
> match all occurrences?
> 
> Thanks,
> Gereon


More information about the antlr-interest mailing list