private static ISet<Nonterminal> GetNonterminals(ISet<Production> productions) {
var hs = new HashSet<Nonterminal>();
foreach (var production in productions) {
hs.Add(production.Lhs);
foreach (var word in production.Rhs) {
var nonterminal = word as Nonterminal;
if (nonterminal != null) {
hs.Add(nonterminal);
}
}
}
return hs;
}