A typical layered grammar treats highly recursive language constructs with sophisticated priorities by explicitly encoding them in a long streak of nonterminals. A cleaner way would have been to merge all definitions into one nonterminal (or a few conceptually grouped ones) and to define priorities between them.
All rights reserved (c) Tushar Sharma 2017-23.