Actually you want to just stop trying to enforce this using syntax and specify the semantic rules in actions or better still in a tree walk.
So just set flags to say which things you find and check the state to see if they are illegal. But besides that this is surely: rule1: (rule2 (a | b)*)*; With a check to see that if there are any illegal combinations. Jim > -----Original Message----- > From: [email protected] [mailto:antlr-interest- > [email protected]] On Behalf Of Kevin J. Cummings > Sent: Wednesday, December 01, 2010 8: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.
