
Министерство образования и науки РФ
Томский Государственный университет систем управления и радиоэлектроники (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ОТЧЕТ
по лабораторной работе №1
Тема: “Анализ задачи. Абстракция программ и данных. Синтаксис языка программирования”
Выполнил студент гр. 521
Ингинен А.И.
______________ 26.12.12
Принял: Романов А. С.
______________ 26.12.12
Томск 2012
-
Цель работы
Цель работы: знакомство с основными элементами языка программирования, расширенной формой записи Бэкуса-Наура для записи синтаксиса языка программирования.
-
Задание
-
Изучить теоретические сведения.
-
Получить вариант задания у преподавателя.
-
Для предложенной абстрактной программы описать входные и выходные данные программы, определить типы данных, их диапазон и размерность.
-
Декомпозировать программу на модули. Описать основные модули программы, их взаимосвязь.
-
Определить возможные ошибки, которые могут произойти при выполнении блоков программы.
-
Записать в простейшей форме синтаксис языка, позволяющего реализовать программу. Использовать для этого расширенную форму Бэкуса-Наура.
-
Написать отчет и защитить у преподавателя.
-
Теоретический материал
Язык программирования - набор правил, описывающих, какие последовательности символов составляют программу, и какое вычисление производит программа.
Программа - последовательность символов, определяющих вычисление. При проектировании сложных программных продуктов очень важно научиться мыслить системно и уметь разбивать программу на отдельные составляющие.
Язык программирования применяется для составления программ, решающих задачи на определенном уровне абстракции. Появление и применение нового языка программирования может быть оправдано только тем, что он позволяет «легче» составить программу для конкретной области. При этом чем выше уровень абстракции, тем больше деталей скрыто. Это позволяет с меньшими затратами создавать программы для тех областей, где уже есть некоторые заготовки в виде написанных модулей, классов, шаблонов и т.д.
Прежде всего, необходимо определить входные и выходные данные программы, их типы, диапазоны минимальные и максимальные значения.
После чего производится декомпозиция программ на модули. По возможности это должны быть полностью независимые составные части программы, выполняющие строго определенные функции. Каждый модуль имеет входные и выходные данные.
Также необходимо предусмотреть, какого рода ошибки возможны в процессе функционирования каждого из модулей. Как правило, существует три основных ошибки: ошибка при передаче параметров, переполнение (выход за диапазон), неправильное вычисление функции.
Синтаксис языка программирования - это набор правил, которые определяют, какие последовательности символов являются допустимыми.
Синтаксис задается с помощью формальной нотации. Самая распространенная нотация - расширенная форма Бекуса-Наура (РФБН). Описание грамматики в РБНФ представляет собой набор правил, определяющих отношения между терминальными символами (терминалами) и нетерминальными символами (нетерминалами).
Терминальные символы - это минимальные элементы грамматики, не имеющие собственной грамматической структуры.
Нетерминальные символы - это элементы грамматики, имеющие собственные имена и структуру. Каждый нетерминальный символ состоит из одного или более терминальных и/или нетерминальных символов, сочетание которых определяется правилами грамматики.
Общий вид записи грамматики:
Синтаксическая категория ::= описание
Здесь синтаксическая категория представляет ту конструкцию языка программирования, которая описывается, а описание задает формальные правила. Для описания этих правил используются следующие обозначения:
'…' - текстовый элемент - символ или группа символов;
[А] - элемент А входит или не входит;
(А В) - группировка элементов;
{А} - ноль или более элементов А;
| - или;
Общую форму грамматики РБНФ-описания можно описать в виде РБНФ следующим образом:
Синтаксис = { СинтОператор }.
СинтОператор = идентификатор=” СинтВыражение "
СинтВыражение = СинТерм {"|" СинТерм}.
СинТерм = СинтФактор {СинтФактор }.
СинтФактор = идентификатор | цепочка
| "{"СинтВыражение ")"| "["СинтВыражение "]" | "{"СинтВыражение "}".
Например, типичный идентификатор языка программирования (последовательность букв, цифр и знаков подчеркивания, начинающаяся с буквы) с помощью РФБН можно записать в следующем виде:
Идент = Буква{Буква|Цифра| "_"}.
-
Ход выполнения работы
Выбор алгоритма
Ввод файлов
Распознавание типа файлов
(архивный/не
архивный)
Не
архивный файл
Не
архивный файл Архивный
файл
л
Извлечение файлов из архива
Добавление файлов в архив
Создание архивных файлов Архивный
файл Архивный
файл
Удаление файлов из архива
Просмотр архивных файлов
Вывод разархивированных файлов
Вывод архивного файла
Рис. 1 Декомпозиция программы «Архиватор»
Опишем несколько модулей из программы.
Модуль 1:
-
Наименование – «Извлечение файлов из архива»; назначение – распаковка архива.
-
Входные данные: файлы с расширением .zip.
-
Выходные данные: текстовые и бинарные файлы.
-
Ошибки – попытка извлечь файлы из пустого архива.
Рис 1. Ошибка извлечения файла из пустого архива.
Модуль 2:
-
Наименование – «Добавление файлов в архив»; назначение – добавление файлов в архив.
-
Входные данные: текстовые и бинарные файлы.
-
Выходные данные: файлы с расширением .zip.
-
Ошибки – попытка добавления в zip-архив файлов с украинской буквой «i».
Рис 2. Ошибка добавления в zip-архив файлов с украинской буквой «i».
Модуль 3:
-
Наименование – «Создание архивных файлов»; назначение – упаковка одного или более файлов в архив или серию архивов.
-
Входные данные: текстовые и бинарные файлы.
-
Выходные данные: файлы с расширением .zip.
-
Ошибки – попытка добавления в zip-архив файлов с украинской буквой «i».
Модуль 4:
-
Наименование – «Удаление файлов из архива»; назначение – удаление файлов из архива.
-
Входные данные: файлы с расширением .zip.
-
Выходные данные: файлы с расширением .zip.
-
Ошибки – попытка удаления файлов, к которым закрыт доступ.
Расширенная форма Бэкуса — Наура:
архиватор::==(имя, файл, команда, операция)
имя::= (знак, число, буква)
файл::==(текстовый, бинарный, сжатый)
команда::==( ”добавление в архив”, ”извлечение”, ”просмотр”, ”удаление” )
операция::=(”поиск”, ”восстановление”)
"удаление"::==[имя, {файл}, удалить]
"добавление в архив"::==[имя, {файл}, добавить]
"извлечение"::==[имя, {файл} извлечь]
"просмотр"::==[имя, {файл}, просмотреть]
-
Вывод
В ходе выполнения лабораторной работы я познакомилась с основными элементами языка программирования, расширенной формой записи Бэкуса-Наура для записи синтаксиса языка программирования.