*/
public static final <T> Pattern<T> compile(final String source) throws IOException, ParseException {
if (source == null) {
throw new IllegalArgumentException("source", new NullPointerException("source"));
}
final Program<T> p = new Parser().parse(source);
assert p != null;
return new Pattern<T>(p);
}