Edit: I misread the original email, but I'm still sending this because it resolves the warning given on the rule y.
Consider the input 'ba', starting with the rule start. It could parse as (y y EOF), with the first y matching B without the A, and the second matching just A. It could also parse as (y EOF), with the first y matching B and the optional A. If you mean for y to always include the A when present, you can use a syntactic predicate, which forces it to choose the second interpretation above: y : B ((A) => A)? | A; Sam -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Peter Kooiman Sent: Thursday, April 07, 2011 7:50 AM To: [email protected] Subject: [antlr-interest] Why is this ambiguous.. Hello, While working on a grammar I had something that boils down to grammar T; start: (y | y C)+ EOF; y: B (A)? | A; A : 'a'; B : 'b'; C : 'c'; This gives an expected warning on rule y, that's fine, ANTLR does the right thing and matches A greedily. However it also gives a warning on rule start: T.g:2:19: Decision can match input such as "B {EOF, B..A}" using multiple alternatives: 1, 2 As a result, alternative(s) 2 were disabled for that input I quite understand the need to left factor this, I was just wondering why ANTLR gives this warning. It must be staring me in the face but I don't see it... How is this non-deterministic on input B EOF? Is ANTLR unable to see past rule y for some reason? Thanks Peter 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.
