В интерпретаторе моего экспериментального языка программирования у меня есть таблица символов. Каждый символ состоит из имени и значения (значение может быть, например, типа string, int, function и т.д.).
Сначала я представлял таблицу с вектором и повторял через символы, проверяющие, установлено ли данное имя символа.
Тогда, хотя я использую карту, в моем случае map<string,symbol>
, было бы лучше, чем итерация через вектор все время , но:
Немного трудно объяснить эту часть, но я попробую.
Если переменная извлекается в первый раз в программе на моем языке, конечно, ее позиция в таблице символов должна быть найдена (с использованием вектора сейчас). Если бы я выполнял итерацию по вектору каждый раз, когда линия выполняется (думает о цикле), это было бы ужасно медленным (как это сейчас, почти так же медленно, как и пакет microsoft).
Поэтому я мог бы использовать карту для извлечения переменной: SymbolTable[ myVar.Name ]
Но подумайте о следующем: если переменная, все еще использующая вектор, будет найдена в первый раз, я могу сохранить его точное целое положение в векторе с ним. Это означает: в следующий раз, когда это необходимо, мой интерпретатор знает, что он был "кэширован" и не ищет в нем таблицу символов, но делает что-то вроде SymbolTable.at( myVar.CachedPosition )
.
Теперь мой (довольно жесткий?) вопрос:
-
Должен ли я использовать вектор для таблицы символов вместе с кэшированием положения переменной в векторе?
-
Должен ли я использовать карту? Зачем? Насколько оперативен оператор []?
-
Должен ли я использовать что-то совершенно другое?