Exemple #1
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);
        }