CFGLib.CFGtoCNF.UnitReplacementProductions C# (CSharp) Method

UnitReplacementProductions() private method

private UnitReplacementProductions ( Production unitProduction, Dictionary productionsByNonterminal ) : IEnumerable
unitProduction Production
productionsByNonterminal Dictionary
return IEnumerable
		private IEnumerable<Production> UnitReplacementProductions(Production unitProduction, Dictionary<Nonterminal, ICollection<Production>> productionsByNonterminal) {
			var retval = new List<Production>();

			var productions = productionsByNonterminal.LookupEnumerable((Nonterminal)unitProduction.Rhs[0]);
			var weightSum = productions.Sum((p) => p.Weight);

			foreach (var production in productions) {
				var productionProb = production.Weight / weightSum;
				var newWeight = unitProduction.Weight * productionProb;
				var newProduction = new Production(unitProduction.Lhs, production.Rhs, newWeight);
				if (newProduction.IsSelfLoop) {
					continue;
				}
				retval.Add(newProduction);
			}

			return retval;
		}