Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8514
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2733
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2632
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1688
Дата выхода:29.09.2011, 15:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:290 / 170
Вопросов / ответов:1 / 1

Консультация # 184069: Здравствуйте уважаемы эксперты. Прошу написать программу по С++. Вот задание: Построить синтаксический анализатор для понятия скобки. скобки ::=квадратные|круглые|фигурные квадратные ::=[круглые фигурные]|+ круглые::=(фигурные квадратные)|- фигурные::={квадратные круглые}|0 заранее благодарен...


Консультация # 184069:

Здравствуйте уважаемы эксперты. Прошу написать программу по С++.
Вот задание:
Построить синтаксический анализатор для понятия скобки.
скобки ::=квадратные|круглые|фигурные
квадратные ::=[круглые фигурные]|+
круглые::=(фигурные квадратные)|-
фигурные::={квадратные круглые}|0

заранее благодарен

Дата отправки: 23.09.2011, 14:28
Вопрос задал: Посетитель - 381415 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Посетитель - 381415!
Предлагаю вариант с использованием конечного автомата.
Составим таблицу состояний. По строкам - состояние системы (в нашем случае, предыдущий найденный символ), по столбцам - все возможные символы (заданные грамматикой плюс один столбец под все остальные).
)(}{[]+-0конец строкидругое
начало строкиошибка1ошибка 23 ошибка4 5 6 успехошибка
(ошибка ошибка ошибка 2ошибка ошибка ошибка ошибка 6 ошибка ошибка
{ошибкаошибка ошибка ошибка 3 ошибка 4 ошибка ошибка ошибка ошибка
[ошибка 1 ошибкаошибка ошибка ошибка ошибка 5ошибка ошибка ошибка
+5 1 ошибка ошибка ошибкаошибка ошибка 5 ошибка успех ошибка
-ошибка ошибка 6 2 ошибкаошибка ошибка ошибка 6успех ошибка
0ошибка ошибка ошибка ошибка 3 4 4 ошибка ошибка успех ошибка

В ячейках прописывам следующее состояние, т.е. в данном случае это будет номер строки. Алгоритм составления такой таблицы прост: сначала рассматриваем состояние "начало строки" и прописываем переходы. Если символ в текущем состоянии допустим, то выделяем для него строку (ставим незадействованный номер строки), если нет - ошибка. Далее все созданные на первом этапе состояния надо расписать аналогично, каждое на новой строке. В процессе могут возникнуть новые состояния, их тоже надо учитывать.
Задание я поняла так:
Корректные записи:
[-0]
[(0+){+-}]
+
Некорректные:
()
{[]()}
В приложении - программа, реализующая данный алгоритм. Проверено в Visual Studio 20 05.
Удачи!

Приложение:

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 28.09.2011, 15:08
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное