When possible, I'd prefer us to have no exceptions thrown at all: for example, rather than throwing an exception, a rule factory can substitute an always-failing Statement for the Statement it's given to flag any errors.

In this case, we probably don't have that option.  I think a single declared exception is probably the way to go.