コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }