Для тех, кому интерестно:
Где-то я уже писал:
Вот так называется захотел разнообразить прогу по численному нахождению определённого интеграла чтобы пользователю предостаивть возможность задавать функицию (на языке delphi, естественно).
Учебная задача была просто написать элементарную программку на использование цикла for ... to ...do . В качестве тренировки я выбрал приблизительое нахождение определённого интеграла самым дубовым методом (подсчета интегральной суммы). Потом мне захотелось расширить возможности программы и предоставить пользователю самому вводить не только интервал иннтегрирования и количество итераций, но и функцию. И тут-то вышла проблемка. Использование dll не помогло. О динамическом компилировании в delphi я в и-нете ничего не нашел (google). О том, что такое парсер, уважаемый ИСН, не имею ни малейшего понятия. Поэтому, раз уж никто не может настрочить текст (на delphi) для демонстративной проги (пользователь пишет функцию, а программа выводит её значение в точке, скжем 1), то прошу хоты бя посоветовать какуе-то толковую литературу по этому делу.
Всё достаточно просто.
Обозначим:
Пр - процедура анализа строки
Прf1 - процедура вычисления функции 1.
Прf2 - процедура вычисления функции f2.
и т.д.
Пример:
f1(f2)+(5+f3+f4)
Решение.
Шаг 1.
Запускаем процедуру Пр слева на право.
Она не встречает скобок, а встречает функцию f1 с аргументом в скобках.
Процедура Пр определяет этот аргумент и запускает процедуру Прf1 с аргументом f2.
Шаг 2.
Процедура Прf1 производит анализ аргумента слева направо.
Она не встретила скобок, но встретила функцию f2 без аргументов.
Поэтому она запускает процедуру Прf2.
Шаг 3.
Процедура Прf2 подсчитала числовое значение и результат передался процедуре Прf1 как аргумент в виде числа.
Шаг 4.
Процедура Прf1 подсчитала числовое значение (ч1)и результат передался процедуре Пр.
Шаг 5.
Процедура Пр заменила исходную строку строкой:
ч1+(5+f3+f4)
и видит, что это не число, поэтому она начинает заново свое действие, но уже с новой строчкой.
Шаг 6.
Процедура встречает число, но после числа другого числа не встречает, а встречает открывающуюся скобку, поэтому она игнорирует число и определяет то что в скобках.
Определив то что в скобках она запускает саму себя с аргументом, который определила.
Шаг 6.
Процедура Пр получила в качестве аргумента строку:
5+f3+f4.
Шаг 7.
Процедура Пр проигнорировала число 5 и запустила процедуру f3.
Шаг 8.
Процедура f3 получила значение ч2 и передала его процедуре Пр.
Шаг 9.
Процедура Пр получила число ч2 и преобразовала строку в новую:
5+ч2+f4.
После чего определив, что результат не равен числу, начинает заново анализировать строку.
Шаг 10.
Процедура Пр встретила чило 5 и число ч2.
Произведя сложение их она получит число ч3. После чего строка заменится на строку:
ч3+f4.
Шаг 11.
Рассуждая аналогично, получим, что процедура Пр в конце концов из строки 5+f3+f4 получит число ч4.
Это значение она передаст самой себе.
Шаг 12.
Процедура Пр сформирует строку ч1+ч4.
Определив, что это не число, она начнёт анализ сначала. И здесь,уже получит окончательный ответ в виде числа ч5.
Это и будет значением исходной функции в данной точке.
P.S.
Чтобы не запутаться, можно начать со скобок, постепенно от них избавляясь