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)); }
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)); }
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)); }
private void SetAcceptance(DfaState dfaState, NfaState nfaState) { dfaState.IsAccepting = true; dfaState.Alias = nfaState.Alias; }
private HashSet <NfaState> GetEpsilonClosure(NfaState state) { return(Nfa.GetStates(state, trans => trans.IsEpsilon)); }
public Nfa Create(NfaState head, NfaState tail) { return(new Nfa(head, tail, this)); }