/// <summary> /// Adds a subrule. /// </summary> /// <param name="sr">The subrule.</param> /// <exception cref="System.ArgumentException">Thrown when the specified subrule is not associated with /// this rule.</exception> public void AddSubrule(Subrule sr) { if (sr.Rule != this) { throw new ArgumentException(HCStrings.kstidPhonSubruleError, "sr"); } m_subrules.Add(sr); }
public override bool ConstraintsEqual(Allomorph other) { Subrule otherSubrule = (Subrule)other; if (m_requiredMPRFeatures == null) { if (otherSubrule.m_requiredMPRFeatures != null) { return(false); } } else { if (!m_requiredMPRFeatures.Equals(otherSubrule.m_requiredMPRFeatures)) { return(false); } } if (m_excludedMPRFeatures == null) { if (otherSubrule.m_excludedMPRFeatures != null) { return(false); } } else { if (!m_excludedMPRFeatures.Equals(otherSubrule.m_excludedMPRFeatures)) { return(false); } } return(m_lhsTemp.Equals(otherSubrule.m_lhsTemp) && base.ConstraintsEqual(other)); }
/// <summary> /// Adds a subrule. /// </summary> /// <param name="sr">The subrule.</param> public void AddSubrule(Subrule sr) { sr.Morpheme = this; sr.Index = m_subrules.Count; m_subrules.Add(sr); }
/// <summary> /// Adds a subrule. /// </summary> /// <param name="sr">The subrule.</param> /// <exception cref="System.ArgumentException">Thrown when the specified subrule is not associated with /// this rule.</exception> public void AddSubrule(Subrule sr) { if (sr.Rule != this) throw new ArgumentException(HCStrings.kstidPhonSubruleError, "sr"); m_subrules.Add(sr); }
public void ReplaceSubrulesInParents() { Console.WriteLine($"[{Number}] Enter ReplaceSubrulesInParents"); for (int i = 0; i < Subrules.Count; i++) { Subrule sub = Subrules[i]; if (sub.Rules.All(x => x.GetType() == typeof(Rule))) { sub.Ready = true; } } if (!AlreadyReplacedSubrulesInParents && Subrules.All(x => x.Ready)) { this.AlreadyReplacedSubrulesInParents = true; Console.WriteLine($"{Number} ready"); Console.WriteLine($"[{Number}]: " + string.Join(" | ", Subrules.Select(x => x.Value))); listOfReady.Add(this); listOfReady.Sort((a, b) => a.Number.CompareTo(b.Number)); foreach (var parent in Parents) { var subrulesCount = parent.Subrules.Count; for (var parentSubIdx = 0; parentSubIdx < subrulesCount; parentSubIdx++) { if (Subrules.Count == 1) { var end = parent.Subrules[parentSubIdx].Rules.Count; for (var i = 0; i < end; i++) { if (parent.Subrules[parentSubIdx].Rules[i] == this) { var removeIndex = i; for (var j = 0; j < Subrules[0].Rules.Count; j++, i++, end++) { parent.Subrules[parentSubIdx].Rules.Insert(i + 1, Subrules[0].Rules[j]); } parent.Subrules[parentSubIdx].Rules.RemoveAt(removeIndex); i--; end--; } } } else if (Subrules.Count > 1) { var removeSubruleAfterInserting = false; var rulesInSubrule = parent.Subrules[parentSubIdx].Rules.Count; for (var ris = 0; ris < rulesInSubrule; ris++) { if (parent.Subrules[parentSubIdx].Rules[ris] == this) { foreach (var childSub in Subrules) { var insertRulesFrom = ris; var copy = parent.Subrules[parentSubIdx].Copy(); var removeIndex = ris; for (var j = 0; j < childSub.Rules.Count; j++, insertRulesFrom++) { copy.Rules.Insert(insertRulesFrom + 1, childSub.Rules[j]); } copy.Rules.RemoveAt(removeIndex); parent.Subrules.Add(copy); subrulesCount++; removeSubruleAfterInserting = true; } if (removeSubruleAfterInserting) { parent.Subrules.RemoveAt(parentSubIdx); parentSubIdx--; subrulesCount--; break; } } } } } parent.ReplaceSubrulesInParents(); } } }