Реализация конечного автомата.
От: xobotik Россия  
Дата: 15.08.10 20:49
Оценка:
Доброй ночи!

Задача реализовать конечный автомат, так чтобы весь текст между такими скобками "(* текст *)" и сами скобки включительно заменялись на пробел, т.е. " ".
Реализация:
        public static string RemoveComments(this IEnumerable<char> elements)
        {
            int state = 0x0;
            StringBuilder sb = new StringBuilder(elements.Count());
            foreach (char element in elements)
            {
                switch (state)
                {
                    case 0x0:
                        if (element == '(')
                        {
                            state = 0x1;
                        }
                        else
                        {
                            state = 0x0;
                            sb.Append(element);
                        }
                        break;
                    case 0x1:
                        if (element == '*')
                        {
                            state = 0x2;
                        }
                        else
                        {
                            state = 0x0;
                            sb.Append('(');
                            sb.Append(element);
                        }
                        break;
                    case 0x2:
                        if (element == '*')
                        {
                            state = 0x3;
                        }
                        else
                        {
                            state = 0x2;
                        }
                        break;
                    case 0x3:
                        if (element == ')')
                        {
                            state = 0x0;
                            sb.Append(' ');
                        }
                        else
                        {
                            state = 0x3;
                        }
                        break;
                    default:
                        break;
                }
            }
            return sb.ToString();
        }

На вход подаю "(*)" метод ничего не возвращает, а должен по идеи оставить входные данные без изменения. Вопрос где ошибка?
Во всех остальных случаях, вроде как работает правильно.

Заранее спасибо
С уважением!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.