crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Реализация анализатора (парсера) формул времени выполнения
AntonTatu
  опции профиля:
сообщение 4.3.2009, 17:56
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет !

Вопрос в следующем, имеется прога которая генерирует некоторую формулу (формула меняет количество своих параметров в зависимости от исходных значений в программе ), в этой же проге есть массив который использует полученную формулу в дальнейших расчетах, хочется создать из формулы dll ку и потом ее вызывать в нужном месте программы, как это сделать? С вызовом полученной dll я вроде бы разобрался, а вот как научить прогу генерить dll ку понять не могу.

ЗЫ: Какие можно использовать компилятор/линковщик (минимум занимаемого места, требуемых для работы файлов, потдержка STL требуется)

Выручайте ! :) Спасибо !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 4.3.2009, 18:31
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


SABROG, думаю твой пост не к месту. ;)

Просто есть два варианта: AntonTatu, не совсем понимает, как и что раюотает и что должно происходить или он прекрасно понимает что ему нужно, но не правильно объяснил. Надеюсь вы знаете насчет криптованных exe файлов, которые сами себя перевоссоздают, правда это относится к вирусо писательству. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 18:42
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(ViGOur @ 4.3.2009, 18:31) *
SABROG, думаю твой пост не к месту. ;)

Человеку надо генерить dll, я предложил единственно правильный способ как для linux, так для windows - кроссплатформенная компиляция (MinGW). В принципе надо всего-то сгенерить С++ файл и вызвать компилятор с параметрами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 4.3.2009, 20:25
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 4.3.2009, 18:31) *
Человеку надо генерить dll, я предложил единственно правильный способ как для linux, так для windows - кроссплатформенная компиляция (MinGW). В принципе надо всего-то сгенерить С++ файл и вызвать компилятор с параметрами.


Попробую объяснить по другому:
Во время выполнения программы из рисунка по некоему алгоритму составляется формула в конце концов принимающая вид типа:

QString str = "A+B*C+D*E+G"

переменные этой формулы (числовые значения A, B, C и т.д.) на момент компиляции программы не известны, длинна формулы (количество переменных ) то же, может быть и такой вариант: A+A+A*D*E+B+C, соответственно единственный выход (который я вижу) это:
1.Запустить программу, получить формулу
2.Загнать формулу в фунцию, создать с этой функцией C++ файл
3. Создать из этого C++ файла библиотеку dll
4. Использовать этот dll в программе
5. Получить числовой ответ

PS: Формула может быть огромна, разбирать ее на лету с помощью ну к примеру конечных автоматов нереально долго (пробовал)
Как сохранить формулу в текстовый файл (С++) проблемы нет, как использовать созданную dll вроде то же понятно (в Google есть)
Вопрос в том какой компилятор (С++) использовать ? (должен уметь STL и требовать как можно меньше файлов для запуска себя (один
экзешник и все было бы замечательно), что бы вместе со своей прогой еще и 200 мб, компилятора не таскать) , может есть где пример
вызова компилятора из командной строки очень поможет.
И еще вопрос, какие компиляторы можно использовать если я пишу софт на продажу (ну это так для общего развития) :)


Что то прочитал свой опус, наверно опять непонятно объяснил, не суть вопрос больше касается именно выбора компилятора.

Цитата(trdm @ 4.3.2009, 19:38) *
А я вообще не врубился в "генерирует формулу"....
Очень смахивает на патерн интерпретатор, название которого уже и есть решение: использовать интерпретатор и создавать не формулу,
а файло на скриптовом языке... и юзать его...
или я ничерта не понял.....
Короче, автор, используй встроенный интерпретатор.


зачем придумывать интерпритатор, если можно воспользоваться обычным вызовом dll ки, весь вопрос в том как ее правильно создавать используя сторонние компиляторы C++ из командной строки ? (так полюбому быстрее будет, а скорость в моем случае очень важна)

а пример использования файла на скриптовом языке где можно посмотреть ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 4.3.2009, 21:32
Сообщение #5


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(AntonTatu @ 4.3.2009, 20:25) *
Попробую объяснить по другому:
....поскипано....

все это крайне странно выглядит....

Цитата(ViGOur @ 4.3.2009, 21:10) *
Цитата(AntonTatu @ 4.3.2009, 21:04) *
а "скрипты генерить" это и есть QtScript ? (что почитать ?)
QtScript - для того, чтобы скрипты писать. А что они будут делать, зависит только от тебя. :)
Почитай: QtScript Module

QtScript - для того, чтобы скрипты ИСПОЛНЯТЬ.
Разница существенная. Таки как раз в скрипт можно передавать сгенеренную формулу, а на выходе получит результ её исполнения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 4.3.2009, 21:55
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


[/quote]
QtScript - для того, чтобы скрипты ИСПОЛНЯТЬ.
Разница существенная. Таки как раз в скрипт можно передавать сгенеренную формулу, а на выходе получит результ её исполнения.
[/quote]
А что по скорости выполнения ? , вот что написано у М.Шлее:

"При создании объектов функций важно учитывать то обстоятельство, что
трансляция объекта Function выполняется при каждом его использовании,
вследствие чего исполнение кода будет гораздо медленнее, чем при
исполнении обычных функций языка сценариев. "
Насколько на Ваш взгляд такая функция будет выполнятся медленнее чем скомпилированная в dll ку ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 4.3.2009, 23:10
Сообщение #7


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(AntonTatu @ 4.3.2009, 21:55) *
Цитата

QtScript - для того, чтобы скрипты ИСПОЛНЯТЬ.
Разница существенная. Таки как раз в скрипт можно передавать сгенеренную формулу, а на выходе получит результ её исполнения.

А что по скорости выполнения ? , вот что написано у М.Шлее:
"При создании объектов функций важно учитывать то обстоятельство, что
трансляция объекта Function выполняется при каждом его использовании,
вследствие чего исполнение кода будет гораздо медленнее, чем при
исполнении обычных функций языка сценариев. "
Насколько на Ваш взгляд такая функция будет выполнятся медленнее чем скомпилированная в dll ку ?

нормальное замечание. не знаю.
если верить Шлее и предположить, что трансляция - есть разбор+интерпретирование,
тогда использование QtScript может быть и не оправдано....
есть скриптовые языки у которых разделены фазы разбора+формирование байткода и интерпретация.
я так понял формула некоторое время не меняется, а входные параметры меняются.
правильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 4.3.2009, 23:42
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
нормальное замечание. не знаю.
если верить Шлее и предположить, что трансляция - есть разбор+интерпретирование,
тогда использование QtScript может быть и не оправдано....
есть скриптовые языки у которых разделены фазы разбора+формирование байткода и интерпретация.
я так понял формула некоторое время не меняется, а входные параметры меняются.
правильно?


ну в общем да, получается что то вроде цикла:
формула 1 -> фходные параметры 1
формула 1 -> фходные параметры 2
формула 1 -> фходные параметры 3
формула 1 -> фходные параметры N
формула 2 -> фходные параметры 1
формула 2 -> фходные параметры 2
формула 2 -> фходные параметры N
формула k -> фходные параметры N
формула 1 -> фходные параметры 1
формула 1 -> фходные параметры 2
формула 1 -> фходные параметры 3
и т.д.

Я в принципе уже написал вариант на Delphi, в нем для того чтобы использовать компилятор достаточно выдрать экзешник + пару дллок.., теперь переписываю под QT, а вот компилятор С++ подобрать не могу все за собой хвост тащат в энное кол во мегабайт и файлов...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AntonTatu   Реализация анализатора (парсера) формул времени выполнения   4.3.2009, 17:56
- - kuler   если в студии, то там всего лишь надо указать тип ...   4.3.2009, 18:13
- - Litkevich Yuriy   Цитата(AntonTatu @ 4.3.2009, 20:56) а вот...   4.3.2009, 18:24
- - SABROG   Можно таскать вместе с программой MinGW Зачем ...   4.3.2009, 18:26
- - ViGOur   SABROG, думаю твой пост не к месту. Просто есть ...   4.3.2009, 18:31
|- - SABROG   Цитата(ViGOur @ 4.3.2009, 18:31) SABROG, ...   4.3.2009, 18:42
|- - AntonTatu   Цитата(ViGOur @ 4.3.2009, 18:31) Человеку...   4.3.2009, 20:25
|- - trdm   Цитата(AntonTatu @ 4.3.2009, 20:25) Попро...   4.3.2009, 21:32
||- - AntonTatu   [/quote] QtScript - для того, чтобы скрипты ИСПОЛН...   4.3.2009, 21:55
||- - trdm   Цитата(AntonTatu @ 4.3.2009, 21:55) Цитат...   4.3.2009, 23:10
||- - AntonTatu   Цитатанормальное замечание. не знаю. если верить ...   4.3.2009, 23:42
|- - trdm   Цитата(AntonTatu @ 4.3.2009, 20:25) PS: Ф...   5.3.2009, 9:54
- - trdm   А я вообще не врубился в "генерирует формулу...   4.3.2009, 19:38
- - Admin   SABROG, перечитал твое сообщение, и решил извинить...   4.3.2009, 20:32
- - Litkevich Yuriy   AntonTatu, а QtScript тебе для этих целей тоже не ...   4.3.2009, 20:40
|- - AntonTatu   Цитата(Litkevich Yuriy @ 4.3.2009, 20:40)...   4.3.2009, 21:04
- - ViGOur   Цитата(AntonTatu @ 4.3.2009, 21:04) а ...   4.3.2009, 21:10
- - SABROG   Цитата(AntonTatu @ 4.3.2009, 20:25) Форму...   5.3.2009, 0:33
- - Константин   потому, что компилятор предназначен для компилиров...   5.3.2009, 0:47
- - Litkevich Yuriy   Цитата(AntonTatu @ 5.3.2009, 0:55) А что ...   5.3.2009, 8:19
|- - AntonTatu   Цитата(Litkevich Yuriy @ 5.3.2009, 8:19) ...   6.3.2009, 0:07
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 0:07) я так ...   6.3.2009, 7:52
- - BRE   Пример: array2d.h #ifndef __ARRAY2D #define __ARR...   6.3.2009, 9:29
|- - BRE   Цитата(BRE @ 6.3.2009, 9:29) Пример: arr...   6.3.2009, 10:03
|- - Гость_AntonTatu_*   ЦитатаВысокой скорости вычисления от скриптов ожид...   6.3.2009, 12:11
|- - BRE   Цитата(Гость_AntonTatu_* @ 6.3.2009, 12:1...   6.3.2009, 12:26
|- - AntonTatu   Цитата(BRE @ 6.3.2009, 12:26) Цитата(Гост...   6.3.2009, 12:34
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 12:34) все н...   6.3.2009, 12:39
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 12:34) форму...   6.3.2009, 19:05
|- - AntonTatu   ЦитатаИсходя из этого сообщения, я не представляю ...   6.3.2009, 21:19
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 21:19) Алгор...   6.3.2009, 21:31
|- - AntonTatu   Цитата(BRE @ 6.3.2009, 21:31) 4. запускае...   7.3.2009, 0:23
|- - BRE   Цитата(AntonTatu @ 7.3.2009, 0:23) подума...   7.3.2009, 10:18
|- - AntonTatu   ЦитатаКак с этим закончим, можно будет попробовать...   9.3.2009, 2:24
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 2:24) main.o...   9.3.2009, 10:27
|- - AntonTatu   ЦитатаПокажи, что сейчас получилось... Прежде вс...   9.3.2009, 13:35
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 13:35) stat...   9.3.2009, 13:50
|- - AntonTatu   Цитата(BRE @ 9.3.2009, 13:50) В исходник ...   9.3.2009, 16:06
- - trdm   Может быть ассемблер? Данные то все числовые, ком...   6.3.2009, 16:34
- - SABROG   Тогда можно глянуть на fasmlib.   6.3.2009, 17:01
- - SABROG   Я так понял, что у него проблема с тем, что в рант...   6.3.2009, 20:24
|- - BRE   Цитата(SABROG @ 6.3.2009, 20:24) Я так по...   6.3.2009, 20:44
- - Litkevich Yuriy   Цитата(AntonTatu @ 9.3.2009, 16:35) выраж...   9.3.2009, 14:03
- - SABROG   Как по скорости?   9.3.2009, 16:11
|- - AntonTatu   Цитата(SABROG @ 9.3.2009, 16:11) Как по с...   9.3.2009, 18:59
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 18:59) Цитат...   9.3.2009, 20:32
|- - AD   Цитата(BRE @ 9.3.2009, 20:32) Погонял тес...   9.3.2009, 20:36
|- - BRE   Цитата(AD @ 9.3.2009, 20:36) Цитата(BRE ...   9.3.2009, 20:46
|- - AntonTatu   Цитата(BRE @ 9.3.2009, 20:46) ..получил у...   10.3.2009, 12:49
|- - BRE   Цитата(AntonTatu @ 10.3.2009, 12:49) т.е....   10.3.2009, 20:46
|- - AntonTatu   Цитата(BRE @ 10.3.2009, 20:46) Ну барин т...   10.3.2009, 23:38
|- - BRE   Мне кажется, что логичней, если сам метод run() бу...   11.3.2009, 6:12
|- - AntonTatu   Цитата(BRE @ 11.3.2009, 6:12) Мне кажется...   11.3.2009, 11:09
|- - BRE   Цитата(AntonTatu @ 11.3.2009, 11:09) //Оч...   11.3.2009, 11:31
- - BRE   Еще небольшое уточнение, насчет операций вычитания...   9.3.2009, 17:24
- - Litkevich Yuriy   Ребята подумайте как переименовать тему, я ее чита...   9.3.2009, 20:56
- - SABROG   Цитата(BRE @ 9.3.2009, 20:46) Посмотрел. ...   10.3.2009, 20:21
- - Litkevich Yuriy   Цитата(SABROG @ 10.3.2009, 23:21) Хорошо ...   10.3.2009, 20:24
|- - SABROG   Цитата(Litkevich Yuriy @ 10.3.2009, 20:24...   10.3.2009, 20:29
- - BRE   Добавил контексты. Разбил по файлам. Кратко докуме...   11.3.2009, 21:44
- - AntonTatu   Цитата(BRE @ 11.3.2009, 21:44) Добавил ко...   11.3.2009, 21:52
- - BRE   Цитата(AntonTatu @ 11.3.2009, 21:52) ЗЫ: ...   11.3.2009, 23:17


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.1.2025, 3:45