Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
StartModul_CPP_Charp_VB_New.docx
Скачиваний:
19
Добавлен:
27.05.2015
Размер:
942.2 Кб
Скачать

Нет

Собственная оценка способности реализовать общие и частные цели

Да

Неосвоенные части модуля

?

Нет

Предварительный тест

Да

Следующий модуль

?

Нет

Входной тест

Восполнение пробелов входа

Предыдущий модуль

Да

Изучение модуля

Условные обозначения:

Да - положительный результат;

Нет - отрицательный результат;

? - частично положительный результат.

Цели изучения модуля

Общая цель

Изучив модуль, вы будете уметь разрабатывать консольные приложения, в которых используются разработанные вами статические методы

 Частные цели

После изучения всех учебных элементов этого модуля вы будете способны:

  • ;

  • ;

Предварительный тест

Задание 1.

Уровень, необходимый для изучения модуля

Приступая к изучению данного модуля вы

должны уметь:

  1. С помощью средств Visual Studio создавать проекты консольных приложений.

  2. Формировать текст приложения.

  3. Активизировать приложение в режиме отладки и без отладки.

  4. Завершать работу приложения.

Входной тест

Задание 1.

Проверка ответов входного теста и восполнение пробелов

Задание 1.

Пункт A.

1. Правильный ответ.

2. Оценка ответа:

  • Если ваш ответ правильный, переходите к следующему вопросу.

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

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

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

3. Восполнение пробелов.

Для определения переменных используется одна из следующих конструкций:

Средства обучения

1. Системы программирования и языки программирования

Цели

Изучив данный учебный элемент, вы будете:

;

  • ;

  • ;

  • ;

Существует несколько определений понятия программы. Вот некоторые из них:

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

  • Компьютерная программа - это алгоритм, записанный на понятном для компьютера языке.

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

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

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

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

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

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

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

1.1. Системы программирования

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

Процесс создания вычислительных программ включает:

  1. Разработку алгоритма (обычно структурированного);

  2. Кодирование алгоритма на языке программирования;

  3. Трансляцию программы на новый язык в форме объектного кода или к другой приемлемой форме;

  4. Построение загрузочного модуля, готового к исполнению.

Для реализации этих этапов задействованы следующие средства:

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

  • трансляторы;

  • сборщики (редактор внешних связей, компоновщик);

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

  • библиотеки периода трансляции и выполнения;

  • монитор, объединяющий в себе вышеперечисленные средства и организующий функционирование системы программирования в целом;

  • справочная система.

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

Этот минимум, позволяющий достаточно эффективно вести процесс создания программ, был представлен ещё в начале 70-х годов XX столетия. Однако настоящую популярность такой интегрированный набор инструментов приобрёл лишь в середине 1980-х годов благодаря компании Borland Software Corporation. Их пакет Turbo Pascal впервые появился в 1983 году для операционной системы CP/M, а в начале 1984 года был перенесён в MS DOS. Практически всё начало истории персональных компьютеров IBM PC связано с системой Turbo Pascal – популярнейшей средой разработок.

Языки, участвующие в процессе создания программ

В процессе создания программ участвуют следующие языки:

Естественные языки Языки моделирования Языки программирования

Высокого уровня Низкого уровня

Языки ассемблера Машинные языки

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

  • элементы модели – фундаментальные концепции моделирования и их семантику;

  • нотацию – визуальное представление элементов моделирования;

  • руководство по использованию – правила применения элементов в рамках построения моделей предметной области.

Принято выделять два поколения языков моделирования.

  • Первое поколение – языки структурного системного анализа и проектирования. Они появились в середине 70-х годов XX столетия.

  • Второе поколение – объектно-ориентированные языки моделирования. Массовое появление и развитие этих языков приходится на начало 90-х годов XX столетия.

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

Таблица 1.3.2.1. Поколения языков программирования

Номер поколения

Группа языков

Период появления

1

Машинные языки

Появились в середине 40-х годов XX столетия.

2

Языки ассемблеров

Появились в конце 50-х годов XX столетия. Первые версии языка Фортран можно трактовать как язык ассемблера верхнего уровня.

3

Процедурные языки

Появились в начале 60-х годов XX столетия. Это этап появления языков программирования высокого уровня (например, Algol-60).

4

Языки поддержки сложных структур данных

Появились в конце 60-х годов XX столетия. Представителем является SQL.

5

Языки искусственного интеллекта

Появились в начале 70-х годов XX столетия. Представителем является Prolog.

6

Языки нейронных сетей

Начало разработки относится к середине 80-х голов XX столетия. В России научная школа в теории нейронных сетей зародилась к концу 60-х годов XX столетия.

Классификация языков программирования

Современное состояние языков программирования можно представить в виде показанной на рис. 1.1.1 классификации.

Рис. 1.1.1. Классификация языков программирования

Процедурное неструктурное программирование. Процедурные языки имеют средства для написания программ в форме последовательности указаний, реализующих данный алгоритм. Основной единицей кодирования для этих языков были подпрограммы, кодируемые последовательностью указаний, каждое из которых кодировало действие, предусмотренное алгоритмом. Правила кодирования алгоритмов были ориентированы на идею машины фон Неймана и не учитывали удобства отладки программы. Примерами таких языков являются Фортран, ПЛ/1, Алгол 60, Кобол.

Структурное программирование. Методология данного подхода к программиро-ванию основана на разработке структурированных алгоритмов. Алгоритм называется структурированным, если он представлен как последовательность базовых управляющих структур. Базовая управляющая структура – это стандартная схема перехода от одного действия к другому. Каждая базовая управляющая структура кодируется одним оператором языка программирования. Основной единицей разработки при структурном подходе к программированию является подпрограмма. Программа записывается как некоторая управляющая часть, которая определяет порядок вызова подпрограмм и отображения итогов в нужной для пользователя форме. Структурный подход обеспечивает для разработчика создание поле понятных и легко читаемых программ упрощает их тестирование и отладку. Представителями языков программирования этой группы являются Pascal, ADA и C.

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

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

  • совокупности базовых функций;

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

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

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

Первым таким языком стал ЛИСП (LISPLISt Processing, т.е. обработчик списков), созданный в 1959 г. Джоном Маккарти. В настоящее время внедряется язык Microsoft F#.

Логическое программирование. Создание языка искусствен6ного интеллекта Пролог (PROLOGPROgramming in LOGic – программирование в терминах логики) в 1973 г. Французским учёным Аланом Кольмероэ открыло новую область – логическое и реляционное программирование.

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

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

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

Основоположником данного направления является язык Смолток (Smalltalk), первона-чально предназначенный для реализаций машинной графики. Работа над языком началась в 1970 г. В исследовательской лаборатории XEROX (США), а завершилась в 1980 г. Окончательным вариантом интерпретатора Smalltalk-80. Данный язык характерен тем, что в нем отсутствуют операторы или данные, все, что входит в Смолток, является объектом, а объекты общаются друг с другом исключительно с помощью сообщений.

В настоящее время существует множество объектно-ориентированных языков программирования. К наиболее распространённым современным языкам этой группы относятся C++, C#, Delphi, Basic и Java.

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

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

К наиболее распространённым системам визуального программирования относятся: Visual Basic, Delphi, CodeGear RAD Studio 2009, Visual Studio 2008, C++ Builder. Это системы программирования самого высокого уровня.

Языки программирования баз данных. Эти языки отличаются от алгоритмических прежде всего своим функциональным назначением. При работе с базами данных наиболее часто выполняются следующие операции:

  • создание, преобразование, удаление таблиц базы данных;

  • поиск, отбор, сортировка по запросам пользователя;

  • добавление новых записей или модификация существующих;

  • удаление записей;

  • отображение отчётов.

Для обработки больших массивов информации и выборки записей по определённым признакам был создан структурированный язык запросов SQL (Structured Query Language).

Практически в каждой системе управления базами данных (СУБД) имеется свой универсальный язык, ориентированный на её особенности. В настоящее время ведущими производителями СУБД являются Microsoft(SQL Server), IBM (DB2), Orecle, Software AG (Adabas), Informix и Sybase.

Языки программирования для компьютерных сетей. Отличительной особенностью сетевых языков является то, что они являются интерпретируемыми. Интерпретаторы для них распространяются бесплатно, а сами программы – в исходных текстах. Такие языки получили название скрипт-языков. Представителями этого множества языков являются HTML, Perl, Tcl/Tk и VRML.

HTML (Hyper Text Markup Language) – универсальный язык разметки гипертекста, используемый для подготовки Web-документов для сети Internet. Язык представляет собой набор элементарных команд форматирования текста, добавления графических объектов, задания шрифта и цвета, организации ссылок и таблиц. Текст в этом языке кодируется в ASCII и поэтому может быть создан и отредактирован в любом текстовом редакторе. Все Web-страницы написаны на этом языке или используют его расширение.

Perl. В 80-х гг. Ларри Уолл разработал язык Perl, который предназначался для эффективной обработки больших текстовых файлов, создания текстовых отчётов и управления задачами. В его состав входят многочисленные функции работы со строками, массивами, всевозможные средства преобразования данных, управления процессами, работы с системной информацией и др.

Tcl/Tk. В конце 80-х гг. Джон Аустираут придумал скрипт-язык Tcl и библиотеку Tk. Это была попытка создания идеального скрипт-языка. Он ориентирован на автоматизацию рутинных операций и состоит из мощных команд, выполняющих обработку бестипных объектов.

VRML. В 1994 г. Был создан язык VRML для организации виртуальных трёхмерных интерфейсов в Интернете. Он ориентирован на описание разнообразных трёхмерных объектов, цвето-теневого освещения в текстовом виде и позволяет создавать различные сценарии миров, путешествовать по ним, рассматривать с разных сторон, вращаться в любых направлениях, масштабировать, управлять освещённостью и многое другое.

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

1.2. Жизненный цикл программного обеспечения

Жизненный цикл программного обеспечения включает в себя шесть этапов:

    1. Анализ требований,

    2. Определение спецификаций,

    3. Проектирование,

    4. Кодирование,

    5. Тестирование,

    6. Сопровождение.

Анализ требований. На этом этапе должны быть получены чёткие ответы на следую-щие вопросы:

Что представляют собой входные данные?

Что должна делать программа?

Какими должны быть выходные данные?

Часто при этом строится математическая модель объекта или явления. Модель отражает лишь существенные стороны объекта, но не тождественна ему. Степень соответствия модели объекту проверяется практикой, экспериментом. В случае необходимости модель уточняется. Примером простейшей модели является модель равноускоренного движения S=vt.

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

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

  1. Формальное построение модели задачи – предполагает построение модели с характеристиками, адекватными оригиналу, на основе какого-либо его физического или информационного принципа; анализируется характер и сущность величин, используемых в задаче.

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

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

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

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

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

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

Отладка и тестирование. Для перевода текста программы с языка высокого уровня на машинный язык служат специальные программы - трансляторы. Помимо трансляторов разработаны и другие программы, облегчающие работу человека на компьютере (компоновщики, загрузчики, отладчики и т.п.). Эти программы объединяются в системы программирования, их ещё называют средами программирования (например, среда Турбо-Паскаля, Delphi, CodeGear RAD Studio, Visual Studio и т.д.).

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

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

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

  • обнаружение ошибок,

  • локализация ошибок,

  • исправление ошибок.

Всегда надо помнить золотое правило программистов: «Каждая программа содержит как минимум одну ошибку». Ошибки весьма условно можно разделить на три группы.

    • алгоритмические,

    • ошибки программирования,

    • синтаксические ошибки кодирования.

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

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

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

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

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

1.3. Критерии качества программ

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

    • насколько хорошо (просто, надёжно, эффективно) можно использовать программный продукт;

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

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

Дерево характеристик качества программных продуктов представлено на рис.1.3.1.

Мобильность

Исходная полезность

Надёжность

Эффективность

Общая полезность программного продукта

Учёт человеческого фактора

Удобство эксплуатации

Модифицируемость

Коммуникативность

Рис. 1.3.1. характеристики качества программных продуктов

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

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

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

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

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

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

В условиях существования рынка программных продуктов важными характеристиками являются:

  • стоимость;

  • количество продаж;

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

  • известность фирмы-разработчика и программы;

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

1.4. Проверка достижения целей

1.5. Правильные ответы

  1. Компиляторы и средства технического обслуживания

Цели

Изучив данный учебный элемент, вы будете:

;

  • ;

  • ;

  • ;

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

Перевод программы с языка одного уровня на язык более низкого уровня выполняют специальные программы, которые называются трансляторами, а перевод программы с языка одного уровня на язык более высокого уровня – программы, называемые декомпилятораторами, деассемблерами и т.п.

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

  • трансляция;

  • компоновка

  • загрузка;

  • выполнение (активизация).

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

Исходная программа

Компилятор

Привязка адресов периода трансляции

Объектный модуль

Сборщик (Редактор внешних связей)

Библиотеки

Загружаемый модуль

Привязка адресов периода сборки

Загрузчик

DLL

Привязка адресов периода выполнения

Двоичный образ рабочей программы

Рис. 2.1. Этапы обработки программ на языке высокого уровня и привязка адресов

В зависимости от режима работы трансляторы делятся на следующие группы:

  • компиляторы;

  • интерпретаторы;

  • ассемблеры,

  • декомпиляторы,

  • деассемблеры.

Общая схема трансляторов, их компонентов и связанных с ними инструментов представлена на рис. 2.2.

Трансляторы

Декомпиляторы

Компиляторы

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

Ассемблеры

Анализатор

Генератор анализаторов

Оптимизатор

Защита от декомпиляции

Интерпретатор промежуточного представления

Генератор кода

Рис. 2.2. Трансляторы

На этапе трансляции выполняется перевод текста программы с одного языка на другой. При этом целевым языком не обязательно будет машинный язык.

В функции транслятора входит:

  • перевод текста программы с одного языка на другой;

  • выявление имеющихся синтаксических ошибок;

  • вычисление значений некоторых выражений;

  • оптимизация результата трансляции по занимаемому объёму оперативной памяти или быстродействию в период запуска программы на выполнение.

В процессе перевода транслятор заменяет указание языков программирования одного уровня (например, C, С++ или Pascal) последовательностью предложений целевого языка (иного языка высокого уровня, языка ассемблера, машинного языка).

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

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

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

В зависимости от внутренней структуры и методики трансляции можно выделить следующие виды компиляторов:

  • Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором. Векторный процессор — это процессор, в котором операндами некоторых команд могут выступать упорядоченные массивы данных — векторы. Отличается от скалярных процессоров, которые могут работать только с одним операндом в единицу времени. Абсолютное большинство процессоров являются скалярными или близкими к ним. Векторные процессоры были распространены в сфере научных вычислений, где они являлись основой большинства суперкомпьютеров начиная с 1980-х до 1990-х. Но резкое увеличение производительности и активная разработка новых процессоров привели к вытеснению векторных процессоров со сферы повседневных процессоров.

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

  • Диалоговый.

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

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

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

  • Отладочный. Устраняет отдельные виды синтаксических ошибок.

  • Резидентный. Постоянно находится в основной памяти и доступен для повторного использования многими задачами.

  • Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.

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

Виды компиляции.

  • Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.

  • Построчная. То же, что и интерпретация.

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

Этапы трансляции

Процесс компиляции состоит из следующих этапов:

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

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

  3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — напр. привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

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

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

В конкретных реализациях компиляторов, эти этапы могут быть раздельными или совмещёнными в том или ином виде. Основные информационные связи и потоки компиляторов представлены на рис. 2.3.

Исходная программа

Лексический анализатор

Последовательность лексем

Символьные таблицы и интерфейс доступа к ним

Интерфейс с ОС и обработчик ошибок

Синтаксический анализатор

Промежуточный код

Семантический анализатор

Промежуточный код

Генератор кода

Итог трансляции - объектный код

Рис. 2.3. Основные информационные связи и потоки компилятора

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]