[antlr-interest] Bug (difference) in ANTLR 3.2 tree matching.

Michael Matera mike.matera at xilinx.com
Wed Dec 9 10:50:04 PST 2009


Hi,

Today I noticed a difference in the matching behavior of the tree match
wildcard between ANTLR 3.1.1 and ANTLR 3.2.  I suspect this is a bug
because I don't see anything on the release notes that would tell me
it's a feature.  Here's the problem:

I have a simple grammar with simplified try/catch/always blocks.  I have
a tree parser rule that matches those blocks and looks like this:

testblock : ^('test' body=. failblock=. alwaysblock=.)
{
  try {
     exec(body);
  } catch (MyProgramException e) {
     exec(failblock);
  } always {
     exec(alwaysblock);
  }
}

When I updated to ANTLR 3.2 I began to notice that my 'fail' blocks were
being executed no matter what (sometimes twice).  When I dumped the
parse tree here's what I found:

(test
  (testbody (print "One"))
  (failure (print "Two"))
  (always (print "Three"))
) null

Since in my language a print statement can't fail what I expect to see
from this parse tree is:

One
Three

After upgrading to ANTLR 3.2 I see:

One
Two
Three
Three

For now I am working around the problem by using ANTLR 3.1.1 runtime
against my 3.2 generated code.  I'm not sure that's the best thing to do
but for now it's got me moving forward.

Thanks for any help you can give me!  ANTLR has made a huge impact in my
work, I really love it!

Cheers
./m


This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.




More information about the antlr-interest mailing list