[antlr-interest] [ANTLRWorks 1.4][Code Generation] [C target] Bug??

Kevin J. Cummings cummings at kjchome.homeip.net
Wed Dec 1 08:21:19 PST 2010


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
kjchome at rcn.com
cummings at kjchome.homeip.net
cummings at kjc386.framingham.ma.us
Registered Linux User #1232 (http://counter.li.org)


More information about the antlr-interest mailing list