Why the rules are separate from the parser
A change to the language is a change to the rules. A change that is a file is a change that cannot break the parser.
The one rule that must be refused
A rule that can call itself with no text consumed. That rule never answers, and never answering is caught at start.