private static <T> Stream<Symbol<T>> ruleSymbols(final Rule<T> rule) {
		return Stream.concat(
			Stream.of(rule.start),
			rule.alternatives.stream()
				.flatMap(expr -> expr.symbols().stream())
		);
	}
Create a grammar object with the given rules.

@param rules the rules the grammar consists of
@throws IllegalArgumentException if the list of rules is empty or there
        are duplicate rules
@throws NullPointerException if the list of rules is {@code null}
jenetics.ext/src/main/java/io/jenetics/ext/grammar/Cfg.java