I have this simple grammer:
expr: factor;
factor: atom (('*' ^ | '/'^) atom)*;
atom: INT
| ':' expr;
INT: ('0'..'9')+
when I run it it says :
Decision can match input such as ‘*’ using multiple alternatives 1,2
Decision can match input such as ‘/’ using multiple alternatives 1,2
I can’t spot the ambiguity. How are the red arrows pointing ?
Any help would be appreciated.

Let’s say you want to parse the input:
The parser generated by your grammar could match this input into the following parse trees:
and:
(I omitted the colons to keep the trees more clear)
Note that what you see is just a warning. By specifically instructing ANTLR that
(('*' | '/') atom)*needs to be matched greedily, like this:the parser “knows” which alternative to take, and no warning is emitted.
EDIT
I tested the grammar with ANTLR 3.3 as follows:
And then from the command line:
which does not produce any warning (or error).