Я беру принципы курса языков программирования прямо сейчас, но я не могу ни за что в жизни понять это. Это не домашняя работа просто общий вопрос о понятии.
В нашем классе мы говорили о статических цепочках и дисплеях. Я думаю, что понимаю, почему нам нужны они. Иначе, когда мы вложили методы, мы не можем выяснить, какая переменная мы говорим о том, когда мы вложили методы.
Мой профессор также говорил о таблице символов. Мой вопрос - то, для чего используется таблица символов? Как это касается статических цепочек?
Я дам некоторый фон (исправьте меня, если я неправ).
(Я собираюсь определить несколько вещей только для создания объяснений легче),
Предположим, что у нас есть этот код:
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 |
|--| --------------------------------------------------
| |
|--|
Только вновь заявить о моих вопросах: