@Override
		public Rule<T> at(final Object annotation) {
			return annotation == this.annotation
				? this
				: new Rule<>(start, alternatives, annotation);
		}
Creates a new rule object.

@param start the start symbol of the rule
@param alternatives the list of alternative rule expressions
@throws IllegalArgumentException if the given list of
        {@code alternatives} is empty
@throws NullPointerException if one of the arguments is {@code null}
jenetics.ext/src/main/java/io/jenetics/ext/grammar/Cfg.java