public void FirstTask()
        {
            WorkWithFileClass    workWithFileClass    = new WorkWithFileClass();
            WorkWithConsoleClass workWithConsoleClass = new WorkWithConsoleClass();

            string   realInputFileName = Directory.GetCurrentDirectory() + "/input.txt";
            DfaClass dfaClass          = new DfaClass(workWithFileClass.ReadDfaInformationFromFile(realInputFileName));

            workWithFileClass.PrintDfaToFile(dfaClass);

            string str = workWithConsoleClass.FirstTaskConsoleInput();

            int k = 0;

            while (k < str.Length)
            {
                var maxRes = dfaClass.MaxString(str, k);
                if (maxRes.Key == true)
                {
                    workWithConsoleClass.FirstTaskConsoleOutput(str.Substring(k, maxRes.Value));
                    k += Math.Max(maxRes.Value, 1);
                }
                else
                {
                    k++;
                }
            }
        }
        public void SecondTask()
        {
            WorkWithFileClass workWithFileClass = new WorkWithFileClass();

            string[] inputFileNames = { "/kw_input.txt",              "/op_eq_input.txt",           "/op_input.txt",        "/id_input.txt",
                                        "/opening_bracket_input.txt", "/closing_bracket_input.txt", "/semicolon_input.txt", "/ws_input.txt",
                                        "/input.txt",                 "/int_input.txt",             "/str_input.txt",       "/com_input.txt" };
            var      dfaList = new List <DfaClass>();

            foreach (var elem in inputFileNames)
            {
                dfaList.Add(new DfaClass(workWithFileClass.ReadDfaInformationFromFile(Directory.GetCurrentDirectory() + elem)));
            }

            string secondTaskInputStrFileName = Directory.GetCurrentDirectory() + "/second_task_input.txt";

            string secondTaskOutputStrFileName = Directory.GetCurrentDirectory() + "/second_task_output.txt";

            workWithFileClass.MakeFileEmpty(secondTaskOutputStrFileName);

            string str = workWithFileClass.ReadFileForSecondTask(secondTaskInputStrFileName);

            int k = 0; // текущая позиция в строке

            while (k < str.Length)
            {
                //curLex??
                int curPriority    = 0;                  // текущий приоритет автомата
                int maxTokenLength = 0;                  // текущая максимальная длина токена с данной позиции
                foreach (var elem in dfaList)            // идем по всем автоматам
                {
                    var maxRes = elem.MaxString(str, k); // находим максимальный токен в данной позиции
                    if (maxRes.Key)
                    {
                        if (maxTokenLength < maxRes.Value) // если длина найденного токена больше зафиксированной ранее
                        {
                            //curLex = elem.Lex
                            curPriority    = elem.Priority; // обновляем приорит на приоритет автомата, с которым нашли такой токен
                            maxTokenLength = maxRes.Value;  // обновляем значение макисмальной длины
                        }
                        else if ((maxTokenLength == maxRes.Value) && (curPriority < elem.Priority))
                        // если найден токен уже зафиксированной длины, рассматриваем приоритет
                        // если приоритет автомата, с которым нашли данный токен, больше ранее зафиксированного
                        {
                            //curLex = elem.Lex
                            curPriority = elem.Priority; // обновляем значение приоритета
                        }
                    }
                }

                if (maxTokenLength > 0) // если найден какой-то токен
                {
                    workWithFileClass.SecondTaskFileOutput(TakeDfaNameByPriority(curPriority, dfaList), str.Substring(k, maxTokenLength),
                                                           secondTaskOutputStrFileName);
                    k += Math.Max(maxTokenLength, 1); // переходим на позицию в строке уже после найденного токена
                }
                else if (maxTokenLength == 0)
                {
                    // иначе данный символ не подходит ни одному автомату, берем следующий
                    //Console.WriteLine("The symbol " + str[k] + " does not belong to any class of tokens");
                    k++;
                }
            }
        }