Реализация анализатора (парсера) формул времени выполнения |
Здравствуйте, гость ( Вход | Регистрация )
Реализация анализатора (парсера) формул времени выполнения |
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 |
|
|
|
AntonTatu |
4.3.2009, 20:25
Сообщение
#4
|
Студент Группа: Участник Сообщений: 48 Регистрация: 27.11.2008 Пользователь №: 437 Спасибо сказали: 0 раз(а) Репутация: 0 |
Человеку надо генерить 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 мб, компилятора не таскать) , может есть где пример вызова компилятора из командной строки очень поможет. И еще вопрос, какие компиляторы можно использовать если я пишу софт на продажу (ну это так для общего развития) Что то прочитал свой опус, наверно опять непонятно объяснил, не суть вопрос больше касается именно выбора компилятора. А я вообще не врубился в "генерирует формулу".... Очень смахивает на патерн интерпретатор, название которого уже и есть решение: использовать интерпретатор и создавать не формулу, а файло на скриптовом языке... и юзать его... или я ничерта не понял..... Короче, автор, используй встроенный интерпретатор. зачем придумывать интерпритатор, если можно воспользоваться обычным вызовом dll ки, весь вопрос в том как ее правильно создавать используя сторонние компиляторы C++ из командной строки ? (так полюбому быстрее будет, а скорость в моем случае очень важна) а пример использования файла на скриптовом языке где можно посмотреть ? |
|
|
trdm |
4.3.2009, 21:32
Сообщение
#5
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Попробую объяснить по другому: ....поскипано.... все это крайне странно выглядит.... а "скрипты генерить" это и есть 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 |
Цитата 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, а вот компилятор С++ подобрать не могу все за собой хвост тащат в энное кол во мегабайт и файлов... |
|
|
Текстовая версия | Сейчас: 30.1.2025, 3:45 |