Russian Qt Forum

Программирование => Общий => Тема начата: kdm от Июля 07, 2010, 20:16



Название: Построение интерпретаторов, область видимости
Отправлено: kdm от Июля 07, 2010, 20:16
Никто не знает как правильно вычислять область видимости переменных внутри программы.
Например, дан исходный код:
Код:
integer a = 0;

interger func1 ()
begin
   b = 1;
end;

integer func2 ()
begin
end;

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


Название: Re: Построение интерпретаторов, область видимости
Отправлено: lit-uriy от Июля 08, 2010, 00:30
мне компиляторы писать не приходилось, но первая мысль такая:
входя в новый уровень иерархии, создавать некий список переменных. При поиске переменных смотреть сначала его, а затем списки выше по иерархии.