internal ICollection<Production> ProductionsProductingTerminal(Terminal terminal) { ICollection<Production> result; if (!_reverseTerminalProductions.Value.TryGetValue(terminal, out result)) { result = new Collection<Production>(); } return result; }
public static Terminal Of(string v) { Terminal terminal; if (!_history.TryGetValue(v, out terminal)) { terminal = new Terminal(v); _history[v] = terminal; } return terminal; }
public Production NextCNFTerminalProduction(int numNonterminals, IList<Terminal> terminals, Terminal rhs = null) { if (rhs == null) { rhs = RandomTerminal(terminals); } var lhs = RandomNonterminal(numNonterminals); return new Production(lhs, new Sentence { rhs }); }