Пересчитываются ли формулы, представленные в синтаксическое дерево, с использованием шаблона проектирования, такого как шаблон Visitor? Как бы вы воспроизвели процесс пересчета в коде?





Вероятно, как вы говорите, можно предположить, что Excel создает набор AST, по одному для каждой независимой группы ячеек, где листья являются исходными статическими данными, а узлы являются формулами.
Затем он вычисляет результат для каждого узла с помощью алгоритма обхода дерева почтовый заказ.
Вы должны учитывать отмену листа / узла, частичный пересчет и т. д. Если я не ошибаюсь, я где-то читал, что Excel может использовать многоядерные процессоры для параллельного пересчета листа.
Are the formulas represented in an AST then recalculated using a design pattern like the Visitor pattern?
Вы думаете о устный переводчик, а не о посетителе. В то время как прогулка по деревьям с использованием посетителя может использоваться в сочетании с переводом, использование переводчика имеет здесь больше смысла (отсюда и название). То, что он делает, в основном то, что написал friol, то есть перемещается по дереву в пост-порядке и выполняет функцию, связанную с каждым узлом.
Резолвер Один была электронной таблицей, разработанной с использованием IronPython.
Его исходный код был выпущен как Таблица дирижаблей. Раньше была статья, описывающий его общий алгоритм:
Спасибо - я видел шаблон Visitor, используемый для обхода AST, и подумал, что это наиболее распространенный метод. Я проверю шаблон интерпретатора, как вы предложили.