Что такое компилятор - описание. Что может быть в заголовочном файле

27.05.2019

Современные компьютерные технологии находятся в постоянной стадии совершенствования. С каждым днем выходят все новые и новые технологии, позволяющие воплотить в жизнь то, что еще недавно определялось как фантастика. Сильным изменениям поддаются и языки, как человеческие, так и компьютерные. В данной статье мы подробно расскажем, что это – компилятор, как с ним работать, для чего он создавался и где его сейчас можно встретить. Статья рекомендуется не только начинающим пользователям операционной системы Windows, но и программистам, желающим познать скрытые знания своей системы.

Язык для операционной системы

Для начала стоит абстрагироваться, ведь программирование – это не только вбивание определенных ключей-слов в машину, это еще и тщательно продуманные действия, связанные с компонентами системы. Изначально был двоичный код, потом программисты создали полумашинный язык программирования – ассемблер, но для чего?

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

В языке ассемблер все осуществляется благодаря регистрам процессора: деление, умножение, перемещение значения из точки А в точку Б и т. д. Основная его проблема, что он все еще является полумашинным, но все равно поддается прочтению человеку, в отличии от хаотично раскиданных битов. Еще одним минусом было ограниченное количество этих самых регистров.

В 80-х годах решили придумать язык программирования, благодаря которому можно будет легко и просто написать операционную систему. Так появился С и компилятор С GCC от компании GNU. Если вы пользуетесь Linux, то обязательно должны были видеть продукты данной компании. Кстати, ассемблер используется и поныне, ведь некоторые компиляторы создают объектные файлы с двоичным кодом, а другие исполнительные – с кодом на ассемблере. Все зависит от платформы разработчика.

Современный компилятор имеет следующие программы в себе:

    Дебагер – программа, которая отправляет сообщения об ошибке от линковщика, препроцессора, интерпретатора. Препроцессор – это программа, главной задачей которой является поиск специальных меток, начинающихся со знака #, и выполнение определенного рода команд. Например, добавления сторонней библиотеки для компиляции проекта. Интерпретатор – программа, которая переводит наш более-менее понятный язык программирования в двоичный код или ассемблер. Линковщик – программа, благодаря которой недостающие файлы автоматически подключаются.

Также существует 2 типа сборки проекта компилятором: динамическая и статическая. В первой добавляются лишь нужные проекту файлы, несмотря на среду разработки, а во втором случае - все в кучу (подключенные, конечно). Итак, из этого уже можно сказать, что компилятор – это целый список программ для сбора и обработки информации в понятный и логичный для компьютера вид. Дальше мы рассмотрим, с чего все начиналось.

Первые простейшие компиляторы

Может, вы удивитесь, но впервые объект нашей статьи (тогда его еще называли транслятор) появился в далеком 1954 году в Институте, специализирующемся на прикладной математике. Он включал в себя не настолько большой комплекс программ, как сейчас, но все равно был прорывом в науке на то время. Там не было дебагера, поэтому людям приходилось все делать буквально руками, причем используя при этом стандартную и дискретную математику, чтобы узнать, правильный ли результат получила электронно-вычислительная машина.


Возможна ли сборка без нового языка?

Если вы достаточно толковый программист, то вполне сможете выполнить эту задачу. Правда, для этого понадобится немало времени и сил. Кстати, раньше даже была профессия такая – программист-линковщик. Это только в новых языках программирования все автоматизировано, а раньше людям приходилось связывать куски кода Make файлами. Между прочим, некоторые проекты на Linux и сейчас можно собрать с помощью этих самых Make-файлов, нужно лишь указать их зависимости вручную.


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

Как видите, компилятор – это не только программа, а еще и усилия множества людей. А они, как утверждал Генри Форд, пытаются автоматизировать каждый процесс.

Лучший компилятор Windows

Итак, многие из читателей знают, что существует множество мертвых языков, но еще больше живых, т. е. тех, которые хотя бы раз в год обновляют свою стандартную библиотеку. Как мы уже говорили, в 1980 году был создан С - это был прорыв. Многие наши отцы до сих пор обожают данный язык, но что с ним теперь?

Он живет и процветает в новом теле, если так можно сказать. Его наследником по праву является С++, хоть и его создателя воспрещают писать на нем код, похожий на С, многие программисты игнорирует это и делают, но почему допускается такое грубое нарушение правил?


    Во-первых, он взял солидную долю стандартных библиотек от С, и новые компиляторы G++ способны компилировать код С, что уже само по себе указывает на их схожесть. Во-вторых, С++ был создан, чтоб заместить С, и итоги этого мы видим сейчас. К слову, программа компилятор G++ не "ругается" до тех пор, пока не будет использован хотя бы один класс – в этом и есть основное отличие двух языков. Можно назвать G++ лучшим компилятором, не зря ведь благодаря ему пишут мобильные приложения, операционную систему Windows и т. д.

Ваш путь будет тернист – это стоит знать прежде всего. Для начала работы с языком, например, если это С, вы обязательно должны будете ознакомиться с компилятором C. А если с ним не подружиться и не понять его логику, то ваши проекты один за одним будут лагать и вылетать.


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

В заключение

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

Если вы только начинаете изучать программирование или же просто интересовались данным вопросом, наверняка вам на глаза попадалось таинственное слово «компилятор». Это с виду страшное понятие способно отпугнуть людей. В данной статье постараемся разобраться, так ли все ужасно. Что такое компилятор?

Определение и история появления

Если говорить простыми словами, то компилятором является программа, преобразующая текст программы, написанной пользователем, в некоторую форму, которая пригодна для выполнения на вычислительной машине.

Появились такие программы вместе с зарождением первых языков программирования. Произошло это в конце 50-х годов. Получается, что история, которая связана с компиляторами и языками программирования насчитывает уже более шести десятков лет. Несмотря на такой серьезный срок, данное направление компьютерной науки ни в коем случае нельзя назвать устаревшим или устоявшимся. Наоборот, с ходом времени, с появлением новых отраслей и задач, для решения которых применяются компьютеры, возникает потребность в разработке новых, более удобных языков программирования. Соответственно, для этих языков нужны компиляторы. Windows, Linux, MacOS - для каждой платформы существуют свои разработки.

Принцип работы

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

Просто, но сложно

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

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

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

Трудности в создании

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

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

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

Наверное, многие слышали о таких языках, как C и C++. Ведь они являются одними из самых популярных и распространенных. Это очень серьезные языки программирования, содержащие мощные понятия, которые удобны для того, чтобы отображать понятия прикладных областей, в сфере которых трудятся разработчики. К примеру, есть там понятие классов, функций. Они являются основополагающими для многих языков, но для C++ они в особенности характерны.

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

Любая какой бы мощной и сложной она ни являлась, оперирует очень простыми понятиями. Но является трудным, так как с его помощью очень удобно отображать многие вещи из реальной жизни. Компилятор сложные понятия превращает в примитивные.

Разработка компиляторов как работа

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

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

Таким образом, теперь вам должно быть понятно, что такое компилятор. Это программа-переводчик между разработчиком и компьютером, без которой в сфере компьютерной науки никуда.

Создавая на завершающем этапе определенную программу, любому программисту приходиться обращаться к услугам компилятора. В технической документации этой программе отведено довольно скромное определение как утилите, выполняющей компиляцию. Компиляция - это процесс превращения программы, написанной на языке, понятном человеку (языке высокого уровня), в команды, понятные для машины (низкоуровневый язык). В результате получаем программу, которая близка Она может выглядеть как объектный модуль, абсолютный код. Иногда такая программа похожа на

Таким образом, компиляция - это когда входная информация (исходный код), представляющая описание алгоритма или написанная на проблемно-ориентированном языке программа, переписывается в эквивалентный перечень команд, представленных в объектном коде (машинно-ориентированном языке).

Если еще упростить определение, то компилировать - это транслировать машинную программу с проблемно-ориентированного в машинно-ориентированный язык.

Несмотря на прозрачность и простоту определения, компиляция - это процесс довольно многоплановый. Существует несколько ее видов. Пакетная компиляция осуществляется над несколькими исходными модулями в одном пункте задания. Построчная компиляция - это то же самое, что и интерпретация (пошаговая независимая компиляция каждого последующего оператора). Еще существует условная компиляция. В таком случае транслируемый текст имеет зависимость от условий, которые заданы в исходной программе директивами компилятора.

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

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

Компилятор векторизующий производит трансляцию исходного кода в машинный компьютерный код, подстраиваясь под векторные процессоры.

Гибкий компилятор был разработан на основе модульного принципа. Его управление осуществляется таблицами. Запрограммирован он на высокоуровневом языке. Также возможна его реализация при помощи компилятора компиляторов.

Компилятор инкрементальный осуществляет повторное транслирование фрагментов программы и дополнений к ней, при этом перекомпиляция всей программы исключается.

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

Который воспринимает формальное описание для языка программирования. Он способен самостоятельно генерировать компилятор для конкретного языка.

Отладочный компилятор может самостоятельно устранять некоторые виды ошибок синтаксиса.

Резидентному компилятору отведено постоянное место в оперативной памяти, и он доступен при повторном использовании широким спектром задач.

Существуют самокомпилируемые компиляторы. Они пишутся тем же языком, с которого происходит трансляция.

Универсальный компилятор имеет в основании формальное описание семантики и синтаксиса входного языка. Он состоит из ядра, синтаксического и семантического загрузчиков.

Наиболее часто встречающиеся задачи, где компиляторы находят себе применение, − это компиляция ядра для платформы Linux. Операция эта позволяет решить широкий спектр проблем, связанных с согласованием оборудования и настройки наиболее приемлемой версии платформы.

Компиляция Java реализовывается при использовании компиляторов, работающих на самых различных платформах. Это позволяет исходные коды перекомпилировать под потребности операционных систем от разных производителей.

Номере "Компьютерных вестей" за этот год я рассказал вам о том, как устроен отладчик. Конечно, с тех пор прошло уже немало времени, но узнавать новое никогда не поздно. Сегодня мы с вами поговорим об устройстве ничуть не менее важного для программиста инструмента - компилятора.

Конечно, во многих ВУЗах есть специальные курсы, посвящённые устройству различных компонентов современных компиляторов и интерпретаторов. И современные компиляторы слишком сложны для того, чтобы рассказать о них в одной статье достаточно подробно. Тем не менее, базовые механизмы работы компиляторов остались неизменными со времён выпуска первого компилятора языка Фортран.


С высоты птичьего полёта...

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

Итак, что же это за части? Это лексический анализатор, или сканер; синтаксический анализатор, или парсер; семантический анализатор; а также один или несколько генераторов кода и один или несколько оптимизаторов. Также к компилятору часто относят дополнительные инструменты, нужные для создания исполняемого файла - сборщик и компоновщик.

Все эти названия для непосвящённого человека выглядят настоящей китайской грамотой. Однако, когда вы прочтёте о том, что делает каждый из компонентов компилятора, думаю, согласитесь, что концептуально это всё довольно просто.


От "А" до "Я"

Первый этап разбора исходного текста программы, осуществляемого компилятором, - это лексический анализ. Лексический анализатор считывает последовательно все слова (токены, лексемы) в тексте программы, преобразуя их в конструкции, которые затем уже используются для дальнейшего разбора текста. Делается это для того, чтобы различить в последующем различные идентификаторы и непосредственные конструкции самого языка (такие, как зарезервированные слова).

Следом за лексическим анализом может быть препроцессор. Тем, кто знаком с языками программирования C или С++, нет нужды объяснять, в чём состоит его функция. Для остальных же скажу, что основная задача препроцессора - это замена одних лексем другими, которые были заранее определены в тексте программы. Используется препроцессор также для условной компиляции (т.е. когда кусок кода должен быть откомпилирован только при выполнении определённых условий - для определённой платформы, только при отладочном билде и т.д. и т.п.), для выполнения определённых макросов (как в том же C/C++) и некоторых других подобных вещей. Препроцессор не является обязательной частью компилятора, поскольку многие языки программирования не нуждаются в нём.

Следующий этап - это синтаксический анализ, или парсинг. Этот этап компиляции выполняется синтаксическим анализатором, или парсером, и является, пожалуй, самым важным и, если можно так сказать, ответственным этапом компиляции. Компилятор рассматривает все токены, и, в зависимости от их значения и положения в тексте программы, формирует так называемое дерево разбора. То есть программа, бывшая до этого в недрах компилятора просто линейным набором символов, становится деревом, элементы которого расположены в соответствии с грамматикой того языка программирования, для которого написан данный конкретный компилятор.

Следом за синтаксическим анализом следует этап анализа семантического. Если синтаксический анализатор строил скелет нашей программы, то семантический помогает этому скелету обрасти плотью. Программа наполняется смыслом: переменные становятся переменными, объекты - объектами, а баги - багами. На самом деле, никакого волшебства не происходит - просто дерево разбора, терпеливо построенное парсером, дополняется семантической информацией о значении идентификаторов. Кстати, на этом этапе возникают и многие ошибки компиляции - например, такие, как несоответствие типов. Хотя, конечно, на парсинг тоже приходится изрядное количество ошибок, без которых, к сожалению, текст свеженаписанной программы обходится крайне редко даже у очень опытных программистов .

Дальше пути различных компиляторов расходятся. В большинстве компиляторов следом за этапом семантического анализа идёт перевод программы в некоторый промежуточный код, который может использоваться для генерации кода под разные аппаратные платформы. Если компилятор выполняет компиляцию только для какой-то одной аппаратной платформы, то программа может транслироваться в коды на языке Ассемблера соответствующей процессорной архитектуры, или, если компилятор трудится для какой-то виртуальной машины (как, например, в случае Java или Microsoft .NET), то переводиться программа может затем в специальный байт-код, понятный соответствующей виртуальной машине. Тем не менее, в большинстве современных компиляторов нет непосредственной трансляции в ассемблерный код - даже если в итоге компилятор не должен стараться для создания кросс-платформенных программ, всё равно, сначала идёт трансляция программы в какой-то промежуточный код, а только потом уже в исполняемый. Причина этого в оптимизации кода.

Современные компиляторы, даже самые слабенькие и плохонькие, поддерживают хотя бы базовую оптимизацию кода. Более мощные коммерческие компиляторы содержат в себе очень мощные алгоритмы оптимизации кода, которые позволяют при некоторых условиях сделать её в разы быстрее. Особенно мощными в плане оптимизации давным-давно тому назад считались компиляторы производства Watcom, сейчас, вроде бы, постепенно восстанавливающие свою былую славу в виде open-source продукта. Потом пальма первенства перешла к компиляторам Intel, и сейчас именно они считаются самыми лучшими компиляторами в плане оптимизации. Что ж, это довольно логично - кому, как ни создателям процессоров, знать, как лучше всего оптимизировать программы для работы на них. Впрочем, не важно, плоха оптимизация в компиляторе или нет - главное, что в любом оптимизирующем компиляторе есть модуль, называемый оптимизатором, который начинает свою работу после генератора промежуточного кода. Справедливости ради стоит сказать, что оптимизатор может работать и после генерации уже исполняемого кода, но в наши дни такая схема встречается уже редко, поскольку производители компиляторов, как правило, выпускают целую линейку подобных продуктов для разных языков программирования и стараются делать оптимизаторы, которые можно встроить в любой из этих компиляторов. Какими именно методами оптимизатор может повышать скорость работы программы - это тема отдельной статьи, которую, возможно, вы когда-нибудь и сможете увидеть на страницах "Компьютерных вестей".

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

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


Дополнительные компоненты

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

Ассемблер и компоновщик в ряде случаев встроены прямо в компилятор, в других же случаях они выделяются в отдельные программы, которые запускаются после завершения работы самого компилятора. Их может и вовсе не быть, как, например, для компиляторов, преобразующих программы с одного языка высокого уровня на другой высокоуровневый язык (так называемых фронт-эндов), или они могут присутствовать только в виде, например, специфического сборщика, создающего код для виртуальной машины и помещающего его в какую-то специальную оболочку компоновщика (классический пример - Java с её JAR-файлами). Стоит, тем не менее, сказать пару слов о назначении этих двух инструментов.

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

Компоновщик создаёт из того кода, который сгенерировал ассемблер, исполняемые файлы. Даже для одной и той же процессорной архитектуры исполняемые файлы будут отличаться в зависимости от операционной системы. Например, для Windows формат исполняемых файлов - это Portable Executable (PE), а для Linux - Executable Linked File (EXE).


Резюме

Как видите, если смотреть на компиляторы со стороны, то всё в них просто и не вызывает никаких особенно заковыристых вопросов. На практике всё, мягко говоря, немного сложнее. И если вы вдруг решите написать собственный компилятор, то не стоит заранее пугаться, хотя к определённым сложностям нужно, как и в любой новой работе, быть готовым. Я бы лично рекомендовал начинать знакомство с предметом с написания какого-нибудь простого эзотерического языка вроде Brainfuck или Whitespace. Поскольку сам я в своё время интересовался благодаря своему знакомому Марату Духану первым из них, то и вам рекомендую его.

Вообще, если же вы вдруг решили проникнуть глубже в тайны создания компиляторов, то в Интернете для вас найдётся масса литературы - и простой, и академически точной и подробной. Начать можно, например, отсюда: kit.kulichki.net . Хотя сайт уже не обновлялся целую вечность, информация, размещённая на нём, подойдёт для новичка и не устареет ещё не один десяток лет. Вообще, если погуглить, информации найдёте очень много, даже придётся её фильтровать. Так что успехов вам с компиляторами!

Вадим СТАНКЕВИЧ

Здравствуйте, дорогие читатели! Сегодня мы с вами немного окунемся в теорию. Наверняка, вы все когда-то хотели отправить свою супер-пупер программу другу. Но как это сделать? Не заставлять же его устанавливать PascalABC.NET! О том, как это сделать, мы сегодня и поговорим.

Все языки программирования делятся на два типа - интерпретируемые и компилируемые .

Интерпретаторы

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

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

При интерпретации выполнение кода происходит последовательно строка за строкой (от инструкции до инструкции). Операционная система взаимодействует с интерпретатором, а не исходным кодом.

Примеры интерпретируемых языков: PHP, JavaScript, C#, Python.

Скомпилированные программы работают быстрее, но при этом очень много времени тратится на компиляция исходного кода.

Программы же, рассчитанные на интерпретаторы, могут выполняться в любой системе, где таковой интерпретатор присутствует. Типичный пример - код JavaScript. Интерпретатором его выступает любой современный браузер. Вы можете однократно написать код на JavaScript, включив его в html-файл, и он будет одинаково выполняться в любой среде, где есть браузер. Не важно, будет ли это Safari в Mac OS, или же Internet Explorer в Windows.

Компиляторы

Компилятор - это программа, превращающая исходный текст, написанный на языке программирования, в машинные инструкции.

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

При компиляции весь исходный программный код (тот, который пишет программист) сразу переводится в машинный. Создается так называемый отдельный исполняемый файл , который никак не связан с исходным кодом. Выполнение исполняемого файла обеспечивается операционной системой. То есть образуется, например,.EXE файл.

Примеры компилируемых языков: C, C++, Pascal, Delphi.

Ход работы компилятора.

Препроцессинг

Эту операцию осуществляет текстовый препроцессор .

Исходный текст частично обрабатывается - производятся:

  • Замена комментариев пустыми строками
  • Подключение модулей и т. д. и т. п.

Компиляция

Результатом компиляции является объектный код .

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

Компоновка

Компоновка также может носить следующие названия: связывание , сборка или линковка .

Это последний этап процесса получения исполняемого файла, состоящий из связывания воедино всех объектных файлов проекта .

EXE файл.

После компоновки у вас образуется.EXE файл вашей программы. Вы можете кинуть ее другу, и она откроется у него прямо в командной строке, как в старом добром DOS. Давайте попробуем создать.EXE файл. Все действия будут приводится в PascalABC.NET.

Заходим в Сервис -> Настройки -> Опции компиляции. Поверяем, стоит ли галочка напротив 2 пункта. Если стоит, то убираем ее.

Теперь откройте свою программу и запустите ее.

Откройте директорию, в которой у вас лежит исходный код программы.

Вот он,.EXE файл.

Кликаем по приложению. Как вы видите, после ввода данных, окошко сразу закрывается. Для того чтобы окно не закрывалось сразу, следует дописать две строчки кода, а именно: uses crt (перед разделом описания переменных) и readkey (в конце кода, перед оператором end).


Подключаем внешнюю библиотеку crt и используем встроенную в нее функцию readkey.

Теперь окно закроется по нажатию любой клавиши.

На заметку: PascalABC.NET - это интегрированная среда разработки.

Среда разработки включает в себя:

  • текстовый редактор;
  • компилятор;
  • средства автоматизации сборки;
  • отладчик.

На сегодня все! Задавайте любые вопросы в комментариях к этой статье. Не забывайте кликать по кнопочкам и делится ссылками на наш сайт со своими друзьями. А для того, чтобы не пропустить выход очередной статьи, рекомендую вам подписаться на рассылку новостей от нашего сайта. Одна из них находится в самом верху справа, другая - в футере сайта.