Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи > Задачи на заказ
2low4...
Доброго времени суток!
Вот такая вот есть задача, надо её решить...

Во входном файле задан текст, за которым следует точка. Проверить, является ли этот текст правильной записью «формулы», где «формулы»:
<формула>:: = <цифра> | <формула> <знак><формула>)
<знак>:: =+| - |*
<цифра>:: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Решить задачу, используя рекурсию.
Входные данные находятся в файле input.txt. Файл студент формирует самостоятельно. Выходные данные на консоль и в файл output.txt.

Если там надо за как тут написано "денюжку" - не вопрос, просто хочется посмотреть как она решается, не 1 час над ней просидел...
Если что my ICQ := 262363792
klem4
Цитата
Если там надо за как тут написано "денюжку"


В конкретно этом разделе да. А вообще задача и похожие решались, поиск в помощь ...
Гость
Попробую навскидку объяснить, как это делается. Если ошибки будут, не пинайте, давно ничего подобного не писал, уж забыл много чего.

<формула>:: = <цифра> | <формула> <знак><формула>)
<знак>:: =+| - |*
<цифра>:: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Это приводится к грамматике:

F = D
F = F S F
S = +
S = -
S = *
D = 0
...
D = 9

Теперь программируем грамматику, используя функции (по одной на один нетерминальный символ):
(юзаем заранее определённые процедуры "взять токен" и "определить принадлежность нетерминальному символу", т.е. T(oken) = D, S, F и т.д.).
T - текущий токен. Конструкция T = ... означает совпадение первого токена с первым токеном соответствующего нетерминального символа.
"Ошибка" подразумевает выход из алгоритма с возвращение отрицательного результата ("не соответствует грамматике").

вот псевдокод.

F():
{
взять токен, если T=D, то D(),
иначе
если T=F, то F(),
иначе Ошибка;

взять токен, если T=S, то S(),
иначе Ошибка;
взять токен, если T=F, то F(),
иначе Ошибка;
взять токен, если T не является пустой строкой, то Ошибка, иначе - корректно.
}

D():
{
взять токен, если T<> '1' и T<>'2' ... и T<>'9', то Ошибка;
}
S():
{
взять токен, если T<>'-' и T<>'+' и T<>'*', то Ошибка.
}

Теперь просто где-нибудь в коде вызываем F() - и синтаксический анализ пошёл. Если вызов F() самого верхнего уровня вернёт true, то формула удовлетворяет грамматике.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.