Очевидно, що сприйнятливість людей і електронний пристрій, як комп'ютер, відрізняється. Люди можуть зрозуміти що завгодно через природні мови, але комп'ютер не робить. Комп'ютер потребує перекладача, щоб перетворити мови, написані у формі, що читається людиною, у машиночитаемую форму.
Компілятор і інтерпретатор є типом перекладача мови. Що таке мовний перекладач? Це питання може виникати у вашому розумі.
Перекладач мови - це програмне забезпечення, яке переводить програми з вихідної мови, які знаходяться в людській формі, в еквівалентну програму на мові об'єкта. Мова оригіналу, як правило, є мовою програмування високого рівня, а мова об'єкта - це, як правило, машинна мова реального комп'ютера.
Діаграма порівняння
Основа для порівняння | Компілятор | Перекладач |
---|---|---|
Вхідні дані | Це займе цілу програму за один раз. | Одночасно він приймає одну лінію коду або інструкцію. |
Вихідні дані | Він генерує проміжний об'єктний код. | Він не виробляє проміжний об'єктний код. |
Механізм роботи | Компіляція виконується перед виконанням. | Компіляція і виконання відбуваються одночасно. |
Швидкість | Порівняно швидше | Повільніше |
Пам'ять | Вимоги до пам'яті більше пов'язані зі створенням об'єктного коду. | Він вимагає меншої кількості пам'яті, оскільки не створює проміжний об'єктний код. |
Помилки | Відображати всі помилки після компіляції, одночасно. | Показує помилку кожного рядка по одному. |
Виявлення помилок | Важко | Простіше порівняно |
Мови програмування | C, C ++, C #, Scala, машинопис використовує компілятор. | Java, PHP, Perl, Python, Ruby використовує інтерпретатор. |
Визначення компілятора
Компілятор - це програма, яка читає програму, написану на мові високого рівня, і перетворює її на машину або мову низького рівня і повідомляє про помилки, наявні в програмі. Він перетворює весь вихідний код за один раз або може зробити кілька проходів для цього, але, нарешті, користувач отримує скомпільований код, який готовий до виконання.
Компілятор працює на фазах; різні етапи можуть бути згруповані на дві частини:
- Фаза аналізу компілятора також називається передньою частиною, в якій програма поділяється на основні складові частини і перевіряє граматику, семантику і синтаксис коду, після чого генерується проміжний код. Фаза аналізу включає в себе лексичний аналізатор, семантичний аналізатор і синтаксичний аналізатор.
- Фаза синтезу компілятора також відома як задній кінець, в якому оптимізований проміжний код, і генерується цільовий код. Фаза синтезу включає оптимізатор коду та генератор коду.
ФАЗИ КОМП'ЮЛЕРА
Тепер давайте детально розберемо роботу кожного етапу.
- Лексичний аналізатор : Він сканує код як потік символів, групує послідовність символів у лексеми і виводить послідовність лексем з посиланням на мову програмування.
- Аналізатор синтаксису : У цій фазі маркери, які генеруються на попередньому етапі, перевіряються на граматику мови програмування, чи є вирази синтаксично правильними чи ні. Це робить розбір дерев для цього.
- Семантичний аналізатор : він перевіряє, чи виконуються вирази та твердження, сформовані на попередній стадії, за правилом мови програмування чи ні, і створює дерева анотації.
- Генератор проміжного коду : він генерує еквівалентний проміжний код вихідного коду. Існує багато уявлень про проміжний код, але найбільш широко використовується TAC (Three Address Code).
- Оптимізатор коду : покращує вимоги до часу та простору програми. Для цього усувається надлишковий код, присутній у програмі.
- Генератор коду : це остання фаза компілятора, у якій генерується цільовий код для певної машини. Він виконує такі операції, як керування пам'яттю, присвоєння реєстру та конкретна оптимізація машин.
Таблиця символів є дещо структурою даних, яка керує ідентифікаторами разом з відповідним типом даних, які вона зберігає. Обробник помилок виявляє, повідомляє, виправляє помилки, що зустрічаються між різними фазами компілятора.
Визначення перекладача
Інтерпретатор є альтернативою для реалізації мови програмування і виконує ту ж роботу, що й компілятор. Інтерпретатор виконує лексинг, розбір і перевірку типу, подібну до компілятора. Але інтерпретатор обробляє синтаксичне дерево безпосередньо для доступу до виразів і виконує оператор, а не генерує код з дерева синтаксису.
Інтерпретатор може вимагати обробки одного і того ж синтаксичного дерева більше одного разу, що є причиною того, що інтерпретація є порівняно повільнішою, ніж виконання скомпільованої програми.
Компіляція та інтерпретація, ймовірно, об'єднані для реалізації мови програмування. У яких компілятор генерує код середнього рівня, то код інтерпретується, а не компілюється до машинного коду.
Використання перекладача є вигідним під час розробки програм, де найважливішою частиною є можливість швидкого тестування модифікації програми, а не ефективного виконання програми.
Ключові відмінності між компілятором та інтерпретатором
Давайте розглянемо основні відмінності між компіляторами та інтерпретаторами.
- Компілятор приймає програму в цілому і переводить її, але інтерпретатор переводить оператор програми за допомогою оператора.
- Проміжний код або цільовий код генерується у випадку компілятора. Як проти інтерпретатора не створює проміжного коду.
- Компілятор порівняно швидше, ніж інтерпретатор, оскільки компілятор приймає всю програму за один раз, тоді як інтерпретатори компілюють кожен рядок коду за іншим.
- Компілятор вимагає більше пам'яті, ніж інтерпретатор, через генерацію об'єктного коду.
- Компілятор відображає всі помилки одночасно, і важко виявити помилки в контрастному інтерпретаторі помилок відображення кожного висловлювання по одному, і легше виявляти помилки.
- У компіляторі, коли виникає помилка в програмі, вона припиняє свій переклад і після видалення помилки вся програма знову переводиться. Навпаки, коли помилка відбувається в інтерпретаторі, це перешкоджає його перекладу і після видалення помилки переклад продовжується.
- У компіляторі процес вимагає двох кроків, в яких спочатку вихідний код переводиться до цільової програми, після чого виконується. Перебуваючи в інтерпретаторі Це один крок, в якому вихідний код компілюється і виконується одночасно.
- Компілятор використовується в мовах програмування, таких як C, C ++, C #, Scala і т.д. На іншому інтерпретаторі використовуються мови, такі як Java, PHP, Ruby, Python і т.д.
Висновок
Компілятор і інтерпретатор обидва призначені для виконання тієї самої роботи, але відрізняються в операційній процедурі, компілятор приймає вихідний код у агрегованому вигляді, тоді як інтерпретатор приймає складові частини вихідного коду, тобто оператор за твердженням.
Хоча і компілятор, і інтерпретатор мають певні переваги і недоліки, такі як інтерпретовані мови вважаються крос-платформними, тобто код є портативним. Також не потрібно компілювати інструкцію раніше, на відміну від компілятора, що економить час. Складені мови швидше відносяться до процесу компіляції.