Что такое дизайн компилятора? Типы, Строительные инструменты, Пример

Что такое компилятор?

Компилятор — это компьютерная программа, которая помогает преобразовать исходный код, написанный на языке высокого уровня, в машинный язык низкого уровня. Он переводит код, написанный на одном языке программирования, на другой язык, не меняя смысла кода. Компилятор также повышает эффективность конечного кода, который оптимизируется по времени выполнения и объему памяти.

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

составитель

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

  • правильность
  • Скорость компиляции
  • Сохраните правильный смысл кода
  • Скорость целевого кода
  • Распознавать законные и незаконные программные конструкции.
  • Хороший отчет об ошибках/обработка
  • Помощь в отладке кода

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

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

  • Однопроходные компиляторы
  • Двухпроходные компиляторы
  • Многопроходные компиляторы

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

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

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

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

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

Двухпроходный компилятор разделен на две секции, а именно:

  1. Внешний интерфейс: Он отображает юридический кодекс в промежуточное представительство (IR).
  2. Бэк-энд: Он отображает IR на целевую машину.

Метод двухпроходного компилятора также упрощает процесс перенацеливания. Это также позволяет использовать несколько внешних интерфейсов.

Многопроходные компиляторы

Многопроходные компиляторы
Многопроходные компиляторы

Многопроходный компилятор обрабатывает исходный код или синтаксическое дерево программы несколько раз. Он разделил большую программу на несколько маленьких программ и обработал их. Он разрабатывает несколько промежуточных кодов. Все эти многопроходные схемы принимают выход предыдущей фазы в качестве входных данных. Поэтому требуется меньше памяти. Он также известен как «Широкий компилятор».

Задачи компилятора

Основными задачами, выполняемыми Компилятором, являются:

  • Разбивает исходную программу на части и накладывает на них грамматическую структуру.
  • Позволяет построить нужную целевую программу из промежуточного представления, а также создать таблицу символов.
  • Компилирует исходный код и обнаруживает в нем ошибки.
  • Управляйте хранением всех переменных и кодов.
  • Поддержка отдельной компиляции
  • Прочтите, проанализируйте всю программу и переведите ее в семантически эквивалентный вид.
  • Перевод исходного кода в объектный код в зависимости от типа машины

История компилятора

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

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

Шаги для систем языковой обработки

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

Шаги для систем языковой обработки
Шаги для систем языковой обработки
  • препроцессор: Препроцессор считается частью компилятора. Это инструмент, который создает входные данные для компилятора. Он занимается обработкой макросов, расширением, расширением языка и т. д.
  • переводчик: Интерпретатор подобен компилятору, который переводит язык высокого уровня в машинный язык низкого уровня. Основное различие между ними заключается в том, что интерпретатор читает и преобразует код построчно. Компилятор считывает весь код сразу и создает машинный код.
  • Ассемблер: Он переводит код языка ассемблера на понятный машине язык. Выходной результат ассемблера известен как объектный файл, который представляет собой комбинацию машинных инструкций, а также данных, необходимых для хранения этих инструкций в памяти.
  • связи: Компоновщик помогает вам связывать и объединять различные объектные файлы для создания исполняемого файла. Все эти файлы могли быть скомпилированы отдельными ассемблерами. Основная задача компоновщика — поиск вызываемых модулей в программе и выяснение места памяти, где хранятся все модули.
  • Погрузчик: Загрузчик — часть ОС, выполняющая задачи по загрузке исполняемых файлов в память и их запуску. Он также вычисляет размер программы, которая создает дополнительное пространство памяти.
  • Кросс-компилятор: Кросс-компилятор в конструкции компилятора — это платформа, которая помогает генерировать исполняемый код.
  • Компилятор исходного кода: Компилятор исходного кода — это термин, используемый, когда исходный код одного языка программирования переводится в исходный код другого языка.

Инструменты построения компилятора

Инструменты для построения компиляторов появились по мере распространения компьютерных технологий по всему миру. Их также называют компиляторами-компиляторами, компиляторами-генераторами или трансляторами.

Эти инструменты используют определенный язык или алгоритм для указания и реализации компонента компилятора. Ниже приведены примеры инструментов построения компилятора.

  • Генераторы сканеров: этот инструмент принимает в качестве входных данных регулярные выражения. Например LEX для Unix Operaтинговая система.
  • Синтаксисно-ориентированные механизмы перевода: Эти программные средства предложите промежуточный код, используя дерево разбора. Его цель — связать один или несколько переводов с каждым узлом дерева синтаксического анализа.
  • Генераторы парсеров: Генератор синтаксического анализатора принимает грамматику в качестве входных данных и автоматически генерирует исходный код, который может анализировать потоки символов с помощью грамматики.
  • Автоматические генераторы кода: принимает промежуточный код и преобразует его в машинный язык.
  • Механизмы потока данных: этот инструмент полезен для оптимизации кода. Здесь информация предоставляется пользователем, а промежуточный код сравнивается для анализа какого-либо отношения. Он также известен как анализ потока данных. Это поможет вам узнать, как значения передаются из одной части программы в другую.

Зачем использовать компилятор?

  • Компилятор проверяет всю программу, поэтому синтаксических или семантических ошибок нет.
  • Исполняемый файл оптимизируется компилятором, поэтому он выполняется быстрее.
  • Позволяет создавать внутреннюю структуру в памяти.
  • Нет необходимости выполнять программу на той же машине, на которой она была создана.
  • Переведите всю программу на другой язык.
  • Генерировать файлы на диске.
  • Свяжите файлы в исполняемый формат.
  • Проверьте синтаксические ошибки и типы данных.
  • Помогает вам улучшить понимание семантики языка.
  • Помогает решить проблемы с языковой производительностью.
  • Возможность реализовать нетривиальный программный проект.
  • Методы, используемые для построения компилятора, могут быть полезны и для других целей.

Применение компиляторов

  • Разработка компилятора помогает полной реализации языков программирования высокого уровня.
  • Поддержка оптимизации для компьютера Archiтектура Параллелизм.
  • Проектирование новых иерархий памяти машин.
  • Широко используется для перевода программ.
  • Используется с другими инструментами повышения производительности программного обеспечения.

Резюме

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