private FiniteAutomate buildAnd(FiniteAutomate fa1, FiniteAutomate fa2) { FiniteAutomate fa = new FiniteAutomate(); int shift1 = fa.add(fa1); int shift2 = fa.add(fa2); fa.InitState = fa1.InitState + shift1; fa.FinStates.Add(fa2.FinStates.First() + shift2); List<int> statesToUnion = new List<int>(); statesToUnion.Add(fa1.FinStates.First() + shift1); statesToUnion.Add(fa2.InitState + shift2); fa.unionStates(statesToUnion); return fa; }
private FiniteAutomate buildOr(FiniteAutomate fa1, FiniteAutomate fa2) { FiniteAutomate fa = new FiniteAutomate(); int shift1 = fa.add(fa1); int shift2 = fa.add(fa2); fa.InitState = fa.addState(); fa.addTransition(fa.InitState, fa1.InitState+shift1, ' '); // epsilon-transition fa.addTransition(fa.InitState, fa2.InitState+shift2, ' '); fa.FinStates.Add(fa.addState()); fa.addTransition(fa1.FinStates.First() + shift1, fa.FinStates.First(), ' '); fa.addTransition(fa2.FinStates.First() + shift2, fa.FinStates.First(), ' '); return fa; }
public FiniteAutomate buildIteration(FiniteAutomate fa) { FiniteAutomate iterFA = new FiniteAutomate(); int shift = iterFA.add(fa); iterFA.InitState = iterFA.addState(); iterFA.addTransition(iterFA.InitState, fa.InitState + shift, ' '); iterFA.FinStates.Add(iterFA.addState()); iterFA.addTransition(fa.FinStates.First() + shift, iterFA.FinStates.First(), ' '); iterFA.addTransition(fa.FinStates.First() + shift, fa.InitState + shift, ' '); iterFA.addTransition(iterFA.InitState, iterFA.FinStates.First(), ' '); return iterFA; }