Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота5.doc
Скачиваний:
1
Добавлен:
09.11.2019
Размер:
138.24 Кб
Скачать

Вимоги до оформлення звіту

Звіт повинен містити наступні розділи:

  • Завдання по лабораторній роботі.

  • Короткий виклад мети роботи.

  • Запис заданої граматики вхідної мови у формі Бекуса-наура.

  • Опис алгоритму розрахунку об'єму пам'яті для структури даних, вказаної в завданні.

  • Приклад виконання розбору простої вхідної програми (по вибору).

  • Текст програми (оформляється після виконання програми на ЕОМ).

Основні контрольні питання

  1. Що таке розподіл пам'яті? Яку роль воно грає в процесі компіляції?

  2. Для яких елементів вхідної програми виконується розподіл пам'яті?

  3. Що таке відносні адреси? У який момент і як відносні адреси перетворяться в фізичні адреси ?

  4. Які типи областей пам'яті бувають залежно від ролі і способу розподілу? Як вони можуть поєднуватися між собою?

  5. Що таке локальна і глобальна пам'ять? Як розподіляється пам'ять для аргументів і локальних змінних процедур і функцій?

  6. Що таке динамічна і статична пам'ять? Які особливості можна вказати для динамічної пам'яті, що розподіляється компілятором?

  7. Приведіть приклади локальних і глобальних, статичних і динамічних елементів пам'яті на основі відомої Вам мови програмування.

  8. Що таке скалярні типи даних? Від чого залежить об'єм пам'яті, що виділяється для скалярних типів даних?

  9. Як розраховується об'єм пам'яті для складних структур даних?

  10. Що таке «кратність розподілу пам'яті»? Для чого вона використовується?

  11. Як впливає кратність розподілу пам'яті на об'єм пам'яті, потрібної для різних структур даних? Приведіть приклади.

  12. Що таке дисплей пам'яті процедури або функції? Розкажіть про стекову організацію дисплея пам'яті.

Варіанти початкових граматик

У всіх варіантах використовується одна і та ж граматика вхідної мови. Вхідна програма є послідовністю двох блоків: перший блок – опис типів, що починається з ключового слова type, другий блок – опис змінних, що починається з ключового слова var. Опис типів і опис змінних виконується в стилі мови Pascal.

Необхідно розібрати описи всіх типів, розрахувати об'єм для кожного типу даних на основі відомих алгоритмів і розмірів скалярних типів даних, вказаних в завданні. Розрахунок треба виконати в двох випадках: з урахуванням кратності розподілу пам'яті і без нього. Потім на основі розрахованих розмірів типів даних необхідно розрахувати об'єм пам'яті, займаної всіма описаними змінними (розрахунок також повинен виконуватися в двох варіантах: з урахуванням кратності розподілу пам'яті і без нього). Результатом виконання програми повинні бути дві величини: розмір пам'яті, потрібної для всіх описаних змінних, з урахуванням кратності розподілу і той же самий розмір без урахування кратності розподілу. У всіх варіантах символ S є початковим символом граматики; L, T, R, V, K, D, F і E позначають нетермінальні символи. Термінальні символи виділені жирним шрифтом. Термінальний символ с відповідає одному з двох скалярних типів, вказаних в завданні. Термінальний символ t відповідає одному з типів даних, який може бути описаний в секції type, а термінальний символ а відповідає змінним, які можуть бути описані в секції var. Граматики в завданнях відрізняються тільки правилами для термінальних символів D, F і E, які описують варіант допустимих типів даних – можливі три варіанти: структура даних, союз (запис з варіантами) або масив.

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

Вхідна програми описується наступними правилами:

S  type L; var R;

L  T | L;T

T  t=c | t=D

R  V | R;V

V  K:t | K:c | K:D

K  a | K,a

Нижче приведені варіанти граматик для термінальних символів D, F і E. Термінальний символ d відповідає будь-якій цілочисельній константі.

1. D  record F; end 2. D  union F; end

F  E | F;E F  E | F;E E  K:c | K:t E  K:c | K:t

3. D  array [F] of c | array [F] of t

F  E | F,E

E  d..d