Разработка программного обеспечения для реализации поиска на основе регулярных выражений
Программная реализация синтаксического анализатора произвольного текста. Матрица и дерево переходов для программы. Код программы с построчным комментарием. Порядок запуска среды разработки Visual Studio. Интерфейс и номера Лихтенштейна, скриншот.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 13.02.2014 |
Размер файла | 855,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. ПОСТАНОВКА ЗАДАЧИ
Спроектировать и программно реализовать синтаксический анализатор произвольного текста. Анализатор может быть написан на любом языке программирования. Программа должна производить посимвольный разбор текста и находить в нем определенно заданные символьные конструкции. Также в процессе анализа, программа должна находить помимо конкретно заданных конструкций, дополнительные конструкции, отличающиеся от заданных одним произвольным символом.
В соответствии с выбранным вариантом задания, необходимо найти в произвольном тексте символьные конструкции следующего вида:
АА 000 00А
где «А» - произвольный символ,
«0» - произвольная цифра,
«-» - знак дефиса,
«@»- произвольный символ (кроме букв, цифр, пробелов и знаков препинания).
Также необходимо отдельно найти символьные конструкции, отличающиеся от заданной одним произвольным символом. Несколько примеров таких конструкций:
а) АА 0A0 00А,
б) АА 000 A0А,
в) А0 000 00А,
г) 0А 000 00А,
д) АА A00 00А.
2. КОНЕЧНЫЙ АВТОМАТ
Заданная программа реализуется в виде конечного автомата.
Далее рассматривается матрица и дерево переходов для разработанной программы.
Рис. 1
Формализованное описание интегрированного конечного автомата можно представить следующим образом:
КА=(Q = {A1…A10,B0…B9,C0…C8,…,J0…J1,K0},V ={буква, не буква, пробел, не пробел, цифра, не цифра,}A0, д, Z1, Z2={правильная конструкция, неправильная конструкция}
Функция переходов д:
буква |
не буква |
цифра |
не цифра |
пробел |
не пробел |
правильная конструкция |
неправильная конструкция |
||
A0 |
B0 |
A1 |
|||||||
B0 |
C0 |
B1 |
|||||||
C0 |
D0 |
C1 |
|||||||
D0 |
E0 |
D1 |
|||||||
E0 |
F0 |
E1 |
|||||||
F0 |
G0 |
F1 |
|||||||
G0 |
H0 |
G1 |
|||||||
H0 |
I0 |
||||||||
I0 |
J0 |
I1 |
|||||||
J0 |
K0 |
J1 |
|||||||
K0 |
Z1 |
||||||||
A1 |
A2 |
||||||||
A2 |
A3 |
||||||||
A3 |
A4 |
||||||||
A4 |
A5 |
||||||||
A5 |
A6 |
||||||||
A6 |
A7 |
||||||||
A7 |
A8 |
||||||||
A8 |
A9 |
||||||||
A9 |
A10 |
||||||||
A10 |
Z2 |
||||||||
B1 |
B2 |
||||||||
B2 |
B3 |
||||||||
B3 |
B4 |
||||||||
B4 |
|||||||||
B5 |
B6 |
||||||||
B6 |
B7 |
||||||||
B7 |
B8 |
||||||||
B8 |
B9 |
||||||||
B9 |
Z2 |
||||||||
C1 |
C2 |
||||||||
C2 |
C3 |
||||||||
C3 |
C4 |
||||||||
C4 |
C5 |
||||||||
C5 |
C6 |
||||||||
C6 |
C7 |
||||||||
C7 |
C8 |
||||||||
C8 |
Z2 |
||||||||
D1 |
D2 |
||||||||
D2 |
D3 |
||||||||
D3 |
D4 |
||||||||
D4 |
D5 |
||||||||
D5 |
D6 |
||||||||
D6 |
D7 |
||||||||
D7 |
Z2 |
||||||||
E1 |
E2 |
||||||||
E2 |
E3 |
||||||||
E3 |
E4 |
||||||||
E4 |
E5 |
||||||||
E5 |
E6 |
||||||||
E6 |
Z2 |
||||||||
F1 |
F2 |
||||||||
F2 |
F3 |
||||||||
F3 |
F4 |
||||||||
F4 |
F5 |
||||||||
F5 |
Z2 |
||||||||
G1 |
G2 |
||||||||
G2 |
G3 |
||||||||
G3 |
G4 |
||||||||
G4 |
Z2 |
||||||||
H1 |
H2 |
||||||||
H2 |
H3 |
||||||||
H3 |
Z2 |
||||||||
I1 |
I2 |
||||||||
I2 |
Z2 |
||||||||
J1 |
Z2 |
Состояние |
Действие |
|
A0 |
Исходное состояние |
|
B0 |
Определение первого символа (буква) |
|
(C0, A2) |
Определение второго символа (буква) |
|
(D0, B2, A3) |
Определение третьего символа (пробел) |
|
(E0, C2, B3, A4) |
Определение четвертого символа (цифра) |
|
(F0, D2, C3, B4, A5) |
Определение пятого символа (цифра) |
|
(G0, E2, D3, C4, B5, A6) |
Определение шестого символа (цифра) |
|
(H0, F2, E3, D4, C5, B6, A7) |
Определение седьмого символа (пробел) |
|
(I0, G2, F3, E4, D5, C6, B7, A8) |
Определение восьмого символа (цифра) |
|
(J0, H2, G3, F4, E5, D6, C7, B8, A9) |
Определение девятого символа (цифра) |
|
(K0, I2, H3, G4, F5, E6, D7, C8, B9, A10) |
Определение десятого символа (буква) |
|
(A1, B1, J1) |
Определение одиннадцатого символа (не буква) |
|
(D1, E1, F1, H1, I1) |
Определение двенадцатого символа (не цифра) |
|
(C1, G1) |
Определение тринадцатого символа (не пробел) |
|
(Z1, Z2) |
Завершение работы конечного автомата |
3. АЛГОРИТМ РАЗРАБОТАННОЙ ПРОГРАММЫ
В этой главе описывается блок-схема разработанной программы со всеми условиями, циклами и переходами.
Рис. 2
Рассмотрим словесный алгоритм разработанной программы:
Шаг 1: Начало программы.
Шаг 2: Чтение файла.
Шаг 3: Запись текста в строку.
Шаг 4: Разделение строки на массив слов.
Шаг 5: Перебор и запоминание слов с определенным индексом.
Шаг 6: Проверка слов соответствию маске.
Шаг 7: Разделение слов на отдельные элементы.
Шаг 8: Перебор элементов слова.
Шаг 9: Выбор правила по выбранному элементу.
Шаг 10: Проверка первого символа.
Шаг 11-19: Проверка остальных символов аналогично первому.
Шаг 20: В случае выполнения правил, вывод конструкций на экран.
Шаг 21: Определение слов на ошибки.
Шаг 22: Вывод ошибочных конструкций на экран.
Шаг 23: Конец программы
4. КОД ПРОГРАММЫ
Ниже приводится код разработанной программы с построчным комментарием.
public partial class Form1 : Form
{
string filename;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Regex rege = new Regex(@"^[a-zA-Z][a-zA-Z]( )[0-9][0-9][0-9]( )[0-9][0-9][a-zA-Z]$"); // маска
if (filename == null)
{
MessageBox.Show("Файл не выбран!\n Выберите файл!");
}
else
{
Regex reg;
int def = 0;
string TempWord;
string[] TempWord1;
string text1 = "";
String line;
StringBuilder str = new StringBuilder(); // изменяемая стока
StringBuilder str1 = new StringBuilder();
using (StreamReader sr = new StreamReader(filename))
{
line = sr.ReadToEnd();
TempWord = line;
TempWord1 = TempWord.Split(new char[] { '.', ',', '\r', '\n' });
}
for (int i = 0; i < TempWord1.Length; i++) // идем по массиву
{
text1 = TempWord1[i];
foreach (Match match in rege.Matches(text1))
{
str1.AppendLine(match.Value);
textBox1.Text = str1.ToString();
}
char[] b = text1.ToCharArray();
for (int j = 0; j < b.Length; j++)
{
char Temp;
Temp = b[j];
int a = 0;
switch (j)
{
case 0:
reg = new Regex(@"^[a-zA-Z]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 1:
reg = new Regex(@"^[a-zA-Z]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 2:
reg = new Regex(@"^( )$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 3:
reg = new Regex(@"^[0-9]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 4:
reg = new Regex(@"^[0-9]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 5:
reg = new Regex(@"^[0-9]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 6:
reg = new Regex(@"^( )$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 7:
reg = new Regex(@"^[0-9]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 8:
reg = new Regex(@"^[0-9]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
case 9:
reg = new Regex(@"^[a-zA-Z]$");
foreach (Match match in reg.Matches(Convert.ToString(b[j])))
{
a++;
}
if (a == 0)
{
def++;
}
break;
default: MessageBox.Show("Нет вхождений");
break;
}
}
if (def > 1)
{
str.AppendLine(text1);
textBox3.Text = str.ToString();
}
else if (def == 1)
{
str.AppendLine(text1);
textBox2.Text = str.ToString();
}
str = new StringBuilder();
def = 0;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog() { Filter = "Текстовые файлы(*.doc)|*.doc" };
if (openFileDialog1.ShowDialog() == DialogResult.OK)
filename = openFileDialog1.FileName;
}
программа анализатор код интерфейс
5. ПРИМЕР РАБОТЫ РАЗРАБОТАННОЙ ПРОГРАММЫ
Далее описывается пример работы с программой. Каким образом она запускается, что нужно нажать, чтобы получить результат, скриншоты готового результата с пояснениями.
Представить пару вариантов тестирования программы для разных входных данных.
А) Чтобы запустить программу, необходимо запустить среду разработки Visual Studio и открыть файл программы. После чего скомпилировать программу (комбинация клавиш (ctrl + F5)).
Рис. 3 - Интерфейс запущенной программы
Б) Чтобы программа давала результат нужно загрузить документ, в котором находятся номера Лихтенштейна и номера, содержащие одну ошибку.
Рис. 4 - Пример работы программы
СПИСОК ЛИТЕРАТУРЫ
1. Тенишев Д.Ш. Лингвистическое и программное обеспечение автоматизированных систем [Текст] / Д.Ш. Тенишев. - СПб.: ЦОП «Профессия», 2010. - 48 с.
2. Заболеева-Зотова А.В., Камаев В.А. Лингвистическое обеспечение автоматизированных систем [Текст] / А.В. Заболеева-Зотова, В.А. Камаев. - М.: Высш. шк., 2008. - 244 с.
3. Мозговой М.В. Классика программирования: языки, автоматы, компиляторы. Практический подход [Текст] / М.В. Мозговой. - СПб.: «Наука и техника», 2006. - 320 с.
4. Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технолигии, инструменты [Текст]: пер. с англ. / А. Ахо, Р. Сети, Д. Ульман. - М.: Изд. дом «Вильямс», 2003. - 768 с.
Размещено на Allbest.ru
Подобные документы
Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Разработка технического задания на проектирование, определение требований к программе. Предварительный выбор метода решения синтаксического анализатора, проектирование программного приложения, конфигурация технических средств программы и её тестирование.
курсовая работа [28,5 K], добавлен 28.06.2011Характеристика интегральной среды разработки Microsoft Visual Studio NET, ее особенности. Анализ программ "Сетевой чат", программа-клиент. Основные функции программы-сервера, порядок ее запуска. Влияние персонального компьютера на организм человека.
дипломная работа [1,1 M], добавлен 11.07.2012Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.
курсовая работа [968,2 K], добавлен 26.01.2013Синтаксически ориентированная трансляция: общие понятия; транслятор, интерпретатор, препроцессор. Программная реализация трансляции, основанной на структуре текста; идея Н. Хомского; языковые процессоры. Заголовочные файлы, алгоритмы и функции программы.
курсовая работа [734,3 K], добавлен 04.06.2013Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.
методичка [2,1 M], добавлен 11.09.2014Изучение принципов построения линейных алгоритмов и простых расчетных программ на языке программирования C. Разработка программы расчета математических выражений на основе вводимых данных. Создание консольных приложений в среде Microsoft Visual Studio.
лабораторная работа [254,4 K], добавлен 23.11.2014Технология разработки и тестирования программного обеспечения в среде Visual Studio на примере создания программы моделирования систем массового обслуживания. Аналитические и имитационные методы моделирования с разными дисциплинами обслуживания заявок.
дипломная работа [1,1 M], добавлен 09.09.2012Методология и технология разработки программного продукта. Решение задачи поиска кратчайших путей между всеми парами пунктов назначения, используя алгоритм Флойда. Разработка интерфейса программы, с использованием среды Delphi Borland Developer Studio.
курсовая работа [2,0 M], добавлен 26.07.2014Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.
курсовая работа [639,0 K], добавлен 16.03.2012