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

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    530,86 Кб
  • Опубликовано:
    2013-10-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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





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



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: Перебор и запоминание слов с определенным индексом.

Шаг 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)

}= 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 с.

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!