public static Nonterminal Of(string v) { Nonterminal nonterminal; if (!_history.TryGetValue(v, out nonterminal)) { nonterminal = new Nonterminal(v); _history[v] = nonterminal; } return nonterminal; }
// todo: horrible private Nonterminal GetFresh() { var originalNonterminals = _grammar.GetNonterminals(); Nonterminal result; do { result = Nonterminal.Of("X_" + _freshx); _freshx++; } while (originalNonterminals.Contains(result)); return(result); }