ати тільки одну програму;
· Підтримуються програми максимальною довжиною в 50 карт;
4. Компілятор з мови високого рівня з використанням Flex і Bison
Побудова компілятора з мови високого рівня (МВР), що є одним з елементів системи програмування, що утворюють в сукупності наступний технологічний конвеєр:
При цьому передбачається те, що дана система програмування працює на технологічній ЕОМ (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 0Programm startRBASE, 0Base initialization *, RBASEBase declarationRRAB, A Load addressRRAB, P Store address, D Variable value loading, 0 (0, RRAB) Load by addressB (3), 0 (RRAB) Move numveric15, RVIXReturn from programmEQU 5143PL3 2C Variable declaration with initialization PL3 Variable declaration without initializationAVariable declaration without initializationPProgramm end
Аналіз поставленого завдання
У поставленому завданню на вході в компілятор ЯВУ представлена ??програма мовою PL/I, яка виконує присвоювання однієї десяткової змінної інший через покажчик. Для цього були введені нові лексеми, відсутні в вихідному макеті:
· DECIMAL - десяткові змінні з ініціалізацією і без
· POINTER - мінлива покажчик
· BASED-змінні - змінна, що базується на даних, на які посилається покажчик, вказаний при ініціалізації
· Оператор ADDR - отримання адреси змінної
· Оператор присвоювання=- присвоювання значення однієї десяткової змінної інший
Набір нових конструкцій мови PL/I
Відповідний набір конструкцій був доданий в компілятор ЯВУ.
3. Формати оголошення змінних
3.1 Цілі десяткові змінні:
Формат: DCL lt; IPE gt; DECIMAL FIXED; або DCL lt; IPE gt; DECIMAL FIXED INIT ( lt; NUM gt;);
· lt; IPE gt;- Ім'я змінної
· lt; NUM gt;- Значення при ініціалізації, напр. 234
· Можуть бути як ініціалізувати, так і не ініціалізувати
3.2 Покажчики:
Формат: DCL lt; IPE gt; POINTER;
· lt; IPE gt;- Ім'я змінної
3.3 BASED-змінні:
Формат: DCL lt; IPE gt; DECIMAL FIXED BASED ( lt; IPE_POI gt;);
· lt; IPE gt;- Ім'я змінної
· lt; IPE_POI gt;- Ім'я змінної - покажчика
4. Формати використання операторів
4.1 Оператор присвоювання:
Формат: lt; IPE1 gt; = Lt; IPE2 gt;
· призначений для призначення нового значення змінної, ідентифікатор якої використаний в лівій частині оператора;
4.2 Оператор ADDR:
Формат: lt; IPE gt; =ADDR ( lt; IPE2 gt;);
· призначений для отримання адреси змінної, зазначеної як операнда в дужках. Мінлива lt; IPE gt; повинна мати тип POINTER;
Вхідні обмеження компілятора ЯВУ
У поставленої задачі не розглянуті наступні моменти...