Никто не знает как правильно вычислять область видимости переменных внутри программы.
Например, дан исходный код:
integer a = 0;
interger func1 ()
begin
b = 1;
end;
integer func2 ()
begin
end;
begin
g = 2;
end.
Как реализовать проверку области видимости?
Если делать это во время интерпретации, увеличивая с каждым блоком текущий уровень на один, то глобальная переменная a не будет видна из функции func1, т.к. уровени будут отличаться. В случае, когда уровни расставляются при семантическом анализе переменная b будет видная из функции func2, которая может следовать за func1, т.к. они будут находится на одном уровне. Можно использовать смешанный метод, но я пока не представляю как.
В красном драконе так сразу не нашел, может кто совет даст, как это делать?