I'd initially write it as (b* a+ b*) and handle the error of b elements
located at both locations with a user-understandable message at a later
point. My end goal would be reducing rule1 to the following as long as it
stays unambiguous.

rule1 : (rule2 (a|b)*)*

Sam

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Kevin J. Cummings
Sent: Wednesday, December 01, 2010 10:21 AM
To: [email protected]
Subject: Re: [antlr-interest] [ANTLRWorks 1.4][Code Generation] [C target]
Bug??

On 12/01/2010 10:32 AM, Amr Muhammad wrote:
> Hello,
> 
> I have a rule like this:
> 
> version1 ---  rule1: (rule2 (a+ b* | b* a+) )* (rule2 a*)*
                       ^^^^^^^^^^^^^^^^^^^^^^^^^ Hmmm, 1 or more a followed
by 0 or more b OR zero or more b followed by
1 or more a.

What happens when there are 0 b.  Your code reduces to 1 or more a OR 1 or
more a.

I would re-write this as:

rule1: (rule2 ( (a+ b*) | (b+ a+)) )* (rule2 a*)*

as the case of just matching a+ is handled by the first alternative.

Now you need to handle the problem of the which rule2 case to match given
that the first one could be empty and you want to match the second.  I think
you need to disambiguate your grammar further.

--
Kevin J. Cummings
[email protected]
[email protected]
[email protected]
Registered Linux User #1232 (http://counter.li.org)

List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to