Курсовая работа (т): Системы программирования

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

ФГАОУ ВПО «Северо-Восточный Федеральный университет имени М.К. Аммосова»











Курсовая работа

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

Выполнила: студент ИМИ группы ПМ12-2

Дмитриева Екатерина Александровна

Проверил: Антонов Михаил Юрьевич






Якутск 2014г

Общая характеристика работы


Объект исследования:

1)      Microsoft Visual C++;

2)      ArgoUML;

3)      LEX и YACC;

4)      Intel Parallel Studio XE;

5)      Intel C++ Studio XE;

6)      MMX/SSE;

7)      Microsoft Visual Studio;

8)      Intel Parallel Studio XE;

9)      Github;

10)    Bitbucket.

Цель работы:

1)      подготовить место для выполнения работы и подготовить программу, выводящую на экран сообщение “Hello World!”;

)        построить диаграммы;

)        узнать про компиляторов, изучить входные и выходные файлы;

)        Разработать лексический анализатор для языка программирования с использованием ПО LEX;

)        Приобрести лицензию Studio XE для Linux или С++ Studio для Win;

)        Кратко описать расширений MMX/SSE;

)        Написать программу умножения матриц, с замером времени на операцию.

)        Сравнить компиляторы msvs/gcc с компилятором intel;

)        Сделать анализ и обзор технологии GIT;

)        Зарегистрироваться и создать свой репозиторий.

Задачи:

)        Ознакомиться с программой;

2)      Подготовить место для выполнения работы;

)        Разбор программы;

)        Сделать реферат для выполнения домашней работы №3;

)        Разработать лексический анализатор для языка программирования с использованием LEX;

)        Описать описание продуктов VTune Amplifier, Composer, Inspector;

)        Приобрести лицензию Studio XE;

)        Описать расширения MMX/SSE, узнать какие языки реализуют автоматическое управление освобождением динамической памяти;

)        Установить Intel Parallel Studio XE;

10)    Сравнить репозитории github и bit bucket.

Введение


Я буду работать на программе Microsoft Visual C++ 2008. Для написания программы на C++ нужно создать проект. Для этого нужно выбрать соответствующую ссылку на стартовой странице (“New Project”). В появившемся окне нужно выбрать тип проекта (Win 32 Console Application), и задать его имя и расположение, после чего нажать кнопку “OK”.

Теперь нужно определить свойства проекта. Для этого в появившемся окне нажать “Next”, и в появившемся после этого установить флаг “Empty Project” и нажать “Finish”.

Создастся пустой проект и откроется в обозревателе проектов (Solution Explorer). Для добавления в проект файлов, содержащих текст программы, нужно щелкнуть правой кнопкой мыши по заголовку проекта и в появившемся окне контекстном меню выбрать пункт Add, и затем New Item и в окне задать тип добавляемого файла (C++ File(.cpp)) и его имя. После этого нужно выбрать Add, и создается указанный файл, добавляется в проект и открывается в редакторе.

Для запуска программы нужно воспользоваться меню “Debug”, пункт “Start without debugging” и нажать “Yes”. Программа компилируется, компонуется, если нет ошибок, запускается, для чего открывается новое текстовое окно терминала. После завершения работы программы выдается сообщение “Press any key to continue…”, после нажатия любой клавиши окно закроется.

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

Также, для каждой программы нужно создавать свой проект. Для этого после завершения работы над программой нужно закрыть проект, выбрав пункт “Close solution” меню “File”, и затем создать для следующей программы новый проект.

Для выполнения домашней работы №2, я буду работать в ArgoUML, т.к. это бесплатное программное обеспечение.

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

Рисунок

Унифицированный язык моделирования (Unified Modeling Language - UML) это язык для специфицирования, визуализации, конструирования и документирования программных систем, а так же бизнес моделей и прочих не программных систем.

Диаграмма вариантов использования (use case diagram).

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

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

·        определить общие границы и контекст моделируемой предметной области;

·        сформулировать общие требования к функциональному поведению проектируемой системы;

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

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

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

Диаграмма классов (class diagram).

Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами других классов.

Диаграмма состояний (statechart diagram).

Диаграммы состояний чаще всего используются для описания поведения отдельных объектов, но также могут быть применены для спецификации функциональности других компонентов моделей, таких как варианты использования, актеры, подсистемы, операции и методы. Понятие состояния (state) является фундаментальным не только в метамодели языка UML, но и в прикладном системном анализе. Вся концепция динамической системы основывается на понятии состояния. Семантика же состояния в языке UML имеет ряд специфических особенностей.

Диаграмма деятельности (activity diagram).

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

Диаграмма последовательности (sequence diagram).

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

Чтобы выбрать диаграммы нажимаем вкладку «Создать диаграммы».


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

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

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

Наконец, бурно развиваются различные параллельные архитектуры. Среди них отметим векторные, многопроцессорные, с широким командным словом (вариантом которых являются суперскалярные ЭВМ).

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

·  Транслятор - программа, которая переводит программу, написанную на одном языке, в эквивалентную ей программу, написанную на другом языке.

·        Компилятор - транслятор с языка высокого уровня на машинный язык или язык ассемблера.

·        Ассемблер - транслятор с языка Ассемблера на машинный язык.

·        Интерпретатор - программа, которая принимает исходную программу и выполняет ее, не создавая программы на другом языке.

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

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

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

Этапы процесса компиляции

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

·        лексический анализ;

·        синтаксический анализ;

·        семантический анализ;

·        распределение памяти;

·        генерация и оптимизация объектного кода.

Lex - программа для генерации лексических анализаторов <#"870790.files/image003.gif">

Рисунок 1

Рисунок 2

Глава 2. Домашняя работа №2


Построение UML диаграммы

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

Рисунок 1.

Диаграмму состояний я сделала так (рисунок 2):

Рисунок 2.

Диаграмма деятельности (Рисунок 3):

Рисунок 3

Диаграмма классов (рисунок 4)

Рисунок 4.

Диаграмма последовательности (Рисунок 5):

Рисунок 5

Глава 3. Домашняя работа №3


Компиляторы компиляторов. Лексический анализатор LEX и синтаксический анализатор YACC

Структура компилятора

Обобщенная структура компилятора и основные фазы компиляции показаны на рисунок 1.

Рисунок 1.

Лексический анализ.

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

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

Лексический анализатор может быть как самостоятельной фазой трансляции, так и подпрограммой, работающей по принципу «дай лексему». В первом случае (рис. 1, а) выходом анализатора является файл лексем, во втором (рис. 1, б) лексема выдается при каждом обращении к анализатору (при этом, как правило, признак класса лексемы возвращается как результат функции «лексический анализатор», а значение лексемы передается через глобальную переменную). С точки зрения обработки значений лексем, анализатор может либо просто выдавать значение каждой лексемы, и в этом случае построение таблиц объектов (идентификаторов, строк, чисел и т.д.) переносится на более поздние фазы, либо он может самостоятельно строить таблицы объектов. В этом случае в качестве значения лексемы выдается указатель на вход в соответствующую таблицу.

Рисунок 1

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

Построение лексических анализаторов

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

Алфавит автомата лексического анализатора - все множество однобайтовых (ANSI) или двухбайтовых (Unicode) символов. При записи правил обычно используются обобщающие нетерминалы вида «Буквы», «Цифры». В процессе распознавания может формироваться описываемый объект, например, литерал или идентификатор.

Пример: Распознаватель целых чисел. Синтаксическая диаграмма синтаксиса языка описывается синтаксической диаграммой (рис 2).

Рисунок 2

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

Рисунок 3.

а) Подпрограммы обработки:: Инициализация: Целое := 0; Знак_числа := «+».

Источник: https://www.bibliofond.ru/detail.aspx?id=870790