Пример #1
0
        /// <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);
        }
Пример #2
0
            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));
            }
Пример #3
0
		/// <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);
		}
Пример #4
0
		/// <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);
		}
Пример #5
0
 /// <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);
 }
Пример #6
0
            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();
                    }
                }
            }