Компиля́тор — программа, переводящая написанный на языке программирования текст в набор машинных кодов [1][2][3] .
- 1Основная функциональность и терминология
- 2Виды компиляторов
- 3Виды компиляции
- 4Структура компилятора
- 5Генерация кода
- 5.1Генерация машинного кода
- 5.2Генерация байт-кода
- 5.3Динамическая компиляция
- 6.1Декомпиляция
- трансляцию всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, в эквивалентные программные модули на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда наязык ассемблера) [2][3][4] или непосредственно на машинном языке или ином двоичнокодовом низкоуровневом командном языке;
- последующую сборку исполняемой машинной программы, в том числе вставка в программу кода всех функций, импортируемых из статических библиотек и/или генерация кода запроса к ОС на загрузку динамических библиотек, из которых программой функции будут вызываться.
Этапы компиляции на Си: предобработка, трансляция, компоновка
- на фазе трансляции: исходный код программы, являющийся описанием алгоритма или программы на предметно-ориентированном языке программирования;
- на фазе компоновки: сгенерированные на фазе трансляции файлы объектных кодов модулей программы, а также файлы объектных кодов статических библиотек и данные об используемых динамических библиотеках.
Do’stlaringiz bilan baham:
Источник: fayllar.org
Можно ли создать программу на машинном коде?
Писать программы непосредственно в машинном коде возможно, однако это утомительно и подвержено ошибкам, так как необходимо управлять отдельными битами и вычислять числовые адреса и константы вручную. По этой причине машинный код практически не используется для написания программ.
Кто создал машинный код?
Autocode, впервые разработанный Аликом Гленни для компьютера Mark 1 в Университете Манчестера, был первым в истории скомпилированным языком, который был реализован, что означает, что он может быть переведен непосредственно в машинный код с помощью программы, называемой компилятором.
Какая функция программного обеспечения переводить исходный код в машинный код?
Объектный модуль, как правило, имеет расширение obj. Трансляторы делятся на два класса: компиляторы и интерпретаторы. Компилятор переводит весь исходный модуль на машинный язык.
На чем пишутся процессоры?
В состав современных средств написания и отладки программ для микроконтроллеров обычно входят эмуляторы процессоров или отладочные платы, текстовый редактор, компиляторы языка высокого уровня (чаще всего «C») и ассемблера, редактор связей и загрузчик программы в отладочную плату.
Доп Хусаинов НШ — Трансляция программы: этапы генерации кода и средства разработки
Где программировать на ассемблере?
Поэтому чаще всего на ассемблере пишут отдельно взятые хорошо оптимизированные функции, которые затем вызываются из языков более высокого уровня, таких как с++ и c#. Исходя из этого, наиболее удобной средой для программирования будет Visual Studio, в состав которой уже входит MASM….
- assembler.
- masm.
- 64-bit.
- visual studio.
- c#
Можно ли программировать на двоичном коде?
Обычному человеку читать такой код очень сложно, а вот для вычислительных машин он самый понятный. Двоичный код (машинный код) в наше время используется в программировании, ведь компьютер работает именно благодаря двоичному коду. Но не стоит думать, что процесс программирования сводится к набору единиц и нулей.
Кто создал первый программный код?
Язык программирования FORTRAN. Первый язык высокого уровня Фортран был создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Он предназначался для научных и технических расчетов. Название Fortran является сокращением от FORmula TRANslator (переводчик формул).
Кто создал первый компьютерный программный язык?
В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы.
Для чего предназначены транслятор?
Трансля́тор — программа или техническое средство, выполняющее трансляцию программы. Трансля́ция програ́ммы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке.
Какие функции выполняет интерпретатор?
К функциям интерпретатора командной строки относятся:
- Взаимодействие с пользователем (редактирование командной строки, история команд и т. д.).
- Обработка (расширение) шаблонов имен («*», «?» и т. д.).
- Перенаправление ввода-вывода команд.
- Управление заданиями.
На каком языке программируют процессоры?
Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы: Intel-синтаксис и AT
Как узнать машинный код?
Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.
Что такое 0 и 1 в программировании?
Двои́чный код — это способ представления данных в виде кода, в котором каждый разряд принимает одно из двух возможных значений, обычно обозначаемых цифрами 0 и 1. Разряд в этом случае называется двоичным разрядом.
Какой был самый первый язык программирования?
Фортран
Первый язык программирования — Фортран или Планкалкюль Plankalkül был изобретен в 1943-1945 году и впервые опубликован уже в 1948. Фортран создавали в период с 1954 года и до 1957. Позже программисты постоянно совершенствовали его и используют до сих пор — именно поэтому он более известен, чем Планкалкюль.
Источник: toptitle.ru
Тема 1.3 Отладка и тестирование программного продукта на уровне модулей
1. Что такое трансляция, компиляция, транслятор, компилятор? Из каких процессов состоит компиляция? Расскажите об общей структуре компилятора.
o Трансляция — перевод исходного языка в результирующий.
o Компиляция – преобразование программы, представленной на одном из ЯП, в машинный код, который принимается и исполняется процессором. Результатом компиляции является «объектный файл» с необходимыми внешними ссылками для компоновщика. Программа переведенная в машинный код еще не готова к выполнению.
o Объектный файл не может быть исполнен до тех пор, пока все модули и секции не будут в нем увязаны между собой. Это и делает редактор связей (компоновщик). Результатом его работы является единый файл: называемый «исполняемым файлом», который содержит весь текст результирующей программы на языке машинных кодов. Компоновщик может рождать сообщение об ошибке, если при попытке собрать объектные файлы в единое целое он не смог обнаружить какой-либо необходимой составляющей.
o Транслятор – это программа, которая переводит входную программу на исходном языке в эквивалентную её программу на результирующем языке.
o Компилятор – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.
1) Лексический анализ. На этой фазе последовательность символов исходного файла преобразуется в последовательность лексем.
2) Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в древо разбора.
3) Семантический анализ — это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики(СМЫСЛА, ЗНАЧЕНИЯ) входного языка. ИЛИ ТАК
3.1) Семантический анализ — устанавливает смысловую правильность синтаксических конструкций
4) Оптимизация. Удаляются избыточные команды и упрощается (где это возможно) код с сохранением его смысла.
5) Генерация кода. Из промежуточного представления порождается код на целевом языке (в том числе выполняется компоновка программы).
2. Какую роль выполняет лексический анализ в процессе компиляции? Как могут быть связаны между собой лексический и синтаксический анализ?
o Лексический анализ в процессе компиляции преобразует последовательность символов исходного файла в последовательность лексем.
o Лексический и синтаксический анализ имеют дело со структурными, т.е. внешними, текстовыми конструкциями языка.
o Семантика же, имеет дело с внутренним представлением «смысла» объектов, описанных в программе.
3. Компилятор можно построить, не используя лексический анализатор. Объясните, почему все-таки подавляющее большинство современных компиляторов используют фазу лексического анализа.
4. Постройте общую схему работы интерпретатора. В чем ее отличие от общей схемы работы компилятора?
Таблица 1: Схема работы Интерпретатора
Таблица 2: Схема работы Компилятора
5. Что такое таблица идентификаторов и для чего она предназначена? Какая информация может храниться в таблице идентификаторов?
o Таблицы идентификаторов – это организованные наборы данных, служащие для хранения информации об элементах исходной программы, которые затем используются для написания программы.
6. Какие специфические функции выполняет текстовый редактор в составе системы программирования? Как он должен быть взаимосвязан с другими модулями системы?
o Текстовый редактор в СП — это программа, позволяющая создавать, изменять и обрабатывать исходные тексты программ на языках высокого уровня.
История использования текстовых редакторов в Средах Программирования.
o Начнем с того, что поначалу текстовые редакторы использовались для написания различных текстов. Спустя некоторое время, возникновение интегрированных средств разработки позволили включить текстовые редакторы в состав «Систем Программирования». Благодаря этому стало возможным писать код в текстовом редакторе и выполнять его. Для удобства программиста, текстовый редактор обзавелся следующими возможностями:
1) Отображением обнаруженных ошибок на этапе компиляции и мест, где они находятся;
2) Подсветкой синтаксиса;
3) Помощи в до писании кода и многому другому.
7. Таблица лексем и таблица идентификаторов: различия.
o Таблица лексем содержит весь текст исходной программы, обработанный лексическим анализатором. В нее входят все возможные типы лексем, при этом, любая лексема может в ней встречаться любое число раз.
o Таблица идентификаторов содержит только следующие типы лексем: идентификаторы и константы. В нее не попадают ключевые слова входного языка, знаки операций и разделители.
8. Лексический анализ исходного текста программы «на лету».
o Лексический анализ «на лету» — это функция текстового редактора в составе Среды Программирования. Она заключается в поиске и выделении лексем входного языка в тексте программы непосредственно в процессе ее создания разработчиком.
9. В чем особенности функционирования компилятора в составе системы программирования по сравнению с его функционированием в виде отдельного программного модуля?
Первоначально компиляторы представляли собой обособленные программные модули, решающие исключительно задачу перевода исходного текста программы на входном языке в язык машинных кодов. Компиляторы создавались вне связи с другими техническими средствами, с которыми им приходилось взаимодействовать. В задачу разработчика программы входило обеспечить взаимосвязь всех используемых технических средств:
· подготовить тексты исходной программы на входном языке компилятора;
· подать входные данные в виде текста исходной программы на вход компилятора;
· получить от компилятора результаты его работы в виде набора объектных файлов;
· подать весь набор полученных объектных файлов вместе с необходимыми библиотеками подпрограмм на вход компоновщику;
· получить от компоновщика единый файл программы (исполняемый файл) и подготовить его к выполнению с помощью загрузчика;
· поставить программу на выполнение, при необходимости использовать отладчик для проверки правильности выполнения программы.
Все эти действия выполнялись с помощью последовательности команд, инициировавших запуск соответствующих программных модулей с передачей им всех необходимых параметров.
10. Почему компоновщик носит также название «редактор связей»? В чем заключается процедура разрешения внешних ссылок объектного файла?
o Компоновщик (редактор связей) предназначен для связывания между собой объектных файлов, порождаемых компилятором, а также файлов библиотек, входящих в состав системы программирования.
o Процедура разрешения ссылок сводится к вычислению значений адресных констант процедур, функций и переменных с учетом перемещений секций относительно начала собираемого программного модуля. Если при этом обнаруживаются ссылки к внешним переменным, отсутствующим в списке объектных модулей, редактор связей организует их поиск в библиотеках, доступных в системе программирования. Если же и в библиотеке необходимую составляющую найти не удается, формируется сообщение об ошибке.
11. В современных системах программирования загрузчик, как правило, отсутствует. Его функции выполняет ОС. Расскажите, как эти функции выполняются в различных ОС. Какую информацию должна получить ОС от системы программирования для выполнения загрузки исполняемого файла программы?
Загрузчик не всегда является составной частью системы программирования, поскольку выполняемые им функции очень зависят от архитектуры вычислительной системы, в которой выполняется результирующая программа, созданная системой программирования. С развитием архитектуры вычислительных средств компьютера появилась возможность выполнять трансляцию адресов непосредственно в момент запуска программы на выполнение.
Для этого потребовалось в состав исполняемого файла включить соответствующую таблицу, содержащую перечень ссылок на адреса, которые необходимо подвергнуть трансляции. В момент запуска исполняемого файла ОС обрабатывала эту таблицу и преобразовывала относительные адреса в абсолютные. Такая схема, например, характерна для ОС типа MS-DOS. В этой схеме модуль загрузчика как таковой отсутствует (фактически он входит в состав ОС) а система программирования ответственна только за подготовку таблицы трансляции адресов — эту функцию выполняет компоновщик.
В современных ОС существуют сложные методы преобразования адресов, которые работают непосредственно уже во время выполнения программы. Эти методы основаны на возможностях, аппаратно заложенных в архитектуру вычислительных комплексов. Методы трансляции адресов могут быть основаны на сегментной, страничной и сегментно-страничной организации памяти Тогда для выполнена трансляции адресов в момент запуска программы должны быть подготовлены соответствующие системные таблицы. Эти функции целиком ложатся на ОС, поэтому они не выполняются в системах программирования.
12. В чем сходство и в чем различие принципов распространения прикладного программного обеспечения, созданного для ОС типа UNIX и для ОС Linux проекта GNU? Почему системы программирования Си и Си++ являются неотъемлемой частью этих ОС?
ОС UNIX
Большинство UNIX программ являются платными и имеют закрытый код, который имеют право изменять только разработчики данного программного обеспечения.
ОС GNU
Идея же проекта GNU заключается в свободном распространении всех программ. Программы распространяются в виде исходного кода, причем пользователь получает этот код в пользование, имеет право вносить в него изменения, а также распространять исходный или модифицированный код. Данная компания является UNIX – совместимой программной системой, которая безвозмездно предоставляет всем желающим ее использовать.
Основные различия | |
Linux | UNIX |
Практически все ОС семейства Linux — бесплатные | Большинство ОС семейства UNIX — коммерческие |
ОС имеют большую универсальность, совместимы с «железом» от разных брендов, широким спектром файловых систем | ОС менее универсальны, каждый дистрибутив адаптирован к ограниченному количеству платформ и файловых систем |
Исходный код дистрибутивов открыт | Исходный код в большинстве случаев закрыт |
13. В чем заключаются основные особенности разработки программного обеспечения для глобальной сети Интернет? Почему в этой сети часто используются интерпретируемые языки?
14. Распознаватель: определение, назначение, виды распознавателей.
o Распознаватель (или разборщик) — это специальный автомат, который позволяет определить принадлежность цепочки символов некоторому языку.
o Задача распознавателя — дать ответ на вопрос, принадлежит ли она заданному языку или нет.
Перечислите виды распознавателей:
1) По видам считывающего устройства:
o Двусторонние и односторонние.
2) По видам устройства управления:
o Детерминированные и недетерминированные.
3) По видам внешней памяти:
o Распознаватели без внешней памяти;
o Распознаватели с ограниченной внешней памятью;
o Распознаватели с неограниченной внешней памятью.
15. Дайте определения выводимости цепочки, непосредственной выводимости, нетривиальной выводимости, длины вывода.
o Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.
o Выводом цепочки называется процесс порождения предложения языка на основе правил определяющей язык грамматики.
o Непосредственная выводимость — отношение между предложением и конечным, возможно пустым, множеством предложений.
16. Дайте определение цепочки символов, длины цепочки, пустой цепочки, равных цепочек символов. Основные операции над цепочками.
o Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.
o Количество символов в цепочке называют длиной цепочки. Длина цепочки символов α обозначается как |α|.
o Пустая цепочка символов — это цепочка, не содержащая ни одного символа. Пустая цепочка обозначается греческой буквой λ.
o Равными цепочки символов являются, когда цепочки символов α и β равны (совпадают), α=β, если они имеют один и тот же состав символов, одно и то же их количество и одинаковый порядок следования символов в цепочке.
17. Что такое язык, алфавит, синтаксис и семантика языка? Способы задания языков
o Язык — это заданный набор символов и правил, устанавливающих способы комбинации символов между собой для записи осмысленных текстов.
o Алфавит — это счетное множество допустимых символов языка.
o Синтаксис языка — это набор правил, определяющий допустимые конструкции языка. Синтаксис определяет “форму языка” — задает набор цепочек символов, которые принадлежат языку.
4.3. Задания для оценки освоения (часть1) МДК 01.02:
Источник: megalektsii.ru