Example #1
0
        private string ifThen(string[] keyWords)
        {
            if (turingMachine == null)
            {
                return("Error: Необходимо сначала инициализировать машину! / if\\");
            }

            int    thenIndex;
            int    currentq     = 0;
            int    nextq        = qcount;
            int    dimension    = 1;
            string currentvalue = string.Empty;
            string nextvalue    = string.Empty;
            Moves  move         = Moves.StayHere;

            for (thenIndex = 1; thenIndex < keyWords.Length; ++thenIndex)
            {
                if (keyWords[thenIndex].Equals("then"))
                {
                    break;
                }
            }
            if (thenIndex >= keyWords.Length)
            {
                return("Error: Не найдено ключевое слово then! / if\\");
            }

            for (int i = 1; i < thenIndex; ++i)
            {
                switch (keyWords[i])
                {
                case "q":
                case "currentq":
                    if (i + 1 >= keyWords.Length)
                    {
                        return("Error: Не указано значение параметра q! / if\\");
                    }
                    if (!(int.TryParse(keyWords[i + 1], out currentq) && currentq >= 0))
                    {
                        return("Error: Значением параметра q должно быть целое положительное число или 0! / if\\");
                    }
                    if (currentq >= qcount)
                    {
                        return("Error: Значение параметра q должно быть меньше количества состояний! / if\\");
                    }

                    ++i;
                    break;

                case "v":
                case "value":
                case "currentvalue":
                    if (i + 1 >= keyWords.Length)
                    {
                        return("Error: Не указано значение параметра value! / if\\");
                    }

                    currentvalue = keyWords[i + 1];
                    ++i;
                    break;
                }
            }
            if (currentvalue.Length == 0)
            {
                return("Error: Необходимо указать value! / if\\");
            }

            for (int i = thenIndex + 1; i < keyWords.Length; ++i)
            {
                switch (keyWords[i])
                {
                case "q":
                case "nextq":
                    if (i + 1 >= keyWords.Length)
                    {
                        return("Error: Не указано значение параметра q! / then\\");
                    }
                    if (!(int.TryParse(keyWords[i + 1], out nextq) && nextq >= 0))
                    {
                        return("Error: Значением параметра q должно быть целое положительное число или 0! / then\\");
                    }
                    if (nextq >= qcount)
                    {
                        return("Error: Значение параметра q должно быть меньше количества состояний! / then\\");
                    }

                    ++i;
                    break;

                case "v":
                case "value":
                case "nextvalue":
                    if (i + 1 >= keyWords.Length)
                    {
                        return("Error: Не указано значение параметра value! / then\\");
                    }

                    nextvalue = keyWords[i + 1];
                    ++i;
                    break;

                case "d":
                case "dimension":
                    if (i + 1 >= keyWords.Length)
                    {
                        return("Error: Не указано значение параметра dimension! / then\\");
                    }
                    if (!(int.TryParse(keyWords[i + 1], out dimension) && dimension > 0 && dimension <= dimensions))
                    {
                        return("Error: Значением параметра dimension должно быть целое положительное число, которое меньше или равно dimensions! / then\\");
                    }

                    ++i;
                    break;

                case "r":
                case "right":
                case "moveright":
                    move = Moves.Right;
                    break;

                case "l":
                case "left":
                case "moveleft":
                    move = Moves.Left;
                    break;

                case "s":
                case "stop":
                    move = Moves.Stop;
                    break;
                }
            }
            if (nextvalue.Length == 0)
            {
                return("Error: Необходимо указать value! / then\\");
            }

            return(turingMachine.addCommand(currentq, currentvalue, nextq, nextvalue, dimension, move));
        }