public static IAutomat[] GenerateKleeneStern() { var automats = KnownAutomat.GetTypes<IKleeneStern>(); var ret = new List<IAutomat>(automats.Count()); foreach (var a in automats) ret.Add(a.KleeneStern()); return ret.ToArray(); }
public static IReverse[] GenerateDoubleReverses() { var automats = KnownAutomat.GetTypes<IReverse>(); var ret = new List<IReverse>(automats.Count()); foreach (var a in automats) ret.Add((IReverse)((IReverse)a.Reverse()).Reverse()); return ret.ToArray(); }
public static IAutomat[] GenerateComplements() { var automats = KnownAutomat.GetTypes<IComplement>(); var ret = new List<IAutomat>(automats.Count); foreach (var a in automats) ret.Add(a.Complement()); return ret.ToArray(); }
public static IAcceptWord[] GenerateConcats() { var automats = KnownAutomat.GetTypes<IConcat>(); var ret = new List<IAcceptWord>(automats.Count * automats.Count); foreach (var a1 in automats) foreach (var a2 in automats) try { ret.Add(a1.Concat(a2)); } catch (System.NotSupportedException) { } catch (System.NotImplementedException) { } return ret.ToArray(); }
public static IAutomat[] GenerateIntersects() { var automats = KnownAutomat.GetTypes<IIntersect>(); var ret = new List<IAutomat>(automats.Count() * automats.Count()); foreach (var a1 in automats) foreach (var a2 in automats) if (a1.GetType() == a2.GetType()) if (a1.SameAlphabet(a2)) try { ret.Add(a1.Intersect(a2)); } catch (System.NotImplementedException) { } return ret.ToArray(); }
public static IAcceptWord[] GenerateUnions() { var automats = KnownAutomat.GetTypes<IUnion>(); var ret = new List<IAcceptWord>(automats.Count() * automats.Count()); foreach (var a1 in automats) foreach (var a2 in automats) if (a1.GetType() == a2.GetType()) if (a1.SameAlphabet(a2)) try { ret.Add(a1.Union(a2)); } catch (System.NotImplementedException) { } catch (System.NotSupportedException) { } return ret.ToArray(); }
public static IAcceptWord[] GenerateJoins() { var automats = KnownAutomat.GetTypes<IJoin>(); var ret = new List<IAcceptWord>(automats.Count * automats.Count); foreach (var a1 in automats) foreach (var a2 in automats) if (a1.GetType() == a2.GetType()) if (!(a1 is DFA d) || a1.SameAlphabet(a2)) { try { ret.Add(a1.Join(a2)); } catch (System.NotImplementedException) { } catch (System.NotSupportedException) { } // because of SPDA } return ret.ToArray(); }