Я занимаюсь разработкой интерпретатора простого языка программирования.
- Есть древовидные динамические данные , где каждый из узлов данных имеет связанный (принадлежащий) тип-объект .
- Существует несколько видов типов - ListType, StructType и т. Д. - и один специальный - TypeRef . TypeRef содержит имя (строку), которое относится к какому-то конкретному типу.
- Существует (почти) глобальная карта (словарь) - я называю это среда - (
std::map<string, Type*>
), которая переводит имена типов в объекты типов.
Проблема в том, что может быть загружено несколько программ, и каждая из них может иметь разные типы, связанные с одинаковыми именами. Это единственное предположение лишает возможности иметь одну глобальную (статическую) среду, которая в противном случае была бы идеальным решением.
Поэтому кажется, что мне нужен (# 1) указатель на окружение в каждом объекте типа или (# 2) для выполнения каждой операции в контексте окружения (например, путем предоставления ее везде в качестве первого аргумента ).
Проблемы, которые я вижу:
(# 1) Избыточность информации, потому что все подключенные узлы данных будут иметь одинаковую среду. Среда будет отличаться только для строго отдельных данных.
(# 2) Много тривиальной передачи среды подпрограммам, запутывающим код.
Мне кажется, что эта проблема соответствует общей схеме, которую я бы назвал почти статическими данными . Есть идеи, что будет лучшим решением?