Розробка елементів навчальної системи програмування
1. Розробка макета навчальної системи програмування
Побудова компілятора з мови високого рівня (МВР), що є одним з елементів системи програмування, що утворюють в сукупності наступний технологічний конвеєр:
При цьому передбачається те, що дана система програмування працює на технологічній ЕОМ (IBM PC) і є по суті крос-системою для об'єктної ЕОМ (ЄС ЕОМ). У цій системі:
· в якості мови високого рівня (МВР) вибрана мова, утворений з підмножини мовних конструкцій ПЛ1, а вихідна програма готується у вигляді текстового файлу технологічної ЕОМ з розширенням * .pli;
· мову Асемблер сформований з мовних конструкцій Асемблер ЄС ЕОМ, а ассемблеровскій еквівалент вихідної програми формується у вигляді текстового файлу технологічної ЕОМ з розширенням * .ass;
· об'єктний еквівалент вихідної програми готується у форматі об'єктних файлів операційної системи ОС ЄС ЕОМ і зберігається у вигляді довічного файлу технологічної ЕОМ з розширенням * .tex;
· завантажувальний еквівалент вихідної програми являє собою машинний код ЄС ЕОМ, запам'ятовується в області ОЗУ технологічної ЕОМ, що є зоною завантаження для емулятора об'єктної ЕОМ.
Постановка завдання
Необхідно виконати доробку елементів макету навчальної системи програмування до рівня, що дозволяє обробляти нові для макета конструкції мови високого рівня, застосовані у відповідному варіанті:
Де на вході є текст програми на ЯВУ PL/I:
EX04: PROC OPTIONS (MAIN); A DECIMAL FIXED INIT (2); B DECIMAL FIXED; P POINTER; D DECIMAL FIXED BASED (P);=ADDR (A);=D; EX04;
На виході будується еквівалент програми на асемблері архітектури IBM 370:
EX04START 0 RBASE, 0 *, RBASE RRAB, A RRAB, P, D, 0 (0, RRAB) B (3), 0 (RRAB) 15,14PL3 2C PL3APEQU 155EX04
Аналіз поставленого завдання
У поставленому завданню на вході в компілятор ЯВУ представлена ??програма мовою PL/I, яка виконує присвоювання однієї десяткової змінної інший через покажчик. Для цього були введені нові лексеми, відсутні в вихідному макеті:
· DECIMAL - десяткові змінні з ініціалізацією і без
· POINTER - мінлива покажчик
· BASED-змінні - змінна, що базується на даних, на які посилається покажчик, вказаний при ініціалізації
· Оператор ADDR - отримання адреси змінної
· Оператор присвоювання=- присвоювання значення однієї десяткової змінної інший
Набір нових конструкцій мови PL/I
Відповідний набір конструкцій був доданий в компілятор ЯВУ.
1. Формати оголошення змінних
1.1 Цілі десяткові змінні:
Формат: DCL lt; IPE gt; DECIMAL FIXED; або DCL lt; IPE gt; DECIMAL FIXED INIT ( lt; NUM gt;);
· lt; IPE gt;- Ім'я змінної
· lt; NUM gt;- Значення при ініціалізації, напр. 234
· Можуть бути як ініціалізувати, так і не ініціалізувати
Покажчики
Формат: DCL lt; IPE gt; POINTER;
· lt; IPE gt;- Ім'я переменнойпеременние:
Формат: DCL lt; IPE gt; DECIMAL FIXED BASED ( lt; IPE_POI gt;);
· lt; IPE gt;- Ім'я змінної
· lt; IPE_POI gt;- Ім'я змінної - покажчика
2. Формати використання операторів
2.1 Оператор присвоювання:
Формат: lt; IPE1 gt; = Lt; IPE2 gt;
· призначений для призначення нового значення змінної, ідентифікатор якої використаний в лівій частині оператора;
2.2 Оператор ADDR:
Формат: lt; IPE gt; =ADDR ( lt; IPE2 gt;);
· призначений для отримання адреси змінної, зазначеної як операнда в дужках. Мінлива lt; IPE gt; повинна мати тип POINTER;
Вхідні обмеження компілятора ЯВУ
У поставленої задачі не розглянуті наступні моменти:
· не описано, яким чином працювати з цілі десятковими змінними, а саме:
o не вказано знак числа,
o не зазначена довжина мантиси.
· не описано, яким ...