Изучая книгу Compiler Construction обратил внимание, на методы работы с процедурами OpenScope и CloseScope в парсере языка Oberon-0. Оттуда следовало, что в процедуре можно описать переменную, совпадающую с именем самой процедуры. Попробовал написать тестовый примерчик, скомпилировалось, более того, можно описывать переменную, совпадающую с именем модуля, внутри модуля.
Код:
MODULE TestMod3;
VAR TestMod3: INTEGER;
PROCEDURE ProcName*;
VAR ProcName: PROCEDURE;
BEGIN
ProcName;
END ProcName;
END TestMod3.
Так было задумано в описании языка?
Или это просто особенность реализации конкретного компилятора? (Если это так, то я бы назвал это багом)