/// <summary> /// Creates new transition link between states. /// </summary> /// <param name="transition"> Finite automata transition object.</param> /// <returns></returns> public bool AddTransition(FATransition transition) { if (transition is null) { return(false); } if (this.AutomataType == FiniteAutomataType.DFA && transition.ToState.Count() > 1) { return(false); } // TR: Yapılacak geçiş, geçiş alfabesinde yoksa buradan geri dön. if (!this.Alphabet.Contains(transition.TransitionSymbol)) { return(false); throw new InvalidFALetterException(); } // TR: Geçiş daha önce tanımlanmışsa hata fırlat. bool hasTransition = this.Transitions.Any(x => x.CompareTo(transition) == 0); if (hasTransition) { return(false); throw new DuplicateFATransactionException(); } this._transitions.Add(transition); return(true); }
/// <summary> /// Creates new transition link between states. /// </summary> /// <param name="symbol">Transition Symbol</param> /// <param name="fromStateName">Where will be transited from? State Name</param> /// <param name="toStateName">Where will be transited to? State Name ( Multiple values must be separated by comma: ",")</param> /// <returns>Returns the result of add operation is success or fail.</returns> public bool AddTransition(char symbol, string fromStateName, string toStateName, int direction = -1) { string[] toStateArray = toStateName.Split(','); if (AutomataType == FiniteAutomataType.DFA && toStateArray.Length > 1) { return(false); } // TR: Yapılacak geçiş, geçiş alfabesinde yoksa buradan geri dön. if (!_alphabet.Contains(symbol)) { return(false); throw new InvalidFALetterException(); } // TR: Kaynak durumu adına göre bul. FAState fromState = this.GetStateByName(fromStateName); if (fromState == null) { return(false); } // TR: Hedef durumları adına göre bul. List <FAState> toStatesList = new List <FAState>(); foreach (string selectedState in toStateArray) { FAState toState = this.GetStateByName(selectedState); if (toState == null) { return(false); } toStatesList.Add(toState); } FATransition transitionModel = null; if (direction == 0 || direction == 1) { transitionModel = new FATransition(symbol, fromState, toStatesList, direction == 1); } else { // TR: Geçiş nesnesini oluştur. transitionModel = new FATransition(symbol, fromState, toStatesList); } // TR: Geçiş daha önce tanımlanmışsa hata fırlat. bool hasTransition = this._transitions.Any(x => x.CompareTo(transitionModel) == 0); if (hasTransition) { return(false); throw new DuplicateFATransactionException(); } this._transitions.Add(transitionModel); return(true); }