Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Компиляция математических выражений   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1085675140
C111
2004-05-27 20:25
2004.06.06
Вопрос


14-1085082851
DIS
2004-05-20 23:54
2004.06.06
программа либо запускается, либо не запускается


3-1084863828
AndrewK
2004-05-18 11:03
2004.06.06
Данные хранимой процедуры обрезаются в DBGrid


3-1084400450
_boba_
2004-05-13 02:20
2004.06.06
SQL запрос


3-1084539981
Kinda
2004-05-14 17:06
2004.06.06
Округление чисел