Банк

Рефератов

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

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={правильная конструкция, неправильная конструкция}


Функция переходов ?:


букване буквацифране цифрапробелне пробелправильная конструкциянеправильная конструкцияA0B0A1B0C0B1C0D0C1D0E0D1E0F0E1F0G0F1G0H0G1H0I0I0J0I1J0K0J1K0Z1A1A2A2A3A3A4A4A5A5A6A6A7A7A8A8A9A9A10A10Z2B1B2B2B3B3B4B4B5B6B6B7B7B8B8B9B9Z2C1C2C2C3C3C4C4C5C5C6C6C7C7C8C8Z2D1D2D2D3D3D4D4D5D5D6D6D7D7Z2E1E2E2E3E3E4E4E5E5E6E6Z2F1F2F2F3F3F4F4F5F5Z2G1G2G2G3G3G4G4Z2H1H2H2H3H3Z2I1I2I2Z2J1Z2

СостояниеДействие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

{filename;Form1()

{();

}void button1_Click(object sender, EventArgs e)

{rege = new Regex(@"^[a-zA-Z][a-zA-Z]( )[0-9][0-9][0-9]( )[0-9][0-9][a-zA-Z]$"); // маска(filename == null)

{.Show("Файл не выбран!\n Выберите файл!");

}

{reg;def = 0;TempWord;[] TempWord1;text1 = "";line;str = new StringBuilder(); // изменяемая стокаstr1 = new StringBuilder();(StreamReader sr = new StreamReader(filename))

{= sr.ReadToEnd();= line;= TempWord.Split(new char[] { '.', ',', '\r', '\n' });

}(int i = 0; i < TempWord1.Length; i++) // идем по массиву

{= TempWord1[i];(Match match in rege.Matches(text1))

{.AppendLine(match.Value);.Text = str1.ToString();

}[] b = text1.ToCharArray();(int j = 0; j < b.Length; j++)

{Temp;= b[j];a = 0;(j)

{0:= new Regex(@"^[a-zA-Z]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};1:= new Regex(@"^[a-zA-Z]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};2:= new Regex(@"^( )$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;



}(a == 0)

{++;

};3:= new Regex(@"^[0-9]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};4:= new Regex(@"^[0-9]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};5:= new Regex(@"^[0-9]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};6:= new Regex(@"^( )$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};7:= new Regex(@"^[0-9]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};8:= new Regex(@"^[0-9]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};9:= new Regex(@"^[a-zA-Z]$");(Match match in reg.Matches(Convert.ToString(b[j])))

{++;

}(a == 0)

{++;

};: MessageBox.Show("Нет вхождений");;

}

}(def > 1)

{.AppendLine(text1);.Text = str.ToString();

}if (def == 1)

{.AppendLine(text1);.Text = str.ToString();

}= new StringBuilder();= 0;

}

}

}void button2_Click(object sender, EventArgs e)

{openFileDialog1 = new OpenFileDialog() { Filter = "Текстовые файлы(*.doc)|*.doc" };(openFileDialog1.ShowDialog() == DialogResult.OK)= openFileDialog1.FileName;

}

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

5. ПРИМЕР РАБОТЫ РАЗРАБОТАННОЙ ПРОГРАММЫ


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

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

А) Чтобы запустить программу, необходимо запустить среду разработки Visual Studio и открыть файл программы. После чего скомпилировать программу (комбинация клавиш (ctrl + F5)).


Рис. 3 - Интерфейс запущенной программы


Б) Чтобы программа давала результат нужно загрузить документ, в котором находятся номера Лихтенштейна и номера, содержащие одну ошибку.


Рис. 4 - Пример работы программы


СПИСОК ЛИТЕРАТУРЫ


1. Тенишев Д.Ш. Лингвистическое и программное обеспечение автоматизированных систем [Текст] / Д.Ш. Тенишев. - СПб.: ЦОП «Профессия», 2010. - 48 с.

. Заболеева-Зотова А.В., Камаев В.А. Лингвистическое обеспечение автоматизированных систем [Текст] / А.В. Заболеева-Зотова, В.А. Камаев. - М.: Высш. шк., 2008. - 244 с.

. Мозговой М.В. Классика программирования: языки, автоматы, компиляторы. Практический подход [Текст] / М.В. Мозговой. - СПб.: «Наука и техника», 2006. - 320 с.

. Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технолигии, инструменты [Текст]: пер. с англ. / А. Ахо, Р. Сети, Д. Ульман. - М.: Изд. дом «Вильямс», 2003. - 768 с.