Міністерство освіти і науки, молоді та спорту України
Кіровоградський національний технічний університет
Методичні вказівки до виконання
самостійних робіт з курсу
«Системне програмне забезпечення»
Напрям підготовки – 050102 Комп’ютерна інженерія
Освітньо – кваліфікаційний рівень – бакалавр
Факультет механіко-технологічний
Кафедра програмного забезпечення
Курс – четвертий
Семестр 7,8
Укладач: викладач Бісюк В.А.
Кіровоград 2012
СРС № 1.
Тема: Основи процесу компіляції.
Завдання: Описати типову структуру компілятора, транслятора та інтерпретатора. Визначити мови програмування різних рівнів. Дослідити сучасні середовища програмування.
Компілятор (англ. Compiler від англ. to compile збирати в ціле) - комп'ютерна програма (або набір к. програм), що перетворює (компілює) програмний код, написаний певною мовою програмування (мова джерела, англ. source language), на семантично еквівалентний код в іншій мові програмування (мова цілі, англ. target language), який, як правило, необхідний для виконання програми машиною, наприклад, комп'ютером.
Коротко компілятор можна визначити, як програму або технічний засіб, що виконує компіляцію.
Історично компілятором називалась програма що зв'язувала підпрограми, чим й зумовлено походження слова. Сьогодні це завдання виконує компонувальник.
Для виконання програма не завжди повинна бути перекладена компілятором, існує також інший принцип: покрокове виконання програмних інструкцій інтерпретатором.
Історія розвитку
Перші компілятори з'явилися на початку 50-х років. Відтоді теорія і техніка побудови компіляторів істотно розвилися. Тоді ж велись інтенсивні наукові дослідження та утворювались групи та комітети з розробки універсальної проміжної мови. Однак їхня діяльність великого "індустріального" успіху не мала.
Компілятор – це програма, що читає програму записану початковою мовою і записує цільовою мовою. Цей процес називають компіляцією (трансляцією, перекладом). Він складається з двох частин
Аналіз (parsing) – розбиття початкової програми на складові частини та створення проміжного представлення
Синтез – побудова цільової програми з проміжного представлення
Початкова мова визначається її синтаксисом – описом того, з яких конструкцій складається мова, та семантикою – набором правил, що визначають суть цих конструкцій.
Фази компіляції
Концептуально компілятор працює фазово, в процесі кожної фази відбувається перетворення початкової програми з одного представлення до іншого. На практиці фази можуть об'єднуватись і деякі проміжні представлення можуть не будуватись в явному вигляді. Типове розбиття компілятора на фази:
Лексичний аналізатор
Синтаксичний аналізатор
Семантичний аналізатор
Генератор проміжного коду
Оптимізатор
Генератор цільового коду
Аналіз (розбір)
Лексичний розбір
Лексичний розбір виділяють для спрощення побудови компілятора. Це лінійне сканування вхідної програми, при якому символи групуються в токени - послідовності символів, що мають певне сукупне значення. Наступний рядок мовою Паскаль
len := 3.14 * r;
складається з наступних токенів
Ідентифікатор len
Символ присвоєння :=
Числова стала 3.14
Знак множення *
Ідентифікатор r
Роздільник операторів ;
Синтаксичний аналіз
Послідовність машинних символів, що утворюють токен, називають лексемою токена. Токени мають тип (наприклад, ідентифікатор, числова стала — це типи токенів). Деякі токени мають лексичне значення (наприклад, значення числової чи рядкової константи утвореної з лексеми токена). Задача лексичного аналізатора – виокремити лексеми токенів і повідомити синтаксичний аналізатор про тип токена та його лексичне значення.
Ієрархічний аналіз називається розбором (англ. parsing) чи синтаксичним аналізом, у ході якого відбувається групування токенів програми. В синтаксичному аналізі символом називають токени (термінали) та групи токенів об'єднаних у логічне ціле в процесі аналізу (нетермінали).
Синтаксис звичайно визначається контекстно-незалежною граматикою, що складається з символів – терміналів та нетерміналів, стартового с...