Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spz / шпори.doc
Скачиваний:
100
Добавлен:
23.02.2016
Размер:
1.56 Mб
Скачать

Програми-фільтри. (немає) Командний інтерпретатор.

Оболонкою (shell) у системі Unix називають механізм взаємодії між користувачами і системою. Це інтерпретатор команд, що зчитує набрані користувачем рядки і запускає виконання запитаних системних функцій.

(Повна командна мова багата по можливостях і досить складна, однак більшість команд прості у використанні і запам'ятати їх не важко.)

Командний рядок складається з імені команди (тобто імені виконуваного файлу), за яким стоїть список аргументів, розділених пробілами. Оболонка розбиває командний рядок на компоненти. Зазначений у команді файл завантажується, і йому забезпечується доступ до заданих в команді аргументів.

Люба командна мова сімейства Unix фактично складається з трьох частин:

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

• убудованих команд, виконуваних безпосередньо інтерпретатором командної мови;

• команд, що представляються окремими виконуваними файлами.

У свою чергу, набір команд останнього виду включає стандартні команди і команди, створені користувачами системи.

Для того щоб виконуваний файл, розроблений користувачем ОС Unix, можна було запускати як команду shell, досить визначити в одному з вихідних файлів функцію з ім'ям main. Якщо ужити як ім'я команди ім'я такого виконуваного файлу, командний інтерпретатор створить новий процес і запустить у ньому зазначену виконувану програму, починаючи з виклику функції main.

Змістовий модуль 2

Основи побудови компіляторів

Не 2.1. Загальна схема роботи компіляторів Визначення транслятора, компілятора, інтерпретатора.

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

  • Аналіз.

В процесі аналізу компілятор розбиває програму на складові елементи і створює проміжне представлення вхідної програми.

  • Синтез.

Синтезуюча частина з проміжного представлення створює нову програму, яку розуміє комп’ютер. Така програма називається об’єктною і може на далі виконуватися без пере трансляції.

Інтерпретатор – це програма, що сприймає вхідну програму і виконує її; він на відміну від компілятора не породжує об’єктну програму і ніякого проміжного коду.

Полотно 82

Недолік такого інтерпретатора в тому, що користувач повинен почекати компіляцію всієї програми перш ніж почнеться виконання програми.

Полотно 73

Компілятор.

Полотно 60

Інтерпретаторимають важливу перевагу: відкомпільований код прив’язаний до архітектури обчислювальної системи. Цей аспект не брали до уваги і тому раніше більше розвивались компілятори, тепер ситуація змінилася. З розвитком мережі Інтернет здобуває актуальність питання про переміщувальність програм і їх апаратно незалежність. Тому почали сполучати компіляцію і інтерпретацію.

Різниця між інтерпретаторами і трансляторами.

Дивись попередній пункт.

Етапи трансляції.

Полотно 50

аналіз

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

  • просто повідомлення про помилку

  • повідомлення про місце помилки і яка помилка

  • підказка що до виправлення помилки

Етапи компіляції поділяються на більш дрібні етапи, які називаються фазами компіляції. Склад фаз компіляції приведений в загальному вигляді і можуть здійснюватись розробниками.

Таблиці ідентифікаторів або таблиці символів – це організовані спеціальним чином набори даних, які служать для збереження інформації про елементи початкової програми. Таблиця може бути одна або їх може бути декілька. Елементи початкової програми, які зберігаються в таблиці ідентифікаторів може зберігати константи, змінні процедури, і не обов’язково мають бути таблиці або масиви.

На фазі лексичного аналізу розбирається вхідний ланцюжок і виділяється найбільше одиниці, тобто лексеми (ідентифікатор, ключові слова, константи, позначки операцій, розділювачі і коментарі). Також тут видаляються коментарі, і виконується обробка директив умовної компіляції. Наприклад: s:=s+d*60;

Полотно 675

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

відомі наступні основні форми внутрішнього представлення програми:

синтаксичні дерева (зв’язані облікові структури)

тетради (багато адресний код з явно іменованим результатом) операція(оп1, оп2, оп3)

тріади : операція(операнд1, операнд2) – багато адресний код з неявним результатом.

обернений або постфікс ний польський запис.

S=S-d*60  лексичний аналіз  id=id2+id3*60  синтаксичний аналіз …

Після синтаксичному аналізу вхідна програма формує деяке проміжне представлення

Семантичний аналізперевіряє крім правильності тексту вхідної програми перевіряє правильність типів даних при дотриманні визначені контексні умови, опис ідентифікатора, число і атрибути фактичних параметрів, виклику процедури повинні співпадати з визначенням цієї процедури а також виконуються додавання функцій неявного перетворення типів

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

Деякі оптимізації тривіальні, а деякі вимагають аналіз потоків керування програм і потоків даних. Найбільш розповсюджені константні обчислення, зменшення сили операцій, виділення загальних під виразів, чищення циклів, команди асемблера або проміжні команди.

Генерація коду– фаза пов’язана з породженню команд результуючого коду. Тут виконується розподіл пам’яті, тобто відображення імен, розподіл регістрів для змінних, вибір та поділ послідовності запису значень регістру для оптимального результату.

Temp1=id3*60.0

Id1=id2+temp1  генерація коду mov al,00  add ax,al mov id1,ax

Соседние файлы в папке spz