Главная страница
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.046 c
14-1085151898
Uncle Wowa
2004-05-21 19:04
2004.06.06
Животное неизвестного вида


4-1083346254
Yus
2004-04-30 21:30
2004.06.06
Атрибуты чужего окна


3-1084784182
zolg
2004-05-17 12:56
2004.06.06
EDBEngineError: Directory is busy.


14-1084861551
anstrem
2004-05-18 10:25
2004.06.06
Есть место для программиста Delphi в Москве


14-1084753342
kaif
2004-05-17 04:22
2004.06.06
Кто читал Дарвина?