Try moving your | startExpr 'and' expr and | expr 'and' expr alternatives in the rules above the | startExpr '+' expr and corresponding expr alternatives. I believe they should then match first and give you the tree you expect. I'm guessing you will likely also wish to elevate the or rules as well.