2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Интерпретация функций
Сообщение10.05.2012, 23:16 
Аватара пользователя
Здравствуйте.
Подскажите пожалуйста, какой можно взять встраиваемый интерпретатор, чтобы его функционала хватало чуть больше чем на то, чтобы подключать из текстового файла функцию. Просто не хочется палить в муху из базуки. Я могу выразиться некорректно, поэтому объясню на пальцах.
Есть текстовый файл, в котором описана функция, которая выглядит примерно так
Код:
real Row(int t)
{
   // ....
   return something;
}

который вызывается из скомпилированной программы, написанной на С++.

Нужно это мне для того, чтобы задавать граничные условия Дирихле и Нэймана для решения уравнения Лапласа с произвольной границей. Причем граничные условия нужно будет менять, и в функцию, записанную, грубо говоря, в блокноте, нужно передавать из программы-исполнителя определенные параметры.

Я как то имел дело с Lua, но мне кажется он слишком мощный для таких целей. Вообщем жду мудрых советов.

 
 
 
 Re: Интерпретация функций
Сообщение10.05.2012, 23:46 
А под какой операционной системой Вы этим занимаетесь?

 
 
 
 Re: Интерпретация функций
Сообщение10.05.2012, 23:50 
Аватара пользователя
Windows 7

 
 
 
 Re: Интерпретация функций
Сообщение11.05.2012, 00:15 
Windows Scripting Host позволяет писать COM-объекты на любом из поддерживаемых им языков (JScript, VBScript и т. п.). Поэтому я бы, наверное, написал функцию на JScript, зарегистрировал ее как COM-объект, ну и дергал бы из программы на C++ стандартным способом.

Вот здесь можно подробнее почитать:
WSH, Part 3: Windows Script Components. Create reusable code by writing your own COM objects in script

-- Пт май 11, 2012 01:38:48 --

(Нашел свой старый пример)

HelloServer.sct (COM-сервер):
Код:
<scriptlet>

<Registration ProgID="Hello.Hello"/>

<implements id=Automation type=Automation>
   <method name=sayHello/>
</implements>

<script language=JScript>

function sayHello()
{
    return "Hello, world!";
}

</script>
</scriptlet>


Регистрация сервера (запускать под администратором):
Код:
regsvr32 <полный путь>\HelloServer.sct


HelloClient.wsf (простой клиент на JScript):
Код:
<job id="HelloClient">
<?job debug="false"?>
<script language=JScript RUNAT=Server>

var helloObj = new ActiveXObject("Hello.Hello");
var msg = helloObj.sayHello();
WScript.Echo("helloObj.sayHello returned " + msg);
</script>
</job>

Запуск клиента:
Код:
D:\temp>cscript HelloClient.wsf
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

helloObj.sayHello returned Hello, world!

D:\temp>

 
 
 
 Re: Интерпретация функций
Сообщение11.05.2012, 19:51 
Maslov в сообщении #569548 писал(а):
Windows Scripting Host позволяет писать COM-объекты на любом из поддерживаемых им языков (JScript, VBScript и т. п.).
Следующим этапом, после освоения примера Maslov'а, может быть статья Ивана Коробко "Создаем COM-компоненты с помощью VBScript" (журнал "Системный администратор", август 2007, стр. 80-85).

 
 
 
 Re: Интерпретация функций
Сообщение11.05.2012, 22:57 
Аватара пользователя
Уже в процессе. Благодарю!

 
 
 
 Re: Интерпретация функций
Сообщение18.05.2012, 22:10 
Поражает "мудрость" советчиков.
Автор сказал, что даже lua слишком мощный. И его послали к COM-у. Мало того, что это как из BFG по мухе, да ещё "прибили" несчастного к одной никому не нужной платформе.

Встроенный интерпретатор есть смысл использовать если нужно дёргать из интерпретируемого языка код на плюсах. А тут он не к месту.
Насколько я понял, скорость тут не важна, дёргаться внешняя функция будет нечасто.
Самое простое решение: вызывать интерпретируемый код функцией system, а ответ получать через переменную окружения getenv-ом.

 
 
 
 Re: Интерпретация функций
Сообщение18.05.2012, 23:39 
2 _AliEn_: мне кажется, Lua как раз-таки вполне подойдёт, если вдруг передумаете.

wolf.ram в сообщении #573052 писал(а):
Автор сказал, что даже lua слишком мощный. И его послали к COM-у.
Тоже сильно удивило. :o

 
 
 
 Re: Интерпретация функций
Сообщение20.05.2012, 20:00 
arseniiv в сообщении #573103 писал(а):
wolf.ram в сообщении #573052 писал(а):
Автор сказал, что даже lua слишком мощный. И его послали к COM-у.
Тоже сильно удивило. :o
Взгляните на пример Maslov'а еще раз: сам "объект" - это 12 строк, из которых 11 пишутся один раз. Топикстартеру НЕ предлагали разрабатывать COM на ATL, что действительно было бы "не адекватно".

 
 
 
 Re: Интерпретация функций
Сообщение20.05.2012, 23:38 
Лично меня волнует регистрация-разрегистрация этого объекта в системе. :-) Нелокально как-то получается.

 
 
 
 Re: Интерпретация функций
Сообщение20.05.2012, 23:48 
arseniiv в сообщении #573918 писал(а):
Нелокально как-то получается.
Можно положить рядом с клиентским приложением как сам скрипт, так и батники reg.cmd/unreg.cmd: все будет почти локально.

 
 
 
 Re: Интерпретация функций
Сообщение22.05.2012, 06:41 
Погуглите на formula interpreter. Вот кое-что:

Writing a fast formula interpreter
OpenMaX formula interpreter - но это несколько специфичная штука

Наконец, самое крутое: Z-Parser
Цитата:
Z-Parser is a Dynamic Link Library (DLL) file for programmers of Windows programs. It contains two routines for processing strings with mathematical expressions based on the algorithms used in the freeware programs Z-Plot and Z-Calculate. The DLL is shipped with documentation files for the routines' interfaces and can be used freely for any purpose.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group