Я сейчас изучаю принципы языка программирования, но я не могу понять это на всю жизнь.Это не домашняя работа, а просто вопрос общей концепции.
В нашем классе мы говорили о статических цепях и дисплеях.Я думаю, что я понимаю, зачем нам это нужно.Иначе, когда у нас есть вложенные методы, мы не можем понять, о какой переменной мы говорим, когда у нас есть вложенные методы.
Мой профессор также говорил о таблице символов.Мой вопрос: для чего используется таблица символов?Как это связано со статическими цепями?
Я приведу некоторые сведения (пожалуйста, исправьте меня, если я ошибаюсь).
(я собираюсь определить несколько вещей, чтобы облегчить объяснение)
Предположим, у нас есть этот код:
main(){
int i;
int j;
int k;
a(){
int i;
int j;
innerA(){
int i = 5;
print(i);
print(j);
print(k);
}
}
b(){
...
}
...
}
И этот стек:
| innerA |
| a |
| b |
| main |
-----------
Краткое описание статических цепей в качестве переподготовки.
Статические цепочки используются, чтобы найти, какую переменную следует использовать, когда переменные переопределяются внутри внутренней функции.В показанном выше стеке каждый кадр будет иметь указатель на метод, который его содержит.Итак:
| innerA | \\ pointer to a
| a | \\ pointer to main
| b | \\ pointer to main
| main | \\ pointer to global variables
-----------
(Предполагая статическую область видимости, для динамической области видимости я думаю, что каждый кадр стека будет просто указывать на тот, что ниже него)мы выполняем print(<something>)
внутри метода innerA
, это произойдет:
currentStackframe = innerAStackFrame;
while(true){
if(<something> is declared in currentStackFrame)
print(<something>);
break;
else{
currentStackFrame = currentStackFrame.containedIn();
}
}
Быстрое обновление таблицы символов
Я не совсем уверен, чтотаблица символов предназначена для.Но вот как это выглядит:
Index is has value,
Value is reference.
__
| |
|--| --------------------------------------------------
| | --------------------> | link to next | name | type | scope level | other |
|--| --------------------------------------------------
| | |
|--| ---------------
| | |
|--| | --------------------------------------------------
| | -------> | link to next | name | type | scope level | other |
|--| --------------------------------------------------
| |
|--|
- ссылка на следующую - если более чем одна вещь имеет одинаковое хеш-значение, это ссылка
- name - имяэлемент (примеры: i, j, a, int)
- тип - что это такое (примеры: переменная, функция, параметр)
- уровень области действия - не уверен на 100%, как это определено,Я думаю, что:
- 0 будет встроенным
- 1 будет глобальным
- 2 будет основным методом
- 3 будет a и b
- 4 будет внутренним А
Просто чтобы повторить мои вопросы:
- Для чего используется таблица символов?
- Какое это имеет отношение к статическим цепям?
- Зачем нам нужны статические цепочки, поскольку информация о области видимости находится в таблице символов.