Мне нужно оценить большое количество выражений, содержащих переменные, и я думаю о написании небольшого настраиваемого интерпретатора, чтобы компиляция была быстрой и малой. Однако у меня нет опыта в этой теме и есть несколько вопросов.
Скажем, у нас есть файл с математическими выражениями и ограниченным набором объектов. Файл может выглядеть так:
expr[x,y,z] = 2*x*y + x^2 + 28/14*z*(x*y^2 + 15*z) + ...
Я хотел бы как-то разобрать это, чтобы я мог вычислять численные выражения в приложении
просто вызывая функцию expr(float x, float y, float z)
. Количество параметров не должно быть исправлено (EDIT: каждое выражение будет иметь собственное определение с соответствующим количеством параметров или примет массив), и вложенность скобок должна быть разрешена для того, чтобы входные файлы были достаточно малыми.
Так как выражения все полиномиального типа, я могу думать о том, как структура данных должна выглядеть, но синтаксический анализ выглядит сложным. Я уже нашел несколько ответов на несколько схожие вопросы здесь, на SO, например, используя Lua.
Самый большой вопрос, однако, заключается в том, какова будет оценка производительности при создании и вызове этих объектов по сравнению с прямой компиляцией этих выражений из автоматически сгенерированного кода C.
Спасибо заранее!
EDIT: Пожалуйста, рассмотрите пример expr()
выше только как таковой. Я думаю, лучший способ - иметь объекты шаблонного класса, которые содержат коэффициенты и степени переменных в разреженных массивах.