Що таке дизайн компілятора? Типи, будівельні інструменти, приклад

Що таке компілятор?

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

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

компілятор

Особливості компіляторів

  • Правильність
  • Швидкість компіляції
  • Зберігайте правильне значення коду
  • Швидкість цільового коду
  • Розпізнавати законні та незаконні конструкції програм
  • Добре звітування про помилки/обробка
  • Довідка з налагодження коду

Типи компілятора

Нижче наведено різні типи компіляторів:

  • Однопрохідні компілятори
  • Двопрохідні компілятори
  • Багатопрохідні компілятори

Однопрохідний компілятор

Однопрохідний компілятор
Однопрохідний компілятор

За один прохід вихідний код компілятора безпосередньо перетворюється на машинний код. Наприклад, мова Pascal.

Двопрохідний компілятор

Двопрохідний компілятор
Двопрохідний компілятор

Двопрохідний компілятор розділений на дві частини, а саме.

  1. Передня частина: Він відображає юридичний код у проміжному представництві (IR).
  2. Задня частина: Він відображає ІЧ на цільовій машині

Метод двопрохідного компілятора також спрощує процес перенацілювання. Це також дозволяє використовувати кілька передніх кінців.

Багатопрохідні компілятори

Багатопрохідні компілятори
Багатопрохідні компілятори

Багатопрохідний компілятор кілька разів обробляє вихідний код або синтаксичне дерево програми. Він розділив велику програму на кілька малих програм і обробив їх. Він розробляє кілька проміжних кодів. Усі ці багатопрохідні дані приймають вихідні дані попередньої фази як вхідні дані. Тому для цього потрібно менше пам’яті. Він також відомий як «широкий компілятор».

Завдання компілятора

Основні завдання, які виконує компілятор:

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

Історія компілятора

Важливі віхи в історії компілятора такі:

  • Слово «компілятор» вперше використала на початку 1950-х років Грейс Мюррей Хоппер.
  • Перший компілятор був створений Джоном Бекумом і його групою між 1954 і 1957 роками в IBM.
  • COBOL був першим мова програмування який був скомпільований на кількох платформах у 1960 році
  • Вивчення проблем сканування та аналізу проводилося в 1960-х і 1970-х роках, щоб забезпечити повне рішення.

Кроки для систем обробки мови

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

Кроки для систем обробки мови
Кроки для систем обробки мови
  • Препроцесор: препроцесор розглядається як частина компілятора. Це інструмент, який створює вхідні дані для компілятора. Він займається обробкою макросів, доповненням, розширенням мови тощо.
  • перекладач: Інтерпретатор схожий на компілятор, який перекладає мову високого рівня на машинну мову низького рівня. Основна відмінність між ними полягає в тому, що інтерпретатор читає та перетворює код рядок за рядком. Компілятор зчитує весь код одночасно і створює машинний код.
  • Асемблер: він перекладає код мови асемблера на машинно зрозумілу мову. Результат роботи асемблера відомий як об’єктний файл, який є комбінацією машинних інструкцій, а також даних, необхідних для збереження цих інструкцій у пам’яті.
  • Linker: компонувальник допомагає зв’язувати та об’єднувати різні об’єктні файли для створення виконуваного файлу. Усі ці файли могли бути скомпільовані окремими асемблерами. Основним завданням компонувальника є пошук викликаних модулів у програмі та визначення розташування пам’яті, де зберігаються всі модулі.
  • Навантажувач: Завантажувач - це частина ОС, яка виконує завдання завантаження виконуваних файлів у пам'ять та їх запуску. Він також обчислює розмір програми, яка створює додатковий простір пам’яті.
  • Крос-компілятор: крос-компілятор у дизайні компілятора — це платформа, яка допомагає генерувати виконуваний код.
  • Компілятор вихідного коду: компілятор вихідного коду — це термін, який використовується, коли вихідний код однієї мови програмування перекладається на вихідний код іншої мови.

Інструменти створення компілятора

Інструменти створення компілятора були введені в міру того, як комп’ютерні технології поширилися по всьому світу. Вони також відомі як компілятор-компілятор, компілятор-генератор або транслятор.

Ці інструменти використовують певну мову або алгоритм для визначення та реалізації компонента компілятора. Нижче наведено приклад інструментів побудови компілятора.

  • Генератори сканерів: цей інструмент приймає регулярні вирази як вхідні дані. Наприклад, LEX для Unix Operating System.
  • Системи перекладу, орієнтовані на синтаксис: Ці програмні засоби запропонувати проміжний код за допомогою дерева аналізу. Його метою є асоціювання одного або кількох перекладів з кожним вузлом дерева синтаксичного аналізу.
  • Генератори парсерів: Генератор аналізатора приймає граматику як вхідні дані та автоматично генерує вихідний код, який може аналізувати потоки символів за допомогою граматики.
  • Автоматичні генератори коду: бере проміжний код і перетворює його на машинну мову.
  • Механізми потоку даних: цей інструмент корисний для оптимізації коду. Тут інформація надається користувачем, а проміжний код порівнюється для аналізу будь-якого відношення. Він також відомий як аналіз потоку даних. Це допомагає вам дізнатися, як значення передаються з однієї частини програми в іншу.

Навіщо використовувати компілятор?

  • Компілятор перевіряє всю програму, тому немає синтаксичних чи семантичних помилок.
  • Виконуваний файл оптимізований компілятором, тому він виконується швидше.
  • Дозволяє створювати внутрішню структуру в пам'яті.
  • Немає необхідності виконувати програму на тій самій машині, на якій вона створена.
  • Перекласти всю програму іншою мовою.
  • Створення файлів на диску.
  • Зв’яжіть файли у виконуваний формат.
  • Перевірте синтаксичні помилки та типи даних.
  • Допомагає покращити ваше розуміння семантики мови.
  • Допомагає вирішувати проблеми продуктивності мови.
  • Можливість для нетривіального проекту програмування.
  • Методи, які використовуються для побудови компілятора, також можуть бути корисними для інших цілей.

Застосування компіляторів

  • Дизайн компілятора сприяє повній реалізації мов програмування високого рівня.
  • Підтримка оптимізації для комп'ютера Archiтектура Паралелізм.
  • Проектування нових ієрархій пам'яті машин.
  • Широко використовується для перекладу програм.
  • Використовується з іншими інструментами підвищення продуктивності програмного забезпечення.

Підсумки

  • Компілятор — це комп’ютерна програма, яка допомагає вам перетворювати вихідний код, написаний мовою високого рівня, на машинну мову низького рівня.
  • Коректність, швидкість компіляції, збереження правильного сенсу коду є деякими важливими характеристиками конструкції компілятора.
  • Компілятори поділяються на три частини: 1) однопрохідні компілятори, 2) двопрохідні компілятори та 3) багатопрохідні компілятори.
  • Слово «компілятор» вперше використала на початку 1950-х років Грейс Мюррей Хоппер.
  • Етапи системи обробки мови: препроцесор, інтерпретатор, асемблер, компонувальник/завантажувач.
  • Важливими інструментами побудови компілятора є 1) Генератори сканерів, 2) Синтаксис-3) механізми спрямованого перекладу, 4) Генератори парсерів, 5) Автоматичні генератори коду.
  • Основним завданням компілятора є перевірка всієї програми, щоб не було синтаксичних чи семантичних помилок.