2015-08-12 6 views
3

Я хочу генерировать деревья выражений, которые имеют «обратные» ссылки от дочернего к родительскому. Есть ли способ настроить генератор протонов или домен так, чтобы класс оболочки выражения (с использованием proto::extends<>) содержал ссылку на родительское выражение?Как добавить родительские ссылки в выражения Boost.Proto?

Целью этого является создание деревьев выражений, которые кэшируют оцениваемые результаты, чтобы они могли быть подвергнуты повторной оценке. Моя стратегия заключается в обновлении значений терминалов, а затем вверх по дереву, обозначающем родительские узлы как «грязные», чтобы они были переоценены при оценке корневого выражения.

ответ

3

Техника, которую вы описываете, не может работать. Выражения строятся снизу вверх. Для выражения a + (b * c) родительский узел (+) не существует во время создания дочернего узла (b * c). Ребенок не может хранить указатель на объект, который еще не существует.

Вам нужно будет обработать выражения, чтобы установить родительские указатели, используя преобразование или контекст.

+0

Спасибо! Кажется очевидным сейчас, но было меньше, пока я был потерян в мета-программировании джунглей :-) – Aaron