Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СПО [укр. язык].DOC
Скачиваний:
21
Добавлен:
02.05.2014
Размер:
526.85 Кб
Скачать

Розбір декларативної частини програми.

Розбір виконується за допомогою LL(1)-граматики з включеними діями лексичного аналізатора.

Лекція №9. Тема 6 : Розподіл пам’яті під час виконання (прогону).

Під час прогону маємо стек часу прогону, для кожної процедури виділяється рамка. Опишемо деяку програму і покажемо стек часу прогону на різних етапах її виконання:

Program A1;

Var x,y:real;

Procedure A2;

Var a,b:integer;

Begin

{тіло процедури}

End;

Procedure A3;

Var c,d:char;

Begin

… {момент часу T5}

A2;{момент часу T6}

… {момент часу T7}

End;

Begin

… {момент часу T1}

A2; {момент часу T2}

… {момент часу T3}

A3; {момент часу T4}

End.

При прогоні в стек заноситься:

  • Локальна середа процедури, виконання якої розпочинається.

Також маємо стек-дісплей, в який заносимо посилання на рамки вложених процедур. При генерації коду:

  • Заносимо адресу теперішньої рамки в дисплей;

  • В дисплеї перейти на одну адресу нижче;

  • Прийняти цю адресу за базову, а за зміщення береться теперішнє зміщення в рамці.

В рамці :

  • Локальні дані та робочий стек – це є статична частина рамки;

  • Робочий стек має максимальну кількість комірок для виразів, тимчасових змінних в даній програмі, в нього поміщаються значення тимчасових змінних;

  • Динамічна частина – це область для статичних даних, але будується динамічно.

Під час ініціалізаціі процедури в стек часу прогону заноситься рамка, яка містить локальні дані, робочий стек , динамічну область. Після закінчення цієї процедури рамка видаляється.

Для роботи з нелокальними даними ведеться спеціальний стек – дисплей. Для коректності роботи з дисплеєм необхідна інформація про структуру всієї програми. Під час виконання потрібний зміст всіх рамок та адреси їх початку і кінця. Для динамічних даних створюється ”куча», до того ж вона і стек часу прогону ведуться назустріч, щоб віддалити момент нестачі пам’яті.

Розподіл пам’яті при наявності паралельних процесів:

  • Для кожного процесу свій стек-дисплей;

  • Стек часу прогону один для всіх процесів;

  • Повинен бути присутнім дескриптор кожної рамки;

  • Для кожного процесу необхідно зберігати структуру процедур для цього процесу.

Структури даних, які необхідні для генерації коду.

Таблиця блоків:

№блоку

Рівень вложеності

L ідентифікатора

L робочого

стеку

L динамічної

області

1

1

32

0

0

Блок – це частина програми де є опис змінних.

Рівень вложеності – збільшується на один при зустрічі слів PROCEDURE, FUNCTION, і т.п. і зменшується по останньому END процедури чи блоку.

Стек ідентифікаторів – згідно типу даних, які добавляємо в стек ідентифікаторів, а те що стоїть перед добавленням, заносимо в таблицю ідентифікаторів. Під час розбору декларативної частини для кожного опису змінної із поля L стеку ідентифікаторів таблиці блоків переноситься адреса в таблицю ідентифікаторів та L стеку ідентифікаторів збільшується на довжину значення ідентифікатора. Якщо маємо опис масиву, тоді довжина масиву сумується не до L стеку ідентифікаторів, а до L динамічної області.

Робочий стек – на початку формування коду для виразу обнуляється номер робочої комірки в робочому стекові. По закінченню розбору виразу маємо номер останньої робочої змінної. Порівнюємо з L робочого стеку в таблиці блоків і, якщо значення більше, заносимо в поле L робочого стеку кінець виразу.

Адреса часу прогону містить:

  • Тип адреси;

  • Номер блоку;

  • Зміщення в блоці.

Тип адреси містить:

  • Адресу або адресу адреси;

  • Інформацію де ця адреса (в стекові ідентифікаторів, в робочій області чи динамічній);

  • Вказує на те, що один із операндів є літерал і знаходиться по номеру блоку та зміщенню. Номер блоку береться із таблиці блоків, а зміщення – із таблиці ідентифікаторів.

Стек ділиться на три стеки:

  1. Стек знаків операцій (СЗО);

  2. Верхній стек для роботи з операндами (ВС);

  3. Нижній стек (НС).

В верхній та нижній стеки поміщаються статичні властивості операндів (СВ), які визначають:

  • Адресу часу прогону;

  • Тип даних;

  • Область дії.

Соседние файлы в предмете Системное программное обеспечение