you are not safe to only look at the outermost nonterminals in the production. Consider the following production:

syntax Foo ::= Exps Int "+" Int

In the case where the Exps is epsilon, "5 + 6" parses as a Foo. Then 5 is on the outside of the parse and needs to be subject to priorities.

If you're interested in the formal theory of precisely when it is necessary to perform this filter, I suggest you look at Maude's gather attribute, and when a nonterminal in a production is by default set to gather "&", which signifies that priority is irrelevant. Maude is not perfect in the regard of parsing and pretty printing, but they do get priority and associativity /exactly/ right when most parser implementations do not, in the full generality.