public Grammar(IEnumerable<Production> productions, Nonterminal start) {
_productions = new List<Production>(productions);
this.Start = start;
// if (simplify) {
SimplifyWithoutInvalidate();
//}
_table = Cache.Create(() => Helpers.BuildLookup(
() => _productions,
(p) => p.Lhs,
(p) => p,
() => (ICollection<Production>)new List<Production>(),
(x, y) => x.Add(y)
));
this.Caches.Add(_table);
BuildHelpers();
}