MyTetra Share
Делитесь знаниями!
Что такое Compiler Driver?
Время создания: 13.05.2021 11:02
Раздел: Компьютер - Программирование - Теория программирования - Теория компиляции
Запись: xintrea/mytetra_syncro/master/base/1620892939sjf8vucvn0/text.html на raw.github.com

Драйвер компилятора объединяет фронтенд и бекенд как удобный фасад, в полном соответствии с паттерном Фасад (Facade). В том числе он:


  • создаёт и параметризует фронтенд и бекенд
  • вызывает методы фронтенда для начала разбора загруженного из файла текста
  • получает Abstract Syntax Tree (AST) и передаёт его бекенду для кодогенерации


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

Вместе с языком C в моду вошла раздельная компиляция — компилятор C обрабатывает один файл на языке C и получает объектный файл, где для каждой функции сгенерирован машинный код, но информация о функциях ещё не потеряна, поскольку не все функции известны (реализации некоторых функций находятся в других файлах проекта или в статических библиотеках). Соединением объектных файлов в программу занимается компоновщик, а не компилятор:

На практике хороший компилятор может сам вызвать компоновщик как утилиту командной строки. Для поиска компоновщика в системе используются эвристические методы и переменные окружения, такие как %ProgramFiles% на Windows. Например, вы можете попытаться найти компоновщик в составе Visual Studio, перебирая заранее известные пути для различных версий Visual Studio.

Для вызова внешних утилит в C++ можно использовать system, но у неё много ограничений: например, нельзя прочитать сообщение об ошибке из другого процесса, нельзя его остановить, нельзя запускать его асинхронно. Часть недостатков устраняет POSIX-функция popen, на Windows доступная как _popen.

Аргументы командной строки

Драйвер обрабатывает аргументы командной строки: пути к файлам, опции компиляции, опции компоновщика. Для простейшего компилятора будет достаточно обрабатывать только пути к входным файлам и несколько простейших опций, например:


  • Опция уровня оптимизации: -odebug (по умолчанию) генерирует отладочную сборку без оптимизаций, а -orelease генерирует сборку с оптимизациями


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования