public MetaGrammar(Type grammarType)
{
var grammarAttribute = grammarType.GetCustomAttribute<GrammarAttribute>();
if (!IsGrammarType(grammarType))
throw new ArgumentException("Type should be a grammar type, i.e. a subclass of Grammar with GrammarAttribute", "type");
this.GrammarType = grammarType;
this.GrammarAttribute = grammarAttribute;
this.DomainType = grammarAttribute.DomainType;
MetaFormatters = Util.CreateAndGetReadonlyCollection(out metaFormatters);
}