[antlr-interest] Confusion: Understanding gap or Tree Grammar Bug

Sarnath K - ERS, HCLTech k_sarnath at hcl.com
Wed Aug 25 01:43:37 PDT 2010


Hi There,

Can some1 help me with this, please? Thanks!

-----Original Message-----
From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Sarnath K - ERS, HCLTech
Sent: Friday, August 20, 2010 2:23 PM
To: antlr-interest at antlr.org
Subject: [antlr-interest] Confusion: Understanding gap or Tree Grammar Bug

Grammar to parse the "Hi" statement of this e-mail:
---------------------------------------------------
all: cM | cF | 'There';
cM: 'Chitparan'; // Sanskrit word meaning "One who inspires the mind" - Male 
cF: 'Chitpari';  // Sanskrit word meaning "One who inspires the mind" - Female 
---------------------------------------------------

Hi "all",

We are new to ANTLR and we all love this tool! Thanks to Terrence!  \__/

We are trying to write a C2C converter. 
However, we are stuck with the handling of the "block statement" in the Tree Grammar part.
Though we have a workaround, we would like to know whether this is an ANTLR bug (or) a gap in our understanding.

I have written a concise grammar that captures the problem. Kindly see the attachment.

The problem is very simple:
A compound statement is a 'statement' that starts with '{', has zero or more variable declarations, followed by zero or more 'statements' and ends with '}'
In the grammar above, 'v' stands for variable declaration, 's' stands for a statement.

When I run this project , I get the following output.
-------------------------------
Console
-------------------------------
{vs{s}}
Tree = ({ v s ({ s }) })
Tree Grammar Output =  {vs{vs} }
--------------------------------

Now look at "Tree Grammar Output". It carries over the "v" from the previous level.
However if I re-write the grammar as below, I don't have this problem.

b->'{' '}'
  | '{' v '}'
  | '{' s '}'
  | '{' v+ s+ '}'

Kindly advice me on what is the right way to do things!
Are we missing something? (like... RTFM?)

Thanks,
Best Regards,
Sarnath


More information about the antlr-interest mailing list