Я хочу генерировать деревья выражений, которые имеют «обратные» ссылки от дочернего к родительскому. Есть ли способ настроить генератор Proto или домен так, чтобы класс оболочки выражения (используя proto::extends<>
) содержит ссылку на родительское выражение?
Цель этого состоит в том, чтобы создать деревья выражений, которые кэшируют оцененные результаты, чтобы их можно было эффективно переоценивать. Моя стратегия состоит в том, чтобы обновить значения терминала, а затем пройтись по дереву, отмечая родительские узлы как «грязные», чтобы они были переоценены при оценке корневого выражения.
Техника, которую вы описываете, не может работать. Выражения строятся снизу вверх. Для выражения a + (b * c)
родительский узел (+
) не существует в то время, когда дочерний узел (b * c
) построен. Ребенок не может сохранить указатель на объект, который еще не существует.
Вы должны будете постобработать выражения, чтобы установить родительские указатели, используя преобразование или контекст.