Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Компілятор



План:


Введення

Ця стаття включає опис терміна "Компіляція";.

Компілятор - програма або технічний засіб, що виконує компіляцію. [1] [2] [3]

Компіляція - трансляція програми, складеної на вихідному мові високого рівня, в еквівалентну програму на низькорівневому мовою, близькому машинного коду ( абсолютний код, об'єктний модуль, іноді на мова асемблера). [2] [3] [4] Вхідний інформацією для компілятора ( вихідний код) є опис алгоритму або програма на проблемно-орієнтованій мові, а на виході компілятора - еквівалентне опис алгоритму на машинно-орієнтованій мові (об'єктний код). [5]

Компілювати - проводити трансляцію машинної програми з проблемно-орієнтованої мови на машинно-орієнтована мова. [3]


1. Види компіляторів [2]

  • Векторизуется. Транслює вихідний код в машинний код комп'ютерів, оснащених векторним процесором.
  • Гнучкий. Сконструйований по модульним принципом, управляється таблицями і запрограмований на мовою високого рівня або реалізований за допомогою компілятора компіляторів.
  • Діалоговий. Див: діалоговий транслятор.
  • Інкрементального. Повторно транслює фрагменти програми і доповнення до неї без перекомпіляції всієї програми.
  • Інтерпретуючий (покроковий). Послідовно виконує незалежну компіляцію кожного окремого оператора (команди) вихідної програми.
  • Компілятор компіляторів. Транслятор, що сприймає формальний опис мови програмування і генерує компілятор для цього мови.
  • Налагоджувальний. Усуває окремі види синтаксичних помилок.
  • Резидентний. Постійно знаходиться в оперативній пам'яті і доступний для повторного використання багатьма завданнями.
  • Самокомпіліруемий. Написаний на тій же мові, з якого здійснюється трансляція.
  • Універсальний. Заснований на формальному описі синтаксису і семантики вхідної мови. Складовими частинами такого компілятора є: ядро, синтаксичний і семантичний завантажувачі.

2. Види компіляції [2]

  • Пакетна. Компіляція декількох вихідних модулів в одному пункті завдання.
  • Построчная. Те ж, що і інтерпретація.
  • Умовна. Компіляція, при якій трансльований текст залежить від умов, заданих в вихідній програмі директивами компілятора. Так, в залежності від значення деякої константи, можна включати або вимикати трансляцію частини тексту програми.

3. Основи

Більшість компіляторів переводить програму з деякого високорівневого мови програмування в машинний код, який може бути безпосередньо виконаний процесором. Як правило, цей код також орієнтований на виконання в середовищі конкретної операційної системи, оскільки використовує надані нею можливості ( системні виклики, бібліотеки функцій). Архітектура (набір програмно-апаратних засобів), для якої проводиться компіляція, називається цільової машиною.

Деякі компілятори переводять програму з мови високого рівня не прямо в машинний код, а на мова асемблера. Результатом роботи інших компіляторів є програма на спеціально створеному низькорівневому мовою, підметі інтерпретації віртуальною машиною. Така мова називається псевдокоду або байт-кодом. Як правило, він не є машинним кодом якогось комп'ютера і програми на ньому можуть виконуватися на різних архітектурах, де є відповідна віртуальна машина, але в деяких випадках створюються апаратні платформи, безпосередньо підтримують псевдокод-якої мови. Наприклад, псевдокод мови Java називається байт-кодом Java ( англ. Java bytecode ) І виконується в Java Virtual Machine, для його прямого виконання була створена специфікація процесора picoJava. Для платформи . NET Framework псевдокод називається Common Intermediate Language (CIL), а середа виконання - Common Language Runtime (CLR).

Віртуальна машина може відразу інтерпретувати псевдокод, або транслювати його в машинний код безпосередньо перед виконанням. Останнє називається динамічною або JIT-компіляцією. CIL-код також компілюється в код цільової машини JIT-компілятором, а бібліотеки . NET Framework компілюються заздалегідь.

Для кожної цільової машини ( IBM, Apple, Sun і т. д.) і кожної операційної системи або сімейства операційних систем, що працюють на цільовій машині, потрібно написання свого компілятора. Існують також так звані крос-компілятори, що дозволяють на одній машині і в середовищі однієї ОС генерувати код, призначений для виконання на інший цільовій машині і / або в середовищі іншої ОС. Крім того, компілятори можуть оптимізувати код під різні моделі з одного сімейства процесорів (шляхом підтримки специфічних для цих моделей особливостей або розширень наборів інструкцій). Наприклад, код, скомпільований під процесори сімейства Pentium, може враховувати особливості розпаралелювання інструкцій і використовувати їх специфічні розширення - MMX, SSE і т. п.

Існують програми, які вирішують зворотну задачу - переклад програми з низькорівневого мови на високорівнева. Цей процес називають декомпіляцією, а такі програми - декомпіляторамі. Але оскільки компіляція - це процес з втратами, точно відновити вихідний код, скажімо, на C + +, в загальному випадку неможливо. Більш ефективно декомпіліруются програми в байт-коди - наприклад, існує досить надійний декомпілятор для Flash. Різновидом декомпіляції є дізассемблірованіе машинного коду в код на мові асемблера, який майже завжди виконується успішно (при цьому складність може представляти самомодифицирующихся код або код, в якому власне код і дані не розділені). Пов'язано це з тим, що між кодами машинних команд і командами асемблера є практично взаємно-однозначна відповідність.


4. Структура компілятора

Процес компіляції складається з наступних етапів:

  1. Лексичний аналіз. На цьому етапі послідовність символів вихідного файлу перетвориться в послідовність лексем.
  2. Синтаксичний (граматичний) аналіз. Послідовність лексем перетвориться в дерево розбору.
  3. Семантичний аналіз. Дерево розбору обробляється з метою встановлення його семантики (сенсу) - наприклад, прив'язка ідентифікаторів до їх деклараціям, типами, перевірка сумісності, визначення типів виразів і т. д. Результат зазвичай називається "проміжним поданням / кодом", і може бути доповненим деревом розбору, новим деревом, абстрактним набором команд або чимось ще, зручним для подальшої обробки.
  4. Оптимізація. Виконується видалення зайвих конструкцій та спрощення коду із збереженням його сенсу. Оптимізація може бути на різних рівнях та етапах - наприклад, над проміжним кодом або над кінцевим машинним кодом.
  5. Генерація коду. З проміжного представлення породжується код на цільовому мовою.

У конкретних реалізаціях компіляторів ці етапи можуть бути розділені або, навпаки, поєднані в тому чи іншому вигляді.


5. Роздільна компіляція

Роздільна компіляція ( англ. separate compilation ) - Трансляція частин програми окремо з наступним об'єднанням їх компонувальником в єдиний завантажувальний модуль. [2]

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

Поява роздільної компіляції і виділення компоновки як окремої стадії відбулося значно пізніше створення компіляторів. У зв'язку з цим замість терміна "компілятор" іноді використовують термін "транслятор" як його синонім: або в старій літературі, або коли хочуть підкреслити його здатність переводити програму в машинний код (і навпаки, використовують термін "компілятор" для підкреслення здатності збирати з багатьох файлів один).


6. Цікаві факти

На зорі розвитку комп'ютерів перший компілятор (транслятори) називали "програмуючими програмами" [6] (так як в той момент програмою вважався тільки машинний код, а "програмує програма" була здатна з людського тексту зробити машинний код, тобто запрограмувати ЕОМ).

Примітки

  1. ГОСТ 19781-83 / / Обчислювальна техніка. Термінологія: Довідковий посібник. Випуск 1 / Рецензент канд. техн. наук Ю. П. Селіванов. - М .: Видавництво стандартів, 1989. - 168 с. - 55000 екз. - ISBN 5-7050-0155-X
  2. 1 2 3 4 5 Першиков В.І., Савінков В. М. Тлумачний словник з інформатики / Рецензенти: канд. фіз.-мат. наук А. С. Марков і д-р фіз.-мат. наук І. В. Поттосін. - М .: Фінанси і статистика, 1991. - 543 с. - 50 000 прим. - ISBN 5-279-00367-0
  3. 1 2 3 СТ ІСО 2382/7-77 / / Обчислювальна техніка. Термінологія. Указ. соч.
  4. Борковський А. Б. Англо-російський словник з програмування та інформатики (з тлумаченнями). - М .: Російська мова, 1990. - 335 с. - 50050 (дод,) прим. - ISBN 5-200-01169-3
  5. Тлумачний словник по обчислювальним системам = Dictionary of Computing / Под ред. В. Іллінгуорта та ін: Пер. з англ. А. К. Белоцкого та ін; Під ред. Є. К. Масловського. - М .: Машинобудування, 1990. - 560 с. - 70 000 (дод,) прим. - ISBN 5-217-00617-X (СРСР), ISBN 0-19-853913-4 (Великобританія)
  6. Н. А. Криницький, Г. А. Миронов, Г. Д. Фролов. Програмування / Под ред. М. Р. Шура-Бура. - М .: Державне видавництво фізико-математичної літератури, 1963.

Література

  • Альфред В. Ахо, Моніка С. Лам, Раві Мережі, Джеффрі Д. Ульман. Компілятори: принципи, технології та інструментарій = Compilers: Principles, Techniques, and Tools. - 2-ге вид. - М .: Вільямс, 2010. - 1184 с. - ISBN 978-5-8459-1349-4
  • Робін Хантер. Основні концепції компіляторів = The Essence of Compilers. - М .: Вільямс, 2002. - 256 с. - ISBN 0-13-727835-7
  • Хантер Р. Проектування і конструювання компіляторів / Пер. з англ. С. М. Круговий. - М .: Фінанси і статистика, 1984. - 232 с.
  • Д. Креншоу. Давайте створимо компілятор! - www.kulichki.net / kit / crenshaw / crenshaw.html
  • Серебряков В. А., Галочкин М. П. Основи конструювання компіляторів - www.citforum.ru/programming/theory/serebryakov/.

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
Оптимізуючий компілятор
© Усі права захищені
написати до нас
Рейтинг@Mail.ru