Главная страница
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.056 c
4-1083248401
CrazyDog
2004-04-29 18:20
2004.06.06
текст в чужом окне, но не Edit и не EM_GETSEL


1-1085568152
OlegM
2004-05-26 14:42
2004.06.06
Как убрать из строки символ перевода?


3-1084633691
Крутыш
2004-05-15 19:08
2004.06.06
Как вызвать процедуру


14-1084774103
Sergey13
2004-05-17 10:08
2004.06.06
Охота - спорт или узаконенное убийство?


1-1085373265
Robin
2004-05-24 08:34
2004.06.06
Вставить в Word картинку