Разработка программного приложения для решения информационно–логических задач
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального
образования
«Северо-Кавказский государственный технический университет»
Факультет Инженерно-экономический
Кафедра Информационных систем, электропривода и автоматики
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К курсовому проекту по Технологии программирования
на тему Разработка программного приложения для решения
информационно-логических задач
Автор проекта А.М.Еременко
Руководитель проекта Д.В. Самойленко
Невинномысск, 2011
Содержание
Введение
. Разработка технического
задания на проектирования
.1 Общая постановка задачи
.2 Определение требований к
программе
.3 Предварительный выбор
метода решения задачи
.4 Определение требований к
системе
.4.1 Требования к системе в
целом
.4.2 Требования к
техническому обеспечению
.4.3 Требования к
программному обеспечению
. Проектирование программного
приложения
.1 Разработка технологии
обработки информации
.2 Разработка структуры и
формы представления данных
.3 Разработка алгоритма
решения задачи
.4 Разработка программы
решения задачи
.4.1 Выбор инструментальных
средств
.4.2 Разработка структуры
программы
.4.3 Проектирование
программного модуля
.4.4 проектирование
программного интерфейса
.4.5 Обеспечение надежности
программы
.5 Определение конфигурации
технических средств
.6 Тестирование программы
.6.1 Общие сведения
.6.2 Процесс тестирования
программы
.6.3 Оценка надежности
Заключение
Список использованных
источников
Введение
Программирование - это процесс и искусство создания компьютерных программ
или программного обеспечения с использованием языков программирования.
Программирование сочетает в себе элементы фундаментальных наук, искусства и
служит для решения конкретных задач, среди них задача синтаксического анализа.
Одной из важнейших информационно - логических задач является
синтаксический анализ текста.
Синтаксический анализ - это процесс сопоставления линейной
последовательности лексем языка с его формальной грамматикой, чаще всего он
используется вместе с логическим анализом - процесс обработки входной
последовательности символов с целью получения на выходе последовательности
символов.
Выявление ошибок синтаксиса - трудоемкий процесс. Облегчить процедуру
синтаксического анализа можем путем создания соответствующего программного
обеспечения. Данный проект является разновидностью этого программного
обеспечения для того, чтобы сэкономить время пользователю.
В данном проекте использовано традиционное решение задачи информационно-логического
анализа - это посимвольный разбор введенного текста и анализ правильности
написания синтаксиса, а также правильности написания функции.
1. Разработка технического задания на проектирования
1.1 Общая постановка задачи
Задачей данного курсового проекта является разработка программного
приложения, выполняющего следующие функции:
) синтаксический анализ простой программы на языке С;
) форматирование текста программы на языке С.
Простой программой на языке С является программа, состоящая только из
функции main и не содержащая вызовов других
функций. В ее состав должны входить следующие компоненты:
) Описание библиотек;
) Описание переменных;
) Арифметические и логические выражения;
) Операторы;
) Функции ввода и вывода;
) Однострочные и многострочные комментарии.
1.2 Определение требований к программе
Программа должна обеспечивать возможность выполнения следующих функций:
- проверка правильности синтаксиса написания простой программы
на языке С;
- проверка, является ли введенная логическая функция
совершенной конъюнктивной нормальной функцией (СКНФ).
Требование к надежности:
- программа должна предусмотреть возможность введения данных
повторно при совершении ошибки.
Требования к информационной и программной совместимости:
- для запуска программы необходимо использовать среду Microsoft
Visual Studio 2008.
1.3 Предварительный выбор метода решения задачи
Синтаксический анализ программы должен производиться в процессе
последовательного просмотра ее текста построчно и каждой строки посимвольно.
При обнаружении синтаксической ошибки необходимо выдавать сообщение об ошибке,
содержащее номер строки программы, текст программы и текст сообщения.
В процессе синтаксического анализа обязательно должны проверяться:
- разделение операторов символом «;»;
- парность скобок «(…)», «[…]», «{…}»;
- правильность оформления комментариев «/*…*/»;
- переменные должны состоять из одного символа латинского
алфавита «a, b….z»;
- правильность присвоения данных переменным «:=».
При формировании текста программы необходимо расположить все операторы и
выражения на отдельных строках с соблюдением правила отступа, исключить знаки
табуляции и повторяющиеся пробелы и разделить все конструкции языка пробелами.
Текст проверяемой программы должен быть записан в файле .txt.
Для проверки функции на правильность написания СКНФ необходимо проверять:
- парность скобок «(…)»;
- правильность написания конъюнкций «…)&(…»;
- правильность написания дизъюнкций «(…|…)»;
- правильность написания отрицания элементов «!a… a».
Алгоритмы синтаксического анализа конструкций языка (констант,
идентификаторов, приложений и т. п.) должны реализовываться с помощью отдельных
функций.
В настоящее время при описании синтаксиса языка наиболее часто
применяются два формальных метода.
Расширенные синтаксические формы Бэкуса - Наура представляют собой
металингвистические формулы. Каждое понятие языка определяется через множество
допустимых конструкций языка с помощью единственной нормальной формы. В формах
используют специальные метасимволы:
::= - определение понятия;
″″ - ограничители терминалов;
< > - ограничители нетерминалов;
| - конструкция «или»;
[ ] - повторение 0 или 1 раз;
{ } - повторение 0 или более раз;
( ) - группировка;
ɛ - пустая
синтаксическая цепочка;
. - завершение формы.
Металингвистические формулы закладываются в трансляторы и используются
для проверки формальной правильности операторов программы. Альтернативной
формой записи грамматики являются синтаксические диаграммы. Каждая диаграмма
является ориентированным графом. Каждая вершина, не являющаяся начальной или
конечной, является позицией синтаксического разбора входного потока. Каждой
дуге ставится в соответствии терминал или нетерминал:
Рисунок 1 - Обозначения элементов синтаксических диаграмм
Ниже приведены РБНФ и синтаксические диаграммы упрощенного определения
нетерминала «выражения языка С»:
<Выражение языка C>
::=
<Выражение> {(“&” | “|”) <Выражение>}.
<СКНФ>
::=
<Выражение>
{“(“ | <выражение дизъюнкции> | “&”}.
Синтаксический
разбор выражения будет осуществляться посимвольно.
1.4 Определение требований к системе
.4.1 Требования к системе в целом
К общим требованием в эксплуатации данного программного приложения можно
отнести:
- квалификация персонала может находиться на уровне
пользователя ПК;
- знание назначения данного программного обеспечения;
- знание основ синтаксиса языка С.
При возникновении аварийной ситуации все данные будут сохранены, т. к.
данные только доступны для чтения.
Условия эксплуатации:
- знать и правильно указывать путь к файлу программы;
- правильность ввода функции СКНФ, с содержанием специальных
символов ( | - дизъюнкция, & - конъюнкция, ! - отрицание);
- правильность ввода данных с учетом регистра.
1.4.2 Требования к техническому обеспечению
Технические требования:
- устройства ввода и вывода информации, такие как клавиатура и
монитор;
- процессор класса Pentium 3 и выше;
- объем оперативной памяти не менее 128 Мб;
- от 500 Мб свободного места на жестком диске, для обеспечения
запуска и работы программы;
- встроенный графический чип или видеоплата.
1.4.3 Требования к программному обеспечению
Система должна работать на IBM
совместимых персональных компьютерах.
Наличие операционной системы Windows версии 5.1 и выше с установленным Net Framework версии 3.5 и выше. Наличие
программного обеспечения для ввода и вывода данных.
2. Проектирование программного приложения
.1 Разработка технологии обработки информации
Ввод функции СКНФ для ее проверки осуществляется вручную, загрузка текста
программы для проверки осуществляется из файла. Предварительной подготовкой
является:
- создание файла с текстом простой программы;
- размещение файла на носителе;
Программа должна работать в пакетном режиме. Выходные данные будут
выводиться на экран пользователя.
Структура технологического процесса:
- считать с экрана пользователя введенную функцию СКНФ;
- посимвольно провести синтаксический анализ введенной функции;
- считать файл .txt с
программой;
- удалить из файла все комментарии и многострочные и
однострочные;
- провести синтаксический и арифметический анализ каждой
строки.
2.2 Разработка структуры и формы представления данных
Необходимо использование соглашений:
- объявление переменных типа int должно сопровождаться обязательной инициализацией
числовой переменной, может объявляться как отдельно, так и сразу несколько
переменных вместе;
- все конструкции языка разделяет один пробел, обязательно
ставится «;» в конце строки там, где это предусмотрено синтаксисом языка С;
- наименование всех переменных может обозначаться только одной
буквой латинского алфавита [a…z];
- в одной строке может размещаться только один оператор;
- в программе не должны использоваться сложные арифметические
выражения.
При соблюдении всех требований программа будет синтаксически верной.
Отформатированные исходные данные будут выведены на монитор пользователя
с тестом определенного сообщения, в случае обнаружения ошибки с указанием
причины ошибки.
2.3 Разработка алгоритма решения задачи
Алгоритм решения задач приведен в приложении А.
В алгоритме используется 6 блоков подпрограмм:
- «проверка функции на скобки» (осуществляется посимвольный
разбор введенной пользователем функции СКНФ, где при обнаружении ошибки может
производиться вывод сообщений: «Не закрыта скобка», «Закрытых скобок больше чем
открытых», «Пустые значения в скобках», «Данная функция не является СКНФ», а в
случае правильности введенной функции проверка происходит дальше);
- «проверка на конъюнкцию» (осуществляется посимвольный разбор
введенной пользователем функции СКНФ, где при обнаружении ошибки может
производиться вывод сообщений: «Ошибка: Данная функция не является СКНФ»,
«Ошибка: Данная функция не является СКНФ из-за &»», а в случае правильности
введенной функции проверка происходит дальше);
- «проверка на дизъюнкцию» (осуществляется посимвольный разбор
введенной пользователем функции СКНФ, где при обнаружении ошибки может
производиться вывод сообщений: «Ошибка: Данная функция не является СКНФ», а в
случае правильности введенной функции проверка происходит дальше);
- «проверка элементов СКНФ» (осуществляется посимвольный разбор
введенной пользователем функции СКНФ, где при обнаружении ошибки может
производиться вывод сообщений: «Ошибка: Данная функция не является СКНФ из-за
одинаковых дизъюнкций», «Данная функция не является СКНФ из-за неверных
элементов», а в случае правильности введенной функции проверка происходит
дальше);
- «проверка скобок» (осуществляется посимвольный разбор теста
проверяемой программы, где при обнаружении ошибки может производиться вывод
сообщений: «Ошибка: неверное количество скобок! Открытых больше чем закрытых»,
«Ошибка: неверное количество скобок! Закрытых больше чем открытых», а в случае
правильности введенной функции проверка происходит дальше);
- «проверка объявления типа int» (осуществляется посимвольный разбор теста
проверяемой программы, где при обнаружении ошибки может производиться вывод
сообщений: «Неверный числовой тип», а в случае правильности введенной функции
проверка происходит дальше).
2.4 Разработка программы решения задачи
.4.1 Выбор инструментальных средств
Для создания программы использовалась интегрированная среда разработки Microsoft Visual Studio 2008.
Visual Studio 2008 -
версия популярной платформы, в которой программисты Microsoft реализовали новейшие достижения для
разработчиков, руководителей разработки, тестировщиков и дизайнеров.
Версия 2008 включает в себя Visual Basic .NET, Visual C++, Visual C#. В комплекте с
программой идет 3.5-ая версия .NET Framework.
С помощью Visual Studio 2008 имеется возможность
разрабатывать программное обеспечение, которое использует возможности
многопроцессорных платформ, распределяя вычислительную нагрузку между
множеством процессоров. При этом работу с потоками программа берет на себя.
Разработка программы производилась с помощью языка программирования C#.#
является основным языком разработки программ на платформе .NET корпорации Microsoft. В нем удачно сочетаются испытанные
средства программирования с самыми последними новшествами, и предоставляется возможность
для эффективного и очень практичного написания программ, предназначенных для
вычислительной среды современных предприятий.
Данный язык является прямым наследником двух самых удачных языков
программирования: C и С++. Он также имеет тесные родственные связи с другим
языком: Java.
Несмотря на то, что C# является самодостаточным языком программирования,
у него имеется особая взаимосвязь со средой выполнения .NET Framework. Наличие
такой взаимосвязи объясняется двумя причинами. Во-первых, C# первоначально
предназначался для создания кода, который должен выполняться в данной среде. И,
во-вторых, используемые в C# библиотеки также определены в ней.
Назначение .NET Framework - служить средой для поддержки разработки и
выполнения распределенных компонентных приложений. Она обеспечивает совместное
использование разных языков программирования, а также, безопасность,
переносимость программ и общую модель программирования для платформы Windows. Что же касается взаимосвязи с C#,
то среда .NET Framework определяет два важных элемента. Первым из них является
общеязыковая среда выполнения (Common Language
Runtime - CLR). Это система, управляющая выполнением программ.
Вторым элементом среды является библиотека классов. Эта библиотека
предоставляет программе доступ к среде выполнения.
Благодаря вышеназванным достоинствам, для разработки программного
приложения для решения информационно - логических задач был выбран язык
программирования C#.
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 Мб свободного места на жестком диске, для обеспечения
запуска и работы программы;
- встроенный графический чип или видеоплата.
.6 Тестирование программы
.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.
. Полный
справочник по С. Четвертое издание [Текст]: Пер. с англ./ Шилдт, Герберт. - М.:
Издательский дом «Вильямс», 2002. - 704 с.: ил. - Парал. Тит. Англ. - ISBN 5-8459-0226-6 (рус.).
. Теория
и реализация языков программирования [Электронный ресурс] /
Интернет-Университет Информационных технологий. - Электрон. текст. дан. - Режим
доступа: http//www.INTUIT.ru, свободный.
Приложения
Приложение А
Приложение
Б
программный интерфейс синтаксический конфигурация
Алгоритм работы подпрограммы «Проверка функции на скобки»
Приложение В
Алгоритм работы подпрограммы «Проверка на конъюнкцию»
Приложение
Г
Алгоритм
работы подпрограммы «Проверка на дизъюнкцию»
Приложение
Д
Алгоритм
работы подпрограммы «Проверка элементов СКНФ»
Приложение
Е
Алгоритм
работы подпрограммы «Проверка скобок»
Приложение Ж
Алгоритм работы подпрограммы «Проверка объявления типа int»
Приложение
И
Текст
простой программы на языке С
/*
Простая
программа на языке C# с использованием переменных типа Int,
операторов IF..Goto, While, switch.
*/
using System ;System.Collections.Generic ;System.Linq
;System.Text ;KP_Lika
{Program
{void Main (string[] args)
{y = 5 ;a, b, c, t = 0, j ;= 7 ;= 2 ;l = ""
;
// proverka otveta(y==a-b)
{= 0 ;
}
{= 1 ;n ;
}
{++ ;
}(t);:(j)
{0:="verno";;:="neverno";;
}
}
}
}
Приложение К
Код основной программ
/*
Программа осуществляет проверку является ли введенная пользователем
функция СКНФ, а так же проверка правильности написания синтаксиса программы. В
случае неправильности написания либо функции, либо программы выдается
соответствующее сообщение пользователю.
Язык программирования:#
Программа написана с использованием подпрограмм:
«проверка функции на скобки»;
«проверка на конъюнкцию»;
«проверка на дизъюнкцию»;
«проверка элементов СКНФ»;
«проверка скобок»;
«проверка объявления типа int»
*/System;System.Collections.Generic;System.Linq;System.Text;System.IO;System.Text.RegularExpressions;
// Проверить синтаксический анализ программы с использованием операторов:
// IF..Goto, While, switch тип данных Int.
// Проверить, является ли заданная логическая формула совершенной
КНФ(СКНФ).KP_Lika
{Program
{string SKNF, Otvet_Skobok, Text, Kol_Skobok11,
Kol_Skobok12,_Koniunkciya, Otvet_Dizunkciya, Otvet_Elementov, put, str, put2,
Otvet_Skobok2,_int, Otvet_int2, Otvet_if, int_element = "";string[]
World, World2, INT;int Kol_Skobok, Kol_Skobok1, Kol_1, Kol_2, adres, n_stroki =
0, nach_stroki = 0, konec_stroki = 0, result = 0;string massA = "0 1 2 3 4
5 6 7 8 9";string massB = "> < >= <= != ==";void
Main(string[] args)
{
// главное меню:.ForegroundColor =
ConsoleColor.Green;.WriteLine("Выбор функции программы (1, 2 или 3):
");.WriteLine("1. Проверка функции на СКНФ;
");.WriteLine("2. Проверка синтаксиса текста программы.
");.WriteLine("3. Закончить работу с
приложением;");.WriteLine();.ForegroundColor = ConsoleColor.White;punkt_menu
= Console.ReadLine();(punkt_menu == "1")
{:.ForegroundColor = ConsoleColor.White;.WriteLine("Введите функцию
для проверки, является ли она СКНФ:");.WriteLine("Пример:
(A|B|!C)&(!A|!B|C):");.WriteLine("где !-отрицание(НЕ), & -
коньюнкция, | - дизъюнкция");.WriteLine();= Console.ReadLine();
// убираем пробелы= SKNF.Replace(" ", string.Empty);
// подпрограмма «проверка функции на скобки»_Skobok =
Proverka_Skobok(Text);.ForegroundColor = ConsoleColor.Red;(Otvet_Skobok !=
"")
{.WriteLine(Otvet_Skobok);pod_menyu;
}
// подпрограмма «проверка на конъюнкцию»_Koniunkciya =
Proverka_Koniunkciya(Text);.ForegroundColor =
ConsoleColor.Red;(Otvet_Koniunkciya != "")
{.WriteLine(Otvet_Koniunkciya);pod_menyu;
}
// подпрограмма «проверка на дизъюнкцию»_Dizunkciya =
Proverka_Dizunkciya(Text);.ForegroundColor = ConsoleColor.Red;(Otvet_Dizunkciya
!= "")
{.WriteLine(Otvet_Dizunkciya);pod_menyu;
}
// подпрограмма «проверка элементов СКНФ»_Elementov =
Proverka_Elementov(Text);.ForegroundColor = ConsoleColor.Red;(Otvet_Elementov
!= "")
{.WriteLine(Otvet_Elementov);pod_menyu;
}{ Console.WriteLine("Данная функция СКНФ!!!"); };
// подменю...._menyu: ;.ForegroundColor =
ConsoleColor.Yellow;.WriteLine();.WriteLine("Выбор функции программы (1,2
или 3): ");.WriteLine("1. Ввести функцию заново;");.WriteLine("2.
Перейти в главное меню;");.WriteLine("3. Закончить работу с
приложением;");.WriteLine();.ForegroundColor =
ConsoleColor.White;punkt_menu1 = Console.ReadLine();(punkt_menu1 ==
"1") { goto menyu1; }if (punkt_menu1 == "2") { goto menyu;
}if (punkt_menu1 == "3") { goto vihod; }{ Console.WriteLine("Вы
указали неверный пункт меню!"); goto pod_menyu; }
}if (punkt_menu == "2") // работаем над программой
{_menyu2:
;_1 = 0;_2 = 0;.WriteLine("Введите путь к файлу .TXT с листингом
программы:");.WriteLine("например: d:\\programma.txt");=
Console.ReadLine();indx = put.Length;= put.Insert(indx - 4, "2");= 0;
// удаление комментарий - работаетfs31 = new StreamReader(put);// файл с
программой(!fs31.EndOfStream)// чтение файла по строкам
{dlina = 0;= fs31.ReadLine();= str.Split(' ');
// удаление многострочного комментария(int j = 0; j < World.Length;
j++)
{(World[j] != "")
{(World[j] == "/*")
{_stroki = n_stroki;
}if (World[j] == "*/")
{_stroki = n_stroki;
}
}
}_stroki++;
}.Close();_stroki = 0;
// Console.WriteLine(nach_stroki+" "+konec_stroki);fs3 = new
StreamReader(put);// файл с программойfs2 = new StreamWriter(put2); // файл с
копией программы(!fs3.EndOfStream)// чтение файла по строкам
{= fs3.ReadLine();= str.Split(' ');= World;
// удаление коментария // - работает((n_stroki < nach_stroki) ||
(n_stroki > konec_stroki) || (konec_stroki == 0) || (nach_stroki == 0))
{(int j = 0; j < World.Length; j++)
{(World[j] != "")
{(World[j] == "//")
{ind = str.IndexOf("//");= str.Remove(ind);stroka;
}
}
}
}if (n_stroki == nach_stroki)
{ind = str.IndexOf("/*");= str.Remove(ind);stroka;
}if (n_stroki == konec_stroki)
{ind = str.IndexOf("*/");= str.Remove(0, ind + 2);stroka;
}if ((n_stroki >= nach_stroki) || (n_stroki <= konec_stroki))
{= "";stroka;
}: ;++;(adres < 10) { fs2.WriteLine("0" + adres + "
" + str); }fs2.WriteLine(adres + " " + str);_stroki++;
}.Close();.Close();= "";fs = new StreamReader(put2);// файл с
программой(!fs.EndOfStream)// чтение файла по строкам
{= fs.ReadLine();
// подпрограмма «проверка скобок»_Skobok2 =
Proverka_Skobok2(str);.ForegroundColor = ConsoleColor.Red;(Otvet_Skobok2 !=
"")
{.WriteLine(Otvet_Skobok2);pod_menyu3;
}
// подпрограмма «проверка объявления типа int»_int =
Proverka_int(str);.ForegroundColor = ConsoleColor.Red;(Otvet_int !=
"")
{.WriteLine(Otvet_int);pod_menyu3;
}
}.Close();= "";Otvet_funkcii="";
// проверка операторов= new StreamReader(put2);// файл с
программой(!fs.EndOfStream)// чтение файла по строкам
{reg = new Regex(@"^if \((.*)\)$");= fs.ReadLine();text = str;=
text.Remove(0, 3).Replace(" ",
string.Empty);(text.StartsWith("if"))
{(!reg.IsMatch(text))
{_funkcii = "Ошибка: оператора if! " +str;mm;
}
}if (text.StartsWith("while"))
{= new Regex(@"^while\((.*)\);$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора do_while! "+str;mm;
}
}if (text.StartsWith("do"))
{= new Regex(@"^do$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора do_while! "+str;mm;
}
}
if (text.StartsWith("goto"))
{= new Regex(@"^goto[a-z];$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора goto! "+str;mm;
}
}if (text.StartsWith("switch"))
{= new Regex(@"^switch\((.*)\)$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора switch1! "+str;mm;
}
}if (text.StartsWith("case"))
{= new Regex(@"^case(.*):$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора switch2! "+str;mm;
}if (text.StartsWith("break"))
{= new Regex(@"^break;$");(!reg.IsMatch(text))
{_funkcii="Ошибка: оператора switch3! "+str;mm;
}
}if (text.StartsWith("default"))
{= new Regex(@"^default:$");(!reg.IsMatch(text))
{.WriteLine("Ошибка: оператора switch4! "+str);mm;
}
}{Otvet_funkcii+="";}
}.Close();:(Otvet_funkcii!="")
{.WriteLine(Otvet_funkcii);
}
{.WriteLine ("Ошибок в программе нет!");
}
// подменю...._menyu3: ;.ForegroundColor =
ConsoleColor.Yellow;.WriteLine();.WriteLine("Выбор функции программы (1,2
или 3): ");.WriteLine("1. Проверить программу
заново;");.WriteLine("2. Перейти в главное
меню;");.WriteLine("3. Закончить работу с
приложением;");.WriteLine();.ForegroundColor = ConsoleColor.White;punkt_menu1
= Console.ReadLine();(punkt_menu1 == "1") { goto pod_menyu2; }if
(punkt_menu1 == "2") { goto menyu; }if (punkt_menu1 == "3")
{ goto vihod; }{ Console.WriteLine("Вы не верно указали пункт
меню!!!"); goto menyu; }
}if (punkt_menu == "3")
{vihod;
}{ Console.WriteLine("Вы не верно указали пункт меню!!!"); goto
menyu; }: ;
}
}
}
Приложение Л
Код подпрограммы «Проверка объявления типа Int»
/*
Подпрограмма осуществляет проверку правильности объявления типа int.
Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:int - программа выдает сообщение об ошибке или если
Otvet_int= «», то означает что ошибок не найдено.
*/
// проверка численного типа int - работаетstring Proverka_int(string str)
{_int = "";text = str;= str.Split(' ');(int j = 0; j <
World.Length; j++)
{(World[j] != "")
{(World[j] == "int")
{= str.Split(' ', ',', '=', ';', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9');_element = int_element + string.Join(" ", INT).Remove(0, 6)
+ " "; // все переменные числового типа= str.Remove(0, 6);// удаляем
INT= str.Replace(" ", string.Empty);// удаляем пробелы
// ищем позицию элемента:ind_1 = int_element.IndexOf(str[0]);(ind_1 !=
-1)
{= str.Remove(0, 1);// удаляем переменную типа INT(str[0] == '=')
{= str.Remove(0, 1);// удаляем =:ind_2 = massA.IndexOf(str[0]);(ind_2 !=
-1)
{= str.Remove(0, 1);(str[0] == ',') { str = str.Remove(0, 1); goto m;
}(str[0] == ';') { goto m3; }if (massA.IndexOf(str[0]) != -1) { goto m1; }if
(massA.IndexOf(str[0]) == -1) { Otvet_int = "Неверный численный тип2:
" + text; return Otvet_int; }{ Otvet_int = "Неверный численный тип1:
" + text; return Otvet_int; }
}if (ind_2 == -1)
{_int = "Неверный численный тип3: " + text;Otvet_int;
}
}if (str[0] == ';')
{_int += " ";
}if (str[0] == ',')
{= str.Remove(0, 1);m;
}
}
{.WriteLine(str);_int = "Неверный численный тип4: " +
text;Otvet_int;
}
}{ Otvet_int += ""; return Otvet_int; }
}
}:Otvet_int;
}
Приложение М
Код подпрограммы «Проверка скобок»
/*
Подпрограмма осуществляет проверку правильности написания скобок.
Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:_skobok2 - программа выдает сообщение об ошибке или если
Otvet_skobok2= «», то означает что ошибок не найдено.
*/
// проверка скобок программы - работаетstring Proverka_Skobok2(string
str)
{_Skobok2 = "";= str.Split(' ');(int j = 0; j <
World.Length; j++)
{(World[j] != "")
{(World[j] == "(")
{_2 = Kol_2 + 1;
}if (World[j] == ")")
{_2 = Kol_2 - 1;
}if (Kol_2 < 0)
{.ForegroundColor = ConsoleColor.Red;_Skobok2 = "Ошибка: неверное
количество скобок! Закрытых больше чем открытых в строке: " +
World[0];Otvet_Skobok2;
}
}
}(Kol_2 > 0)
{.ForegroundColor = ConsoleColor.Red;_Skobok2 = "Ошибка: неверное
количество скобок! Открытых больше чем закрытых!";
}if (Kol_2 == 0)
{.ForegroundColor = ConsoleColor.Red;_Skobok2 = "";
}Otvet_Skobok2;
}
Приложение Н
Код подпрограммы «Проверка элементов СКНФ»
/*
Подпрограмма осуществляет проверку правильности использования элементов
функции СКНФ. Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:_Elementov - программа выдает сообщение об ошибке или
если Otvet_Elementov = «», то означает что ошибок не найдено.
*/
// проверка Элементов - РАБОТАЕТstring Proverka_Elementov(string Text)
{_Elementov = "";[] element, element3, summa;k = 0;element2 =
"", Text1 = "", text2 = "";= Text.Split('&',
'(', ')');// все элементы в скобках
// на равенство слогаемых - работает(int i = 0; i < summa.Length - 1;
i++) // прогоняем каждую скобку
{(summa[i] != "")
{(int j = (i + 1); j < summa.Length; j++) // прогоняем каждую скобку
{(summa[i] == summa[j])
{_Elementov = "Ответ: Данная функция не является СКНФ из-за
одинаковых дизъюнкций.";Otvet_Elementov;
}if (summa[i] != summa[j])
{_Elementov = "";
}
}
}
}
// на правильность элементов - работает= Text.Split(' ', '(', ')', '|',
'!', '&'); // элементы все= string.Join(" ", element); // набор
всех элементов= summa[1].Split('|', '!');(int i = 0; i < element3.Length;
i++) // считаем количество элементов в скобке
{(element3[i] != "")
{++;
}
}t = 0;(int i = 0; i < element.Length; i++) // считаем количество
элементов в скобке
{((element[i] != "") & (t < k))
{= text2 + element[i];++;
}
}= element2.Replace(" ", string.Empty);=
element2.Remove(k);(int i = k; i < element.Length; i++) // считаем
количество элементов в скобке
{(element[i] != "")
{poz = element2.IndexOf(element[i]);
//Console.WriteLine(poz + " " + element[i]);(poz == -1)
{_Elementov += "Данная функция не является СКНФ из-за неверных
элементов!!!";Otvet_Elementov;
}
{_Elementov += "";
}
}
}Otvet_Elementov;
}
Приложение П
Код подпрограммы «Проверка на дизъюнкцию»
/*
Подпрограмма осуществляет проверку правильности написания дизъюнкции
(«|») в функции СКНФ. Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:_Dizunkciya - программа выдает сообщение об ошибке или
если Otvet_Dizunkciya = «», то означает что ошибок не найдено.
*/
// проверка Дизъюнкцииstring Proverka_Dizunkciya(string Text)
{_Dizunkciya = "";text2 = "", text3 =
"";poziciya, kol_plusov = 0;[] summa, elem_diz, element;=
Text.Split('&', '(', ')');// все что в скобках(int i = 0; i <
summa.Length; i++)
{(summa[i] != "")
{= i;= summa[i];_diz = text3.Split('|'); // - переменные
// проверка на количество +(int j = 0; j < text3.Length; j++)
{(text3[j] == '|') { kol_plusov++; }
}
// ели вообще нет + - работает(kol_plusov == 0)
{_Dizunkciya = "Ответ: Данная функция не является
СКНФ1.";Otvet_Dizunkciya;
}
// если начинается или заканчивается на + - работаетif
((text3[text3.Length - 1] == '|') | (text3[0] == '|'))
{_Dizunkciya = "Ответ: Данная функция не является
СКНФ2.";Otvet_Dizunkciya;
}
// ели есть +
{_diz = text3.Split('|');
// проверка одинаковых элементов - работает(int j1 = 0; j1 <
elem_diz.Length; j1++)
{(int j2 = j1 + 1; j2 < elem_diz.Length; j2++)
{(elem_diz[j1] == elem_diz[j2])
{_Dizunkciya = "Ответ: Данная функция не является
СКНФ3.";Otvet_Dizunkciya;
}
{_Dizunkciya = "";
}
}
}
}
}
}Otvet_Dizunkciya;
}
Приложение Р
Код подпрограммы «Проверка на конъюнкцию»
/*
Подпрограмма осуществляет проверку правильности написания конъюнкции
(«&») в функции СКНФ. Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:_Koniunkciya - программа выдает сообщение об ошибке или
если Otvet_Koniunkciya = «», то означает что ошибок не найдено.
*/
// проверка Коньюнкции - Работаетstring Proverka_Koniunkciya(string Text)
{Otvet_Koniunkciya = "";[] poziciya;kol_kon = 0;
// проверка на количество &(int i = 0; i < Text.Length; i++)
{(Text[i] == '&') { kol_kon++; }
}
// если начинается или заканчивается на & -
работает((Text[Text.Length - 1] == '&') | (Text[0] == '&'))
{_Koniunkciya = "Ответ: Данная функция не является
СКНФ.";Otvet_Koniunkciya;
}
// ели вообще нет & - работаетif (kol_kon == 0)
{_Koniunkciya = "Ответ: Данная функция не является
СКНФ1.";Otvet_Koniunkciya;
}
// ели есть &
{= Text.Split('&');(int i = 1; i < poziciya.Length; i++)
{simbol = poziciya[i - 1];simbol2 = poziciya[i];((simbol[simbol.Length -
1] == ')') & (simbol2[0] == '('))
{_Koniunkciya = "";
}if ((simbol[simbol.Length - 1] != ')') & (simbol2[0] != '('))
{_Koniunkciya = "Ответ: Данная функция не яфляется СКНФ из-за
конъюнкции.";Otvet_Koniunkciya;
}
}Otvet_Koniunkciya;
}
Приложение С
Код подпрограммы «Проверка функции на скобки»
/*
Подпрограмма осуществляет проверку правильности написания скобок в
функции СКНФ. Проверка осуществляется посимвольно.
Язык программирования:#
Входные данные:- строка считываемая из файла
Выходные данные:_Skobok - программа выдает сообщение об ошибке или если
Otvet_Skobok = «», то означает что ошибок не найдено.
*/
// проверка Скобок - Работаетstring Proverka_Skobok(string Text)
{
// Проходим по всем символам строкиOtvet_Skobok = "";_Skobok =
0;_Skobok1 = 0;(int i = 0; i < Text.Length; i++)
{(Text[i] == '(')
{_Skobok++;
}if (Text[i] == ')')
{_Skobok1++;
}
}(Kol_Skobok > Kol_Skobok1) { Otvet_Skobok = "Не закрыта
скобка!!!"; }if (Kol_Skobok < Kol_Skobok1) { Otvet_Skobok =
"Закрытых скобок больше чем открытых!!!"; }if (Kol_Skobok ==
Kol_Skobok1)
{(int i = 0; i < Text.Length - 1; i++)
{((Text[i] == '(') & (Text[i + 1] == ')'))
{_Skobok += "Постые значения в скобках";
}{ Otvet_Skobok = ""; }
}
}m = Convert.ToString(Kol_Skobok);m1 =
Convert.ToString(Kol_Skobok1);((Kol_Skobok11 == Kol_Skobok12) &
(Kol_Skobok11 == "0"))
{_Skobok = "Ответ: Данная функция не является СКНФ.";
}if ((Kol_Skobok11 == Kol_Skobok12) & (Kol_Skobok11 ==
"1"))
{_Skobok = ("Ответ: Данная функция не является СКНФ.");
}Otvet_Skobok;
}