Поняття компіляції в інформатиці

Компіляція в інформатиці – це формування програми, яке включає транслювання всіх програмних модулів.

Під компіляцією розуміються процеси, які полегшують діалог фахівця з написання програм і комп’ютера. Формуючи на етапі завершення свою програму, кожен програміст змушений використовувати програму компіляції. У технічному описі ця програма займає дуже скромне місце і визначається як утиліта, яка здійснює компіляцію. Компіляцією є операція перетворення програмного додатка, яке виконано на відомому людям мовою (визначається як мова високого рівня), у команди мови низького рівня, які розуміє комп’ютер. У підсумку виходить програма, наближена до машинних кодів. Програма має вигляд об’єктного модуля або абсолютного коду. В окремих випадках ця програма може бути схожою на команди асемблера. Тобто, компіляцією є перетворення вхідних даних( вихідного коду), що описують якийсь алгоритм, виконаний на проблемній мові, в обраний набір команд об’єктного коду (машинна мова).

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

Компіляція в інформатиці

Є різні види компіляції:

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

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

  • Вектор компілятор. Виконує переклад вхідних даних в машинний код, при цьому виконуючи підстроювання під векторні Процесори.
  • Гнучкий компілятор. Базується на модульному принципі і управляється за допомогою таблиць. Його програма виконана на мові високого рівня і є можливість реалізувати його за допомогою компілятора компіляторів.
  • Інкрементальний компілятор. Виконує Вторинне перетворення компонентів вихідної програми і додатків до неї, не роблячи перекомпіляцію всієї програми.
  • Компілятор покроковий або виконує інтерпретацію. Застосовує методику почергового проведення самостійної компіляції будь-якого обраного процесу вихідного модуля.
  • Компілятор компіляторів. Програма трансляції, що сприймає формалізоване представлення мови програмування. У нього є можливість самому сформувати необхідний компілятор для обраного програмного мови.
  • Компілятор налагодження. Здатний виявити і усунути різні типи синтаксичних помилок.
    Резидентний компілятор. Має своє фіксоване розташування в оперативній пам’яті і може повторно застосовуватися великим діапазоном завдань.
  • Компілятор самокомпилируемый. Він формується тією ж мовою,що і програма, що транслюється. Це універсальний компілятор, в якому закладені семантика і синтаксис вихідної мови. До його складу входять ядро, семантичний і синтаксичний завантажувачі.
    Найбільш часто зустрічаються завдання компіляції ядра для операційної системи Linux.

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

Структурна побудова компілятора

В процесі виконання компіляції, реалізуються наступні етапи:

  • Аналіз лексики. Виконується перетворення символіки вихідної програми в набір лексем (абстрактних одиниць).
  • Аналіз синтаксису (граматики). Виконується перетворення набору лексем в дерево розбору.
  • Аналіз семантики. Виконується обробка дерева розбору для визначення його смислових значень (семантики). Це може бути процес прив’язки ідентифікаторів до їх видів, визначення сумісності т так далі. У підсумку формується проміжне уявлення (код), і можливе формування доповненого дерева розбору або навіть нового дерева. Можливо так само формування абстрактного набору команд, зручного для подальшого застосування.
  • Підвищення оптимальності. Видаляються зайві освіти і формується спрощений код без смислових втрат. Процес оптимізації можливо здійснювати на різних етапах. Наприклад, можна оптимізувати проміжний або остаточний машинний код.
  • Процес генерації коду. Виконується трансформація проміжних уявлень в коди кінцевого мови.

Для різних типів компіляторів можливий підрозділ або поєднання даних етапів в різних варіаціях.

Трансляція і компонування

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

Посилання на основну публікацію