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);
     }
 }
Example #4
0
        /// <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]);
     }
 }
Example #6
0
        /// <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);
        }
Example #7
0
        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);
            }
        }
Example #8
0
 /// <summary>
 /// Запись автомата в файл
 /// </summary>
 /// <param name="na"></param>
 /// <param name="path"></param>
 public void WriteAutomateToFile(NamedAutomaton na, string path)
 {
     File.WriteAllLines(path, AutomateToTable(na));
 }