Qual é a maneira mais eficiente de recalcular os atributos de uma análise do Boost Spirit com uma tabela de símbolos diferente?
Estou usando o Boost Spirit para implementar a funcionalidade em algum software que permite ao usuário inserir uma equação matemática que será aplicada repetidamente a um fluxo de entrada. Os valores do fluxo de entrada são representados como símbolos usandoboost::spirit::qi::symbols
que o usuário pode referenciar em sua equação. (por exemplo.out1 = 3 * in1 + in2
)
A análise e compilação da equação do usuário não são sensíveis ao desempenho, mas o cálculo do valor de saída é como parte de um pipeline de tempo crítico.
A maneira padrão em que o Spirit é usado na documentação é calcular a saída (atributo) de uma entrada conforme ela é analisada. No entanto, entre cada cálculo, apenas os valores dos atributos dos símbolos (out1
, in1
, etc.) terá mudado, parece que pode haver uma maneira mais eficiente de conseguir isso, talvez armazenando em cache a árvore da sintaxe abstrata da expressão e reiterando-a.
Qual é a maneira mais eficiente de recalcular o valor dessa equação (fixa), dado um novo conjunto de valores de símbolos?