Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования методов трансляции.-1.pdf
Скачиваний:
5
Добавлен:
05.02.2023
Размер:
1.36 Mб
Скачать

219

Действие А3 следует видоизменить, чтобы при принятии решения о выходе учитывалось как значение частиwhile, так и управляющей переменной, причем любая из этих проверок достаточна для завершения цикла.

10.3.5.Вход и выход из блока

При входе в блок предположим, что во время предыдущего прогона получены таблицы символов и видов, дающие типы и виды всех идентификаторов. Тогда при входе в блок необходимо выполнить следующие основные действия.

Прочитать в таблице символов информацию, касающуюся блока, и связать ее с информацией включающих блоков таким образом, чтобы можно было выполнять «внешние» поиски определяющих реализаций идентификаторов.

Поместить в стек(idstack pointer). Поместить в стек (wostack pointer). Поместить в стек (block number). Все эти значения ссылаются на включающий блок и могут потребоваться вновь после того, как будет покинут блок, в который только что осуществлен вход:

Idstack pointer := 0 wostack pointer:= 0.

Генерировать код для направления DISPLAY.

BLOCK ENTRY block number.

Увеличить номер уровня блока на1. Увеличить ghn (наибольший использованный до сих пор номер блока) на 1 и присвоить это значение номеру блока.

Прочитать информацию о видах и добавить ее в таблицу видов (если язык использует сложные виды (структуры)).

При выходе из блока из блока необходимо выполнить следующие действия.

Обновить таблицу блоков, задав размер стека идентификаторов и т.п.. для покинутого блока.

Исключить информацию в таблице символов для покинутого бло-

ка.

Генерировать код для изменения дисплея:

BLOCK EXIT block number.

Удалить из стека (block number). Удалить из стека (wostack pointer). Удалить из стека (idstack pointer). Уменьшить уровень блока на 1.

Поместить результат (при необходимости) в рамку стека вызывающего блока.