Этапы трансляции программы. Состав набора средств разработки и отладки программы на языке высокого уровня. Примеры инструментальных средств.
Ответ:
Трансляция – перевод программы с языка программирования на язык машинных кодов (выполняется транслятором)
Транслятор:
· Анализирует программу на наличие ошибок (синтаксических и др.).
· Генерирует выходную (объектную) программу на языке машинных команд.
· Распределяет память для объектной программы.
Этапы трансляции
· Предварительная обработка (препроцессинг, preprocessing):
o Преобразование исходного текста программы без его анализа.
o Выполняется препроцессором (для C/C++) или компилятором (C#).
o Директивы – специальным образом выделяемые в программе команды управления препроцессором (#define, #if, #pragma,...) для:
§ Включения файлов в текст программы.
§ Определения макроса (текстовой подстановки).
§ Задания параметров условной компиляции.
o Полезна при отладке программы.
o Может приводить к появлению труднообнаруживаемых ошибок.
1. На входе – исходные файлы.
2. На выходе – "единицы трансляции".
· Компиляция - преобразование в машинные команды, выполняется в несколько подэтапов:
o Лексический анализ.
o Синтаксический анализ.
o Семантический анализ.
o Оптимизация.
o Генерация кода.
1. На входе – единицы трансляции
2. На выходе – машинный код (объектные модули)
· Связывание (компоновка, линковка) выполняется с целью:
o Формирования единого адресного пространства исполняемой программы.
o Размещения всех объектных модулей по соответствующим адресам.
o Изменению относительных адресов процедур и переменных каждого объектного модуля на абсолютные (в пределах всей программы) – внешнее связывание.
§ На входе – объектные модули, библиотечные файлы.
§ На выходе – исполняемый файл (или библиотечные файлы).
Минимальный набор средств разработки
· Текстовый редактор:
o Создание и редактирование текста программ.
o Подсветка синтаксиса, предиктивный ввод текста(автодополнение).
· Препроцессор:
o Предварительная обработка текста
o Удаление комментариев, реализация директив (#) и макросов (текстовых подстановок)
· Компилятор:
o Трансляция текстовых модулей в объектные модули на низкоуровневом языке
· Библиотека подпрограмм:
o Статическая – вставляется в исполняемый модуль на этапе компоновки.
o Динамическая (dll) - загружается в память по мере необходимости, сокращает размер исполняемого модуля.
· Компоновщик (Linker):
o Компоновка нескольких объектных модулей в один исполняемый модуль
o Использует таблицы символов и библиотеки.
Расширенный набор средств разработки
· Отладчик:
o Трассировка.
o Отслеживание, установка, изменение переменных.
o Установка и удаление контрольных точек (breakpoints, watchpoints).
o Условный и безусловный останов.
· Профайлер:
o Сбор характеристик работы программы:
§ Время выполнения отдельных фрагментов (обычно подпрограмм).
§ Число верно предсказанных условных переходов.
o Используются для анализа проведения программы (граф вызовов) и оптимизации программы
· Статический анализатор кода:
o Анализ программы без ее выполнения.
o Warnings для компиляторов С/С++:
§ Чтение неинициализированной переменной.
§ Возможность выхода за границы массива.
§ Опасность недокументированного поведения.
ИнтегрированнаясредаразработкиIDE (Integrated development environment) или IDDE(Integrated development& debug environment).
Включает в себя:
· Текстовый редактор.
· Компилятор.
· Компоновщик (средства автоматизации сборки проекта).
· Отладчик.
Содержит средства для:
· Интеграции с системами управления версиями.
· Конструирования GUI.
· Поддержки ООП (браузер классов, инспектор объектов, диаграмма иерархии классов)
Бывают:
· "Многоязычные" (Visual Studio, IntelliJ IDEA, Eclipse, Code::Blocks).
· "Одноязычные" (Delphi, Dev-C++)
Структура программы на языке Си.
Ответ:
Исходная программа:
· Директивы препроцессора.
· Указания компилятору.
· Объявления:
o Имена и атрибуты используемых переменных, функций и типов.
· Определения:
o Определения переменных:
§ В дополнение к типу задаёт начальное значение.
o Определения функций:
§ Имя функции, формальные параметры, возвращаемая величина.
§ Объявления.
§ Операторы.
Структура программы на языке С:
· Подключение заголовочных файлов.
· Описание констант, определение макросов.
· Описание глобальных переменных.
· Объявление функций.
· Определение функций.
· Описание локальных переменных функций.
· Функция main():
o Точка входа в функции.
o Точка выхода из функции.