Ejemplo n.º 1
0
        public Nfa OneOrMore(Nfa nfa)
        {
            NfaState head = CreateState();
            NfaState tail = CreateState();

            Transition.Create(nfa.Tail, nfa.Head);
            Transition.Create(head, nfa.Head);
            Transition.Create(nfa.Tail, tail);

            return(Create(head, tail));
        }
Ejemplo n.º 2
0
        public Nfa OneOrNothing(Nfa nfa)
        {
            if (nfa == null)
            {
                throw new ArgumentNullException("Operator [?] can't be applied without prefix", "nfa");
            }

            NfaState head = CreateState();
            NfaState tail = CreateState();

            Transition.Create(head, nfa.Head);
            Transition.Create(nfa.Tail, tail);
            Transition.Create(head, tail);

            return(Create(head, tail));
        }
Ejemplo n.º 3
0
        public Nfa Union(Nfa fst, Nfa snd)
        {
            if (fst == null)
            {
                return(snd);
            }
            if (snd == null)
            {
                return(fst);
            }

            NfaState head = CreateState();
            NfaState tail = CreateState();

            Transition.Create(head, fst.Head);
            Transition.Create(head, snd.Head);
            Transition.Create(fst.Tail, tail);
            Transition.Create(snd.Tail, tail);

            return(Create(head, tail));
        }
Ejemplo n.º 4
0
 private void SetAcceptance(DfaState dfaState, NfaState nfaState)
 {
     dfaState.IsAccepting = true;
     dfaState.Alias       = nfaState.Alias;
 }
Ejemplo n.º 5
0
 private HashSet <NfaState> GetEpsilonClosure(NfaState state)
 {
     return(Nfa.GetStates(state, trans => trans.IsEpsilon));
 }
Ejemplo n.º 6
0
 public Nfa Create(NfaState head, NfaState tail)
 {
     return(new Nfa(head, tail, this));
 }