public void Execute(params string[] parameters) { try { NamedAutomaton na = app.Storage.Table[parameters[0]]; if (na is NondeterminedFiniteAutomaton) { string tmp = "_dfa"; if (parameters.Length > 2) { tmp = ""; } app.Storage.AddAutomate(parameters[0] + tmp, AutomatonProcedures.ConvertNFAToDFA((NondeterminedFiniteAutomaton)na)); } else { Console.WriteLine("Автомат {0} уже является ДКА", parameters[0]); } } catch (IndexOutOfRangeException e) { Console.WriteLine("Слишком мало параметров команды"); } catch (KeyNotFoundException e) { Console.WriteLine("Автомата с таким именем не существует"); } catch (Exception e) { Console.WriteLine(e.Message); } }
public void Execute(params string[] parameters) { try { NamedAutomaton na = app.Storage.Table[parameters[0]]; if (na is NondeterminedFiniteAutomaton) { string tmp = "_epsno"; if (parameters.Length > 2) { tmp = ""; } app.Storage.AddAutomate(parameters[0] + tmp, ((NondeterminedFiniteAutomaton)na).GetEquivalentDeletedEpsilons()); } else { Console.WriteLine("Автомат {0} является ДКА", parameters[0]); } } catch (IndexOutOfRangeException e) { Console.WriteLine("Слишком мало параметров команды"); } catch (KeyNotFoundException e) { Console.WriteLine("Автомат {0} не существует", parameters[0]); } catch (Exception e) { Console.WriteLine(e.Message); } }
public void AddAutomate(string name, NamedAutomaton na) { if (Table.ContainsKey(name)) { Table[name] = na; } else { Table.Add(name, na); } }
/// <summary> /// Считывание автомата из файла /// </summary> /// <param name="path"></param> /// <returns></returns> /// <summary> /// Получение таблицы по автомату /// </summary> /// <param name="na"></param> /// <returns></returns> public List <string> AutomateToTable(NamedAutomaton na) { if (na is NondeterminedFiniteAutomaton) { return(Formating(NFAToTable((NondeterminedFiniteAutomaton)na))); } if (na is DeterminedFiniteAutomaton) { return(Formating(DFAToTable((DeterminedFiniteAutomaton)na))); } return(null); }
public void Execute(params string[] parameters) { try { var name = parameters[0]; var path = parameters[1]; TableToAutomateConverter ttac = new TableToAutomateConverter(); NamedAutomaton na = ttac.ReadAutomate(path); app.Storage.AddAutomate(name, na); } catch (IndexOutOfRangeException e) { Console.WriteLine("Слишком мало параметров команды"); } catch (FileNotFoundException e) { Console.WriteLine("Файл '{0}' не найден", parameters[1]); } }
/// <summary> /// Создает таблицу переходов автомата /// </summary> /// <param name="automate">Автомат</param> /// <param name="funcForNewStates">Функция, определяющая вид записи результата перехода</param> /// <param name="alphabet">Алфавит</param> /// <param name="startStates">Начальные состояния</param> /// <returns></returns> string[,] StrangeFunc(NamedAutomaton automate, Func <string, string, string> funcForNewStates, List <string> alphabet, List <string> startStates) { List <string> finalStates = new List <string>(automate.GetFinalStates()), states = new List <string>(automate.GetStates()); string[,] table = new string[states.Count + 1, alphabet.Count + 1]; string tmp; table[0, 0] = ""; for (int i = 0; i < alphabet.Count; i++) { table[0, i + 1] = alphabet[i]; } for (int i = 0; i < states.Count; i++) { table[i + 1, 0] = states[i]; } for (int i = 1; i < table.GetLength(0); i++) { for (int j = 1; j < table.GetLength(1); j++) { table[i, j] = funcForNewStates(table[i, 0], table[0, j]); } } for (int j = 1; j < table.GetLength(0); j++) { tmp = ""; if (finalStates.Contains(table[j, 0])) { tmp += " (f)"; } if (startStates.Contains(table[j, 0])) { tmp += " (s)"; } table[j, 0] += tmp; } return(table); }
public void Execute(params string[] parameters) { try { AutomateToTableConverter f = new AutomateToTableConverter(); NamedAutomaton na = app.Storage.Table[parameters[0]]; if (parameters.Length == 1) { List <string> table = f.AutomateToTable(app.Storage.Table[parameters[0]]); for (int j = 0; j < table.Count; j++) { Console.WriteLine(table[j]); } Console.WriteLine(); } if (parameters.Length == 2) { f.WriteAutomateToFile(na, parameters[0]); } } catch (IndexOutOfRangeException e) { Console.WriteLine("Слишком мало параметров команды"); } catch (KeyNotFoundException e) { Console.WriteLine("Автомат '{0}' не существует", parameters[0]); } catch (FileNotFoundException e) { Console.WriteLine("Файл '{0}' не найден", parameters[1]); } catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// Запись автомата в файл /// </summary> /// <param name="na"></param> /// <param name="path"></param> public void WriteAutomateToFile(NamedAutomaton na, string path) { File.WriteAllLines(path, AutomateToTable(na)); }