Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМ1_ВТ_КОСы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
502 Кб
Скачать
☆

4.2.3 Тема 1.3 Отладка и тестирование программного продукта на уровне модулей

4.2.3.1 Ответить на вопросы:

  1. Что такое трансляция, компиляция, транслятор, компилятор? Из каких про­цессов состоит компиляция? Расскажите об общей структуре компилятора.

  • Трансляция - перевод исходного языка в результирующий.

  • Компиляция – преобразование программы, представленной на одном из ЯП, в машинный код, который принимается и исполняется процессором. Результатом компиляции является "объектный файл" с необходимыми внешними ссылками для компоновщика. Программа переведенная в машинный код еще не готова к выполнению.

  • Объектный файл не может быть исполнен до тех пор, пока все модули и секции не будут в нем увязаны между собой. Это и делает редактор связей (компоновщик). Результатом его работы является единый файл: называемый «исполняемым файлом», который содержит весь текст результирующей программы на языке машинных кодов. Компоновщик может рождать сообщение об ошибке, если при попытке собрать объектные файлы в единое целое он не смог обнаружить какой-либо необходимой составляющей.

  • Транслятор – это программа, которая переводит входную программу на исходном языке в эквивалентную её программу на результирующем языке.

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

  • Процесс компиляции:

1) Лексический анализ. На этой фазе последовательность символов исходного файла преобразуется в последовательность лексем.

2) Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в древо разбора.

3) Семантический анализ — это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики(СМЫСЛА, ЗНАЧЕНИЯ) входного языка. ИЛИ ТАК

3.1) Семантический анализ — устанавливает смысловую правильность синтаксических конструкций

4) Оптимизация. Удаляются избыточные команды и упрощается (где это возможно) код с сохранением его смысла.

5) Генерация кода. Из промежуточного представления порождается код на целевом языке (в том числе выполняется компоновка программы).

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

  • Лексический анализ в процессе компиляции преобразует последовательность символов исходного файла в последовательность лексем.

  • Лексический и синтаксический анализ имеют дело со структурными, т.е. внешними, текстовыми конструкциями языка.

  • Семантика же, имеет дело с внутренним представлением «смысла» объектов, описанных в программе.

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

  1. Постройте общую схему работы интерпретатора. В чем ее отличие от общей схемы работы компилятора?

Таблица 1: Схема работы Интерпретатора

Таблица 2: Схема работы Компилятора

  1. Что такое таблица идентификаторов и для чего она предназначена? Какая информация может храниться в таблице идентификаторов?

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

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

  • Текстовый редактор в СП — это программа, позволяющая создавать, изменять и обрабатывать исходные тексты программ на языках высокого уровня.

История использования текстовых редакторов в Средах Программирования.

  • Начнем с того, что поначалу текстовые редакторы использовались для написания различных текстов. Спустя некоторое время, возникновение интегрированных средств разработки позволили включить текстовые редакторы в состав "Систем Программирования". Благодаря этому стало возможным писать код в текстовом редакторе и выполнять его. Для удобства программиста, текстовый редактор обзавелся следующими возможностями:

1) Отображением обнаруженных ошибок на этапе компиляции и мест, где они находятся;

2) Подсветкой синтаксиса;

3) Помощи в до писании кода и многому другому.

  1. Таблица лексем и таблица идентификаторов: различия.

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

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

  1. Лексический анализ исходного текста программы «на лету».

  • Лексический анализ «на лету» - это функция текстового редактора в составе Среды Программирования. Она заключается в поиске и выделении лексем входного языка в тексте программы непосредственно в процессе ее создания разработчиком.

  1. В чем особенности функционирования компилятора в составе системы про­граммирования по сравнению с его функционированием в виде отдельного программного модуля?

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

  • подготовить тексты исходной программы на входном языке компилятора;

  • подать входные данные в виде текста исходной программы на вход компилятора;

  • получить от компилятора результаты его работы в виде набора объектных файлов;

  • подать весь набор полученных объектных файлов вместе с необходимыми библиотеками подпрограмм на вход компоновщику;

  • получить от компоновщика единый файл программы (исполняемый файл) и подготовить его к выполнению с помощью загрузчика;

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

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

  1. Почему компоновщик носит также название «редактор связей»? В чем за­ключается процедура разрешения внешних ссылок объектного файла?

  • Компоновщик (редактор связей) предназначен для связывания между собой объектных файлов, порождаемых компилятором, а также файлов библиотек, входящих в состав системы программирования.

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

  1. В современных системах программирования загрузчик, как правило, отсутст­вует. Его функции выполняет ОС. Расскажите, как эти функции выполняют­ся в различных ОС. Какую информацию должна получить ОС от системы программи­рования для выполнения загрузки исполняемого файла программы?

Загрузчик не всегда является составной частью системы программирования, поскольку выполняемые им функции очень зависят от архитектуры вычислительной системы, в которой выполняется результирующая программа, созданная системой программирования. С развитием архитектуры вычислительных средств компьютера появилась возможность выполнять трансляцию адресов непосредственно в момент запуска программы на выполнение. Для этого потребовалось в состав исполняемого файла включить соответствующую таблицу, содержащую перечень ссылок на адреса, которые необходимо подвергнуть трансляции. В момент запуска исполняемого файла ОС обрабатывала эту таблицу и преобразовывала относительные адреса в абсолютные. Такая схема, например, характерна для ОС типа MS-DOS. В этой схеме модуль загрузчика как таковой отсутствует (фактически он входит в состав ОС) а система программирования ответственна только за подготовку таблицы транс­ляции адресов — эту функцию выполняет компоновщик.

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

  1. В чем сходство и в чем различие принципов распространения прикладного программного обеспечения, созданного для ОС типа UNIX и для ОС Linux проекта GNU? Почему системы программирования Си и Си++ являются неотъемлемой частью этих ОС?

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

  1. Распознаватель: определение, назначение, виды распознавателей.

  • Распознаватель (или разборщик) — это специальный автомат, который позволяет определить принадлежность цепочки символов некоторому языку.

  • Задача распознавателя - дать ответ на вопрос, принадлежит ли она заданному языку или нет.

Перечислите виды распознавателей:

1) По видам считывающего устройства:

  • Двусторонние и односторонние.

2) По видам устройства управления:

  • Детерминированные и недетерминированные.

3) По видам внешней памяти:

  • Распознаватели без внешней памяти;

  • Распознаватели с ограниченной внешней памятью;

  • Распознаватели с неограниченной внешней памятью.

  1. Дайте определения выводимости цепочки, непосредственной выводимости, нетривиальной выводимости, длины вывода.

  • Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.

  • Выводом цепочки называется процесс порождения предложения языка на основе правил определяющей язык грамматики.

  • Непосредственная выводимость — отношение между предложением и конечным, возможно пустым, множеством предложений.

  1. Дайте определение цепочки символов, длины цепочки, пустой цепочки, равных цепочек символов. Основные операции над цепочками.

  • Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим.

  • Количество символов в цепочке называют длиной цепочки. Длина цепочки символов α обозначается как |α|.

  • Пустая цепочка символов — это цепочка, не содержащая ни одного символа. Пустая цепочка обозначается греческой буквой λ.

  • Равными цепочки символов являются, когда цепочки символов α и β равны (совпадают), α=β, если они имеют один и тот же состав символов, одно и то же их количество и одинаковый порядок следования символов в цепочке.

  1. Что такое язык, алфавит, синтаксис и семантика языка? Способы задания языков

  • Язык — это заданный набор символов и правил, устанавливающих способы комбинации символов между собой для записи осмысленных текстов.

  • Алфавит — это счетное множество допустимых символов языка.

  • Синтаксис языка — это набор правил, определяющий допустимые конструкции языка. Синтаксис определяет “форму языка” — задает набор цепочек символов, которые принадлежат языку.

  • Семантика языка — это раздел языка, определяющий значение предложений языка. Семантика определяет “содержание языка” — задает смысл для всех допустимых цепочек языка.