Пользовательский интерпретатор математических выражений

Мне нужно оценить большое количество выражений, содержащих переменные, и я думаю о написании небольшого специализированного интерпретатора, чтобы компиляция оставалась быстрой и маленькой. Однако у меня нет опыта в этой теме, и у меня есть несколько вопросов.

Допустим, у нас есть файл с математическими выражениями и ограниченным набором объектов. Файл может выглядеть так:

expr[x,y,z] = 2*x*y + x^2 + 28/14*z*(x*y^2 + 15*z) + ...

Я хотел бы как-то разобрать его, чтобы я мог численно оценивать выражения в моем приложении. просто вызвав функцию expr (float x, float y, float z) . Количество параметров не должно быть фиксированным (РЕДАКТИРОВАТЬ: каждое выражение будет иметь собственное определение с соответствующим количеством параметров или будет принимать массив), а вложение круглых скобок должно быть разрешено, чтобы входные файлы оставались достаточно маленькими.

Поскольку все выражения имеют полиномиальный тип, я могу думать о том, как должна выглядеть структура данных, но синтаксический анализ выглядит сложным. Я уже нашел ответы на несколько схожие вопросы здесь, по SO, например, с помощью Lua.

Самый большой вопрос, однако, заключается в том, какова будет потеря производительности при создании и вызове этих объектов по сравнению с прямой компиляцией этих выражений из автоматической сгенерированный код C.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Пожалуйста, рассмотрите приведенный выше пример expr () только как таковой. Думаю, лучший способ - иметь объекты шаблонного класса, который содержит коэффициенты и степени переменных в разреженных массивах.

11
задан bbtrb 15 July 2011 в 23:31
поделиться