Beispiel #1
0
            /// <summary>
            /// Установить входной символ
            /// </summary>
            /// <param name="input">входный символ</param>
            /// <returns></returns>
            public bool Input(TAlphabetInput input)
            {
                _currentIndex++;
                if (_sequence.Symbols.Length <= _currentIndex)
                {
                    throw new IndexOutOfRangeException("длина последовательности меньше днлины входной цепочки");
                }

                if (Equals(input, _sequence.Symbols[_currentIndex]))
                {
                    End = _currentIndex >= _sequence.Symbols.Length - 1;
                    return(true);
                }

                return(false);
            }
Beispiel #2
0
            public bool Input(TAlphabetInput alphabetInput)
            {
                if (_sequences == null)
                {
                    return(false);
                }

                _coincided.Clear();
                bool coincidedAny = false;

                for (int i = _sequences.Count - 1; i >= 0; i--)
                {
                    var sequence = _sequences[i];

                    if (sequence == null)
                    {
                        continue;
                    }

                    if (sequence.Input(alphabetInput))
                    {
                        coincidedAny = true;

                        if (sequence.End)
                        {
                            _coincided.Add(sequence.Sequence);
                            _sequences.RemoveAt(i);
                        }
                    }
                    else
                    {
                        _screenedOut.Add(sequence.Sequence);
                        _sequences.RemoveAt(i);
                    }
                }

                return(coincidedAny);
            }