grammar GreedyTest; //options //{ // backtrack = true; //} start // options { backtrack = true; } : rule EOF; rule // options { backtrack = true; } : ( options{ greedy=false;} : any )+ some ; any // options { backtrack = true; } : A | B | C | D ; some // options { backtrack = true; } // : A // this works fine. : A B // this does not. why? the lookaheadset is the same: {A,B}. | B ; A: 'A'; B: 'B'; C: 'C'; D: 'D';