AddFinalState() public method

public AddFinalState ( int>.Tuple finalState ) : void
finalState int>.Tuple
return void
        public Nfa Construct()
        {
            Nfa nfa = new Nfa();
            int i = 0;

            foreach (char c in _term)
            {
                foreach (int e in Enumerable.Range(0, _k + 1))
                {
                    nfa.AddTransition(Tuple.Create(i, e), c, Tuple.Create(i + 1, e));

                    if (e >= _k) continue;

                    // Deletion
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Any, Tuple.Create(i, e + 1));
                    // Insertion
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Epsilon, Tuple.Create(i + 1, e + 1));
                    // Substition
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Any, Tuple.Create(i + 1, e + 1));
                }

                i++;
            }

            foreach (var e in Enumerable.Range(0, _k + 1))
            {
                if (e < _k)
                    nfa.AddTransition(Tuple.Create(_term.Length, e), Nfa.Any, Tuple.Create(_term.Length, e + 1));
                nfa.AddFinalState(Tuple.Create(_term.Length, e));
            }

            return nfa;
        }
Esempio n. 2
0
        public Nfa Construct()
        {
            Nfa nfa = new Nfa();
            int i   = 0;

            foreach (char c in _term)
            {
                foreach (int e in Enumerable.Range(0, _k + 1))
                {
                    nfa.AddTransition(Tuple.Create(i, e), c, Tuple.Create(i + 1, e));

                    if (e >= _k)
                    {
                        continue;
                    }

                    // Deletion
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Any, Tuple.Create(i, e + 1));
                    // Insertion
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Epsilon, Tuple.Create(i + 1, e + 1));
                    // Substition
                    nfa.AddTransition(Tuple.Create(i, e), Nfa.Any, Tuple.Create(i + 1, e + 1));
                }

                i++;
            }

            foreach (var e in Enumerable.Range(0, _k + 1))
            {
                if (e < _k)
                {
                    nfa.AddTransition(Tuple.Create(_term.Length, e), Nfa.Any, Tuple.Create(_term.Length, e + 1));
                }
                nfa.AddFinalState(Tuple.Create(_term.Length, e));
            }

            return(nfa);
        }