Какой самый эффективный способ пересчитать атрибуты анализа Boost Spirit с другой таблицей символов?
Я использую Boost Spirit для реализации функциональности в некотором программном обеспечении, которое позволяет пользователю вводить математическое уравнение, которое будет неоднократно применяться к входному потоку. Значения входного потока представлены в виде символов, используяboost::spirit::qi::symbols
который пользователь может ссылаться в своем уравнении. (например.out1 = 3 * in1 + in2
)
Синтаксический анализ и компиляция уравнения пользователя не чувствительны к производительности, но вычисление его выходного значения происходит, поскольку оно является частью критичного ко времени конвейера.
Стандартным способом, которым Spirit используется в документации, является вычисление вывода (атрибута) входных данных при их анализе. Однако, как между каждым вычислением только значения атрибутов символов (out1
, in1
и т. д.) изменится, создается впечатление, что может быть более эффективный способ добиться этого, возможно, путем кэширования абстрактного синтаксического дерева выражения и повторения через него.
Какой самый эффективный способ пересчитать значение этого (фиксированного) уравнения с учетом нового набора значений символов?