Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизКомпиляция математических выражений Найти похожие ветки
← →
DelPHist © (2004-05-22 02:38) [0]В моей программе выполняется расчёт при помощи одной из формул, записанной в текстовом файле. Про конкретную формулу известно только число и тип её входных и выходных данных. Вопрос: как создать встроенный в программу компилятор этой формулы, если я, например, смогу придумать ассемблерную её реализацию?
(Интерпретация не подходит, так как полсе выбора обной из формул по ней выполняются миллионы расчётов).
Или покороче: Как в программе на Delphi динамически создать объектный код и далее использовать его в качестве процедуры или функции?
← →
Ломброзо © (2004-05-22 02:54) [1]Microsoft Script Control. Вся мощь JScript/VBScript в Ваших руках. Всякая функция после загрузки компилируется в какое-то там ихнее представление в память единожды.
Можно и Perl пришить.
Можно и интерпретатор Pascal сторонний.
← →
Ozone © (2004-05-22 08:36) [2]Обратная польская запись тебе поможет.
← →
AlexG © (2004-05-22 09:49) [3]
> Вопрос: как создать встроенный в программу компилятор этой
> формулы, если я, например, смогу придумать ассемблерную
> её реализацию?
> (Интерпретация не подходит, так как полсе выбора обной
> из формул по ней выполняются миллионы расчётов).
Построй дерево и считай, занося в листья значения.
> Как в программе на Delphi динамически создать объектный
> код и далее использовать его в качестве процедуры или функции?
Так не получится. Можно использовать метод объекта.
← →
Anatoly Podgoretsky © (2004-05-22 12:28) [4]Надо с программой поставлять компилятор, ну и бог с ним, что Борланд не позволяет это делать или писать свой компилятор Дельфи, а может не надо компилировать а перейти на интерпритароры или свой или выше рекомендованные.
← →
nikkie © (2004-05-22 13:38) [5]>Интерпретация не подходит, так как полсе выбора обной из формул по ней выполняются миллионы расчётов
может для начала все-таки провести тест с использованием интерпретатора?
нормальный интерпретатор сначала проводит единоды синтаксический разбор выражения в свою внутреннюю структуру, а потом может многократно производить по ней вычисления. так что не так уж это медленно...
на королевстве есть компонент
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=519
пример Drawing требует расчета формулы 2,3млн раз и отрабатывает за несколько секунд. мне, правда, показалось, что этот компонент несколько прихотлив к виду входного выражения. более новую его версию
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=555
я пока не пробовал.
← →
nikkie © (2004-05-22 13:40) [6]>[1] Ломброзо © (22.05.04 02:54)
>Microsoft Script Control. Вся мощь JScript/VBScript в Ваших руках. Всякая функция после загрузки компилируется в какое-то там ихнее представление в память единожды.
мне кажется, что быстрее это не будет. хотя, конечно, надо тестировать.
← →
vertal © (2004-05-22 15:48) [7]>> Как в программе на Delphi динамически создать объектный
>> код и далее использовать его в качестве процедуры или функции?
> Так не получится. Можно использовать метод объекта.
Почему не получится?
Type
My_Funtion(InputArg:Double):Double;
Var
p:Pointer;
Procedure My_Funtion2(...,Const P:pointer);
Begin
...
My_Funtion(p)(x);
End;
...
Здесь компиляция выражения и запись машинного кода в область памяти , на которую указавает p
My_Function2(...,p);
А вообще я где-то видел компиляторы математических выражений в runtime на Delphi
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c