|
буква
|
не
буква
|
цифра
|
не
цифра
|
пробел
|
не
пробел
|
правильная
конструкция
|
неправильная
конструкция
|
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 с.