Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1084440623
AntonVS
2004-05-13 13:30
2004.06.06
Про обновление .....


1-1085674813
Sergey
2004-05-27 20:20
2004.06.06
Удаленный файл


9-1076060971
AlexT1000
2004-02-06 12:49
2004.06.06
Исходники Castle Wolfenstain . Мож кому поможет в развитии.


14-1085135078
Murkt
2004-05-21 14:24
2004.06.06
Нужна инфа


9-1075295877
chuckloon
2004-01-28 16:17
2004.06.06
Посмотрите на мою игрулю ASTROBALL.1.3





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский