Я как бы получил ответ на вторую часть моего вопроса, которая все еще не совсем удовлетворяет меня, потому что использование этого подхода в реальной сложной грамматике будет уродливым.Что касается первой части (ПОЧЕМУ), я до сих пор не знаю, так что больше ответов приветствуются.
В любом случае, чтобы исправить приоритет при наличии ссылочного правила, правило «notExpression» можно изменить следующим образом:
notExpression: NOT (identifier|expr);
, который производит дерево, отличное от обоих, показанных в исходном вопросе, но, по крайней мере, НЕ приобретает более высокий приоритет. Разобрать дерево