Виконання програми - реалізація мови програмування

Розглянемо, як реалізується процес перекладу програми з мови ви­сокого рівня в таку форму, що може бути виконана-машиною (ЕОМ). Переклад програми з однієї мови на іншу називається трансляцією. Програма у своєму оригінальному вигляді називається вихідною про­грамою, а відтрансльована її версія – об'єктним кодом.

Розрізняють транслятори двох типів: інтерполятори і компілятори ( часто останній тип отоджується з трансляторами взагалі).

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

Компілятори, навпаки, призначені для формування повного завантажувального модуля по первинній програмі користувача. Це дозволяє відділити програму від середовища її розробки і в подальшому використовувати автономно.

Процес транс­ляції складається з трьох етапів - лексичного аналізу, синтаксичного аналізу і генерації коду, що виконуються елементами транслятора, які звуться лексичним аналізатором, синтаксичним аналізатором і генера­тором коду (рис. 5.6)

 

****************************

Лексичний аналіз - це процес виділення окремих символьних
рядків з тексту вихідної програми. Наприклад, символи «153» мають
інтерпретуватися транслятором не як сукупність цифр, що складаєть­
ся з одиниці, п'ятірки і трійки, а як єдине числове значення, яке дорів­
нює ста п'ятдесяти трьом

Таким чином, лексичний аналізатор символ за символом зчитує текст вихідної програми, визначаючи, які групи символів утворюють самостійні одиниці тексту. Потім ці одиниці класифікуються, щоб з'я­сувати, що вони собою являють - числа, слова, арифметичні операто­ри тощо. Як тільки одиницю тексту класифіковано, лексичний аналі­затор генерує її бітовий образ, що зветься лексемою і передає його синтаксичному аналізатору.

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

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

Об'єктний код програми, отриманий у результаті її трансляції, хоча й записаний машиною мовою, але найчастіше ще не має тієї форми, яка необхідна для виконання машиною. Однією з причин цього є те, що багато засобів програмування дозволяють розробляти програми у вигляді окремих модулів, трансльованих у різний час (це сприяє на­данню програмному забезпеченню модульної структури). Тому об'єктний код, отриманий у результаті окремого процесу трансляції, найчастіше являє собою усього лише певну складову частину програми, яка має бути пов'язана з іншими її частинами для вирішення завдань, що сто­ять перед усією системою в цілому.. Тому об'єктний код програми насправді являє собою програму машинною мовою, яка звичайно містить кілька недозволених посилань; цю програму необхідно пов'язати з іншими про­грамами, перш ніж можна буде одержати повноцінний виконуваний модуль.


Пов'язування об'єктного коду програми з іншими модулями виконує програма, яка називається редактором зв'язків. Її завдання – зв'язати між собою кілька об'єктних модулів (отриманих у результаті попередніх незалежно виконаних процедур трансляцій) програм опера­ційної системи й інше програмне забезпечення з метою одержання за­вершеного виконуваного модуля (який іноді називають завантажуваль­ним модулем), що являє собою файл, розташований у зовнішній пам'яті машини.

Нарешті, щоб виконати відтрансльовану програму, її завантажуваль­ний модуль має бути розміщено в основній пам'яті машини за допомо­гою спеціальної програми, яка називається завантажувачем). За­вантажувач звичайно є частиною програми-планувальника операційної системи. Важливість цього етапу є особливо великою в багатозадачних системах. У подібних системах будь-яка програма змушена використо­вувати пам'ять разом з іншими паралельно виконуваними процесами, причому набір паралельно виконуваних процесів змінюється при кожному виконанні програми. Тому точне розташування виділеної для пев­ної програми ділянки пам'яті залишається невідомим, аж до її виклику І на виконання. Отже, підготовка програми мовою програмування високого рівня складається з трьох послідовних етапів: трансляції, зв'язування і завантаження, як показано на рис. 5.8.

 

****************************

 

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