Разработка программного приложения для решения информационно–логических задач

 

КП - НТИ СевКавГТУ - 230201.65.ОН. 174- 11













Разрабoтка программного приложения для решения инфoрмационно - лoгических задач




Кубота Александр Сергеевич

ИС-091


Сoдержание


Введение

.Разработка технического задания на проектирование

.1Общая постановка задачи

.2Определение требований к программе

.3Предварительный выбор метода решения задачи

.4Определение требований к системе

.4.1Требoвания к системе в целом

.4.2Требования к техническому и программному обеспечению

.4.3Требoвания к программному обеспечению

.Проектирование программного приложения

.1Разработка технологии обработки информации

.2Разработка структуры и формы представления данных

.3Разработка алгоритма решения задачи

.4Разработка программы решения задачи

.4.1Выбор инструментальных средств

.4.2Разработка структуры программы

.4.3Проектирование программных модулей

.4.4Проектирование программного интерфейса

.5 Определение конфигурации технических средств

.6 Тестирование программы

.6.1 Общие сведения

.6.2 Процесс тестирования программы

.6.3 Оценка надежности программы

Заключение

Список использованных источников

Приложение А. Блок-схема алгоритма программы анализа арифметического выражения

Приложение Б. Блок-схема алгоритма анализа текста простой программы на языке С

Приложение В. Исходный код программы анализа арифметического выражения

Приложение Г. Исходный код простой программы синтаксического анализа простой программы на языке С


Введение


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

Одной из важнейших информационно - логических задач является синтаксический анализ текста.

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

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

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


1. Разработка технического задания на проектирования


1.1Общая постановка задачи


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

1)синтаксический анализ простой программы на языке С;

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

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

1)Описание библиотек;

)Описание переменных;

)Арифметические и логические выражения;

)Операторы;

)Функции ввода и вывода;

)Однострочные и многострочные комментарии.


1.2Определение требований к программе


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

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

-проверка, является ли введенная логическая функция совершенной конъюнктивной нормальной функцией (СКНФ).

Требование к надежности:

-программа должна предусмотреть возможность введения данных повторно при совершении ошибки.

Требования к информационной и программной совместимости:

-для запуска программы необходимо использовать среду Microsoft Visual Studio 2008.


1.3Предварительный выбор метода решения задачи


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

В процессе синтаксического анализа обязательно должны проверяться:

-разделение операторов символом «;»;

-парность скобок «(…)», «[…]», «{…}»;

-правильность оформления комментариев «/*…*/»;

-переменные должны состоять из одного символа латинского алфавита «a, b….z»;

-правильность присвоения данных переменным «:=».

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

Текст проверяемой программы должен быть записан в файле .txt.

Для проверки функции на правильность написания СКНФ необходимо проверять:

-парность скобок «(…)»;

-правильность написания конъюнкций «…)&(…»;

-правильность написания дизъюнкций «(…|…)»;

-правильность написания отрицания элементов «!a… a».

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

В настоящее время при описании синтаксиса языка наиболее часто применяются два формальных метода.

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

::= - определение понятия;

?? - ограничители терминалов;

< > - ограничители нетерминалов;

| - конструкция «или»;

[ ] - повторение 0 или 1 раз;

{ } - повторение 0 или более раз;

( ) - группировка;

? - пустая синтаксическая цепочка;

. - завершение формы.

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




Рисунок 1 - Обозначения элементов синтаксических диаграмм


Ниже приведены РБНФ и синтаксические диаграммы упрощенного определения нетерминала «выражения языка С»:

<Выражение языка C> ::=

<Выражение> {(& | |) <Выражение>}.


Рисунок 2 - РБНФ для анализа СКНФ


<СКНФ> ::=

<Выражение> {( | <выражение дизъюнкции> | &}.


Рисунок 3 - РБНФ для анализа арифметического выражения


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


1.4Определение требований к системе


1.4.1Требования к системе в целом

К общим требованием в эксплуатации данного программного приложения можно отнести:

-квалификация персонала может находиться на уровне пользователя ПК;

-знание назначения данного программного обеспечения;

-знание основ синтаксиса языка С.

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

Условия эксплуатации:

-знать и правильно указывать путь к файлу программы;

-правильность ввода функции СКНФ, с содержанием специальных символов ( | - дизъюнкция, & - конъюнкция, ! - отрицание);

-правильность ввода данных с учетом регистра.


1.4.2Требования к техническому обеспечению

Технические требования:

-устройства ввода и вывода информации, такие как клавиатура и монитор;

-процессор класса Pentium 3 и выше;

-объем оперативной памяти не менее 128 Мб;

-от 500 Мб свободного места на жестком диске, для обеспечения запуска и работы программы;

-встроенный графический чип или видеоплата.


1.4.3Требования к программному обеспечению

Система должна работать на IBM совместимых персональных компьютерах.

Наличие операционной системы Windows версии 5.1 и выше с установленным Net Framework версии 3.5 и выше. Наличие программного обеспечения для ввода и вывода данных.


2. Проектирование программного приложения


.1 Разработка технологии обработки информации


Ввод функции СКНФ для ее проверки осуществляется вручную, загрузка текста программы для проверки осуществляется из файла. Предварительной подготовкой является:

-создание файла с текстом простой программы;

-размещение файла на носителе;

Программа должна работать в пакетном режиме. Выходные данные будут выводиться на экран пользователя.

Структура технологического процесса:

-считать с экрана пользователя введенную функцию СКНФ;

-посимвольно провести синтаксический анализ введенной функции;

-считать файл .txt с программой;

-удалить из файла все комментарии и многострочные и однострочные;

-провести синтаксический и арифметический анализ каждой строки.

Необходимо использование соглашений:

-объявление переменных типа int должно сопровождаться обязательной инициализацией числовой переменной, может объявляться как отдельно, так и сразу несколько переменных вместе;

-все конструкции языка разделяет один пробел, обязательно ставится «;» в конце строки там, где это предусмотрено синтаксисом языка С;

-наименование всех переменных может обозначаться только одной буквой латинского алфавита [a…z];

-в одной строке может размещаться только один оператор;

алгоритм программа модуль

-в программе не должны использоваться сложные арифметические выражения.


2.2 Разработка структуры и формы представления данных


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

-создание файла с текстом простой программы;

-размещение файла на носителе;

Программа должна работать в пакетном режиме. Выходные данные будут выводиться на экран пользователя.

-считать файл .с с программой;

-построчно провести синтаксический анализ введенной функции;

При соблюдении всех требований программа будет синтаксически верной.

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


2.3 Разработка алгоритма решения задачи


Алгоритм решения программы разделен на несколько частей первая часть выполняет функцию решения задачи арифметического анализа и приведена в приложение А. Вторая функция алгоритма задачи синтаксического анализа и приведена в приложение Б.


2.4 Разработка программы решения задачи


.4.1 Выбор инструментальных средств

На выбор языка С повлияло то что он содержит простые средства для обработки текстовых данных, а так же то что он наиболее прост в изучении. Были выбраны регулярные выражения для проверки операторов. Остальной текст программы было решено разбирать посимвольно.


2.4.2 Разработка структуры программы

Основными функциями программы является синтаксический и арифметический анализ текста. Программа состоит из частей:

-вывод на экран пользователя меню, для выбора проверки СКНФ или проверки синтаксиса программы;

-при выборе пункта меню «проверка СКНФ» пользователем вводится функция для проверки. Программой производится посимвольный разбор введенной функции, после чего выводится сообщение с ответом, является или нет введенная функция СКНФ, и выводит подменю с возможностью повторного ввода функции или перехода в главное меню;

-при выборе пункта меню «проверка синтаксиса программы», пользователю необходимо будет указать место хранения проверяемого файла (d:\programma.txt), после чего программа будет часть программы проверять посимвольно, а часть построчно, после чего на экран пользователя выведется сообщение об ошибке, либо если в случае правильности написания программы будет выдано сообщение о правильности проверяемой программы, затем будет выведено подменю с возможностью повторной проверки программы, либо переход в главное меню.


2.4.3 Проектирование программных модулей

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

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

-для второй части необходимо считать путь к файлу и обработать;

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


2.4.4Проектирование программного интерфейса

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

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

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

-выход из программы.

Программа будет всегда выводит пользователю отформатированные данные:

-«Данная функция является СКНФ»;

-«Данная функция не является СКНФ из-за неверного количества скобок»;

-«Данная функция не является СКНФ из-за неверно введенной конъюнкции»;

-«Данная функция не является СКНФ из-за неверно введенной дизъюнкции»;

-«Данная функция не является СКНФ из-за несоответствия элементов функции»;

-«Ошибок нет!»;

-«Ошибка: коментарии - /* */»;

-«Ошибка: фигурные скобки - { }»;

-«Ошибка: с оператором - do while»;

-«Ошибка: в вункциях оператора...»;

-«Ошибка: Break»;

-«Ошибка: с оператором Switch».


2.4.5Обеспечение надежности программы

Данная программа не нуждается в защите от сбоев, так как информация не хранится.


2.5Определение конфигурации технических средств


-устройства ввода и вывода информации, такие как клавиатура и монитор;

-процессор класса Pentium 3 и выше;

-объем оперативной памяти не менее 128 Мб;

-от 500 Мб свободного места на жестком диске, для обеспечения запуска и работы программы;

-встроенный графический чип или видеоплата.


2.6 Тестирование программы


2.6.1 Общие сведения

Контрольными данными является файл с информацией, который обладает следующими свойствами:

-описание переменных типа int;

-арифметические операции (a|b|c)&(!a|!b|c)&(a|!b|c);

-операторы: if.. goto, do..while, switch;

-комментарии;


2.6.2 Процесс тестирования программы

Для тестирования программы можно применить следующий алгоритм:

-создать файл на носителе;

-заполнить его данными;

-запустить программу, указав путь к файлу;

-подождать вывода программы;

-ввести функцию СКНФ;

-подождать вывода программы;

-сравнить полученные результаты с теоретическими.


2.6.3 Оценка надежности

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


Заключение


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

-синтаксический анализ простой программы на языке С;

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

Ввод функции СКНФ для ее проверки осуществляется вручную, загрузка текста программы для проверки осуществляется из файла. Предварительной подготовкой является:

-создание файла с текстом простой программы;

-размещение файла на носителе;

Программа должна работать в пакетном режиме. Выходные данные будут выводиться на экран пользователя.

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

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

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

-выход из программы.

При тестировании программы выданы были верные результаты.


Список использованной литературы


1.Иванова, Г.С. Технология программирования [Текст]: Учебник для вузов / Иванова Г.С. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. - 320 с.: ил. - (Информатика в техническом университете). - ISBN 5-7038-2077-4.

2.Полный справочник по С. Четвертое издание [Текст]: Пер. с англ./ Шилдт, Герберт. - М.: Издательский дом «Вильямс», 2002. - 704 с.: ил. - Парал. Тит. Англ. - ISBN 5-8459-0226-6 (рус.).

.Теория и реализация языков программирования [Электронный ресурс] / Интернет-Университет Информационных технологий. - Электрон. текст. дан. - Режим доступа: http//www.INTUIT.ru, свободный.



Приложение А


Блок-схема решения задачи арифметического анализа


































































































Приложение Б


Блок-схема алгоритма задачи синтаксического анализа























































































Приложение В


Исходный код программы арифметического анализа


#include <iostream>main()

{

*dnf="a&b|b&c";

int form[255][255];j;=0;k;=0;

int dnfsize;=0;


{=dnfsize+1;

}(dnf[dnfsize]!='\0');

max;='a';neqzero;=0;flag;=0;( int i=0 ;i<=dnfsize; i=i+1 )

{

if (dnf[i]=='|')

{=k+1;=0;

}(i!=0 && dnf[i]!='|' && dnf[i]!='&' )

{[j][k]=dnf[i];


=j+1;(dnf[i]!='&')(max<dnf[i])=dnf[i];

}



}z;=max-'a'+1;pow;=1<<z;table2[pow];(int i=0;i<pow;i=i+1)[i]=0;

(int i=0;i<k;i=i+1)

{table[z];(int j=0;j<z;j=j+1)[j]=2;nm;=0;

(int j=0;form[j][i];j=j+1)

{

hgy;=form[j-1][i];( j==0||hgy=='|')

{

(form[j][i]=='!')

{

nmb;=form[j+1][i]-'a';(table[nmb]==1)=1;(table[nmb]==2)[nmb]=0;

(form[j][i]!='!')

{nmb;=form[j][i]-'a';(table[nmb]==0)=1;

if (table[nmb]==2)[nmb]=1;

}


}

}

(nm==0)

{=1;(int j=0;j<pow;j=j+1)

{show;=1;(int k=0;k<z;k=k+1)

{(table[k]!=2)(table[k]==1)

{r;=1<<k;e;

e=j|r;(e!=j)=0;

}(table[k]==0)

{


// заполнение числа 1 и отнимание 1 сдвинутой на к влево

int jh;=max-'a'+2;

int jj;=1<<jh;jk;=1<<k;

int exp;=j&jj-1-jk;(exp!=j)=0;

}

}

(show==1)(table2[j]==0)

{[j]=1;

(flag)

{1:(") & (");;0:(" ( ");=1;;

}


for (int k=0;k<z;k=k+1)

{(k!=0)("|");hg;=j|1<<k;(hg!=j)("!");("%c",k+'a');

}

}

}

}

}

(neqzero)

{0:("1");;1:(" ) \n");;

}

system ("pause");

}


Приложение Г


Исходный код программы синтаксического анализа простой программы на языке С


using System;System.Collections.Generic;System.IO;System.Text;

Program

{List<string> vars = new List<string>();List<string> uvars = new List<string>();List<string> labels = new List<string>();List<string> nlabels = new List<string>();void test(string expr, string line)

{(expr.EndsWith("++") || expr.EndsWith("--"))

{(!(vars.IndexOf(expr.Substring(0, expr.Length - 2)) > -1))

{.Error.WriteLine("Переменая {0} не обьявлена в выражении {1}, строке {2}", expr.Substring(0, expr.Length - 2), expr, line);

};

}[] nvars = expr.Split(new String[] { "+", "-", "*", "<", ">", "==", "!=", "=" }, StringSplitOptions.None);(string var in nvars)

{

if (var != "")

{

{.ToDouble(var);

}(FormatException)

{(vars.IndexOf(var) > -1).Add(var);.Error.WriteLine("Переменая {0} не обьявлена в выражении {1}, строке {2}", var, expr, line);

}

}.Error.WriteLine("В выражении {0} не хватает операндов, в строке {1}", expr, line);

}

}

void Main(string[] args)

{path = args[1];read = new StreamReader(path);code = read.ReadToEnd();(code.IndexOf(" (") != -1)= code.Replace(" (", "(");tmp_code = "", tmp = "";in_for = false;

for (int i = 0; i < code.Length; i++)

{((code[i] == '}') || (code[i] == '{'))

{+= "\n";

}+= code[i];(in_for == true)(code[i] == ')')

{_code += "\n" + tmp.Trim();= "";_code = tmp_code.Trim();_for = false;

}

(in_for == false)(tmp.Trim() == "else")

{_code += "\n" + tmp.Trim() + "\n";_code = tmp_code.Trim();= "";_for = false;

}if (code[i] == ';')

{

(tmp.Trim().StartsWith("for("))

{_for = true;

}

{_code += "\n" + tmp.Trim();_code = tmp_code.Trim();= "";

}


}


((code[i] == '}') || (code[i] == '{'))

{_code += "\n" + tmp.Trim();_code = tmp_code.Trim();= "";

}


}= tmp_code;

[] cod = code.Split('\n');

in_main = false;incl = 0;if_c = 0;need_op = 0;



foreach (string ln in cod)

{line = ln.Trim();(line != "")

{

(line == "int main()")_main = true;(in_main == true)

{

(line.Length > 2)

{(line.StartsWith("if("))

{

expr = line.Substring(3, line.Length - 4);(expr, line);_c++;_op = 1;

}if (line.StartsWith("else"))

{_c--;_op = 1;

}if (line.StartsWith("for("))

{[] expr = line.Substring(4, line.Length - 5).Split(';');

foreach (string exp in expr)(exp, line);_op = 1;

}(line.StartsWith("while("))_op = 1;if (line.StartsWith("goto")).Add(line.Substring(4, line.Length - 5));if (line.IndexOf("=") > -1)

{_op = 0;var = line.Substring(0, line.IndexOf('='));(vars.IndexOf(var) > -1)

{expr = line.Substring(line.IndexOf('=') + 1, line.Length - line.IndexOf('=') - 2);(expr, line);

}.Error.WriteLine("Переменая {0} не обьявленна", var);

}if (line.EndsWith(":")).Add(line.Substring(0, line.Length - 1));.WriteLine("Error, line is wrong");

}if (line == "{")

{++;

need_op = 0;

}if (line == "}")(need_op == 0)-;.Error.WriteLine("Нельзя закрыть блок, требуется оператор");if (line == ";")_op = 0;.Error.WriteLine("Строка не распознана");

(incl < 0) Console.Error.WriteLine("Код за пределами главной функции");(if_c < 0) Console.Error.WriteLine("Else без открывающего If");

}

{.Error.WriteLine("Код за пределами главной функции");

}

}

}

(string ln in cod)

{line = ln.Trim();(line != "")

{(line == "{")

{++;

}if (line == "}")-;

(line == "int main()")_main = true;(in_main == true)

{(line.StartsWith("float "))

{(need_op == 1).Error.WriteLine("Нельзя обьявлять переменые здесь");[] varsl = line.Substring(6, line.Length - 7).Split(',');

(string var in varsl)(uvars.IndexOf(var) > -1) Console.Write("{0}float {1};\n", new String(' ', incl * 2), var);

}(line.IndexOf("=") > -1)

{var = line.Substring(0, line.IndexOf('='));(vars.IndexOf(var) > -1)

{(uvars.IndexOf(var) > -1) Console.WriteLine("{0}{1}", new String(' ', incl * 2), line);

}

else Console.WriteLine("{0}{1}", new String(' ', incl * 2), line);

}.WriteLine("{0}{1}", new String(' ', incl * 2), line);

}

}

}

(string label in nlabels)(labels.IndexOf(label) != -1) Console.Error.WriteLine("Прыжок к необьявленой метке {0}",label);

.ReadLine();

}

}


КП - НТИ СевКавГТУ - 230201.65.ОН. 174- 11 Разрабoтка программного приложения для решения инфoрмационно - лoг

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ