Цель работы: изучение способов задания языков грамматиками, распознающими автоматами и сетями Петри и построение конечного автомата, распознающего заданный язык.
Содержание и основные этапы работы:
построение праволинейной грамматики;
построение автоматной грамматики по праволинейной;
построение недетерминированного конечного автомата;
сведение недетерминированного конечного автомата к детерминированному;
минимизация числа состояний автомата;
выполнение этапов 2-5 с использованием аппарата сетей Петри;
размещение состояний автомата;
структурный и логический синтез распознающего автомата в заданном базисе;
реализация автомата.
Индивидуальное задание
Исходными данными для курсовой работы являются две таблицы – таб.1 и таб.2 – и правила вывода R, приведенные ниже.
В таб.1 первоначально записана лишь первая строка, содержащая перечисленные 18 символов сi. Во вторую строку si записываются первые 18 символов фамилии, имени и отчества с обязательными пробелами между фамилией и именем и именем и отчеством. Затем в третью строку заносим для каждого из 18 символов строки символ из алфавита {x0, x1, x2, x3, x4, x5, x6, x7,} в соответствии с таб.2.
Таблица 1.
с |
с1 |
с2 |
с3 |
с4 |
с5 |
с6 |
с7 |
с8 |
с9 |
с10 |
с11 |
с12 |
с13 |
с14 |
с15 |
с16 |
с17 |
с18 |
si |
Л |
А |
Г |
У |
Т |
И |
Н |
_ |
Ю |
Р |
И |
Й |
_ |
В |
И |
Т |
А |
Л |
xi |
х0 |
х1 |
х4 |
х7 |
х5 |
х3 |
х7 |
х5 |
X3 |
х0 |
Х3 |
Х0 |
Х5 |
Х2 |
х3 |
Х5 |
Х1 |
Х0 |
Таблица 2 построена на основе подсчета появлений каждой буквы русского алфавита в фамилиях, именах и отчествах контингента студентов. Затем буквы были сформированы в восемь групп с таким расчетом, чтобы появление каждого из символов х0-х7 было равномерным.
Таблица 2.
А |
Б |
В |
Г |
Д |
Е |
Ж |
З |
И |
Й |
К |
Л |
М |
Н |
О |
П |
х1 |
х5 |
х2 |
х4 |
х6 |
х6 |
х4 |
х3 |
х3 |
х0 |
х7 |
х0 |
х3 |
х7 |
х4 |
х5 |
Р |
С |
Т |
У |
Ф |
Х |
Ц |
Ч |
Ш |
Щ |
Ь |
Ы |
Э |
Ю |
Я |
- |
х0 |
х4 |
х5 |
х7 |
х2 |
х5 |
х1 |
х2 |
х2 |
х0 |
х6 |
х1 |
х1 |
х3 |
х7 |
х5 |
Наконец, задана формальная грамматика G=<Vt, Vn, S, R>, где Vt={c1, …, c18} – терминальный словарь; Vn={S, A, B, C, D, E, F} – нетерминальный словарь; S Vn – начальный символ грамматики; R – множество правил вывода, которые имеют следующий вид:
S → с1 с2 с3A; S → с1 с4 с5B; S → с6C; S → с7F; A → с8D;
A → с9; B → с8E; B→ с9; C → с8E; C → с9;
D → с10S; D → с11; E → с10S; E → с11;
F → с12 с13 с14 с15; F → с16 с13 с14 с15 F → с17 с18 с15
Эта грамматика, являющаяся праволинейной, приводится к виду G’=<V’t, V’n, S, R’>, где V’t={x0, … ,x7} – новый терминальный словарь; R’ – множество правил вывода, получаемых из заданных заменой символов из алфавита V’t в соответствии с таб.1. В данном примере они имеют вид:
S = x0 x1 x4 A | x0 x7 x5 B | x3 C | x7 F
A = x5 D | x3
B = x5 E | x3
C = x5 E | x3
D = x0 S | x3
E = x0 S | x3
F = x0 x5 x2 x3 | x5 x5 x2 x3 | x1 x0 x3
Здесь | - металингвистический символ (связка), читаемый как «ИЛИ». Мощность словаря = 8.
Переход от праволинейной грамматики к автоматной
Этот этап выполняется путем расширения нетерминального словаря способом, вытекающим из возможности преобразования праволинейной грамматики в автономную. Получим множество правил вывода:
S → x0 S1; S1 → x1 S2; S2 → x4 A; S → x0 S3; S3 → x7 S4; S4 → x5 B;
S → x3 C; S → x7 F; A → x5 D; A → x3; B → x5 E; B → x3; C → x5 E; C → x3;
D → x0 S; D → x3; E → x0 S; E → x3; F → x0 F1; F1 → x5 F2; F2 → x2 F3; F3 → x3;
F → x5 F4; F4 → x5 F5; F5 → x2 F6; F6 → x3; F → x1 F7; F7 → x0 F8; F8→ x3
Таким образом, нетерминальный словарь теперь имеет вид:
V’’n = <S, S1, S2, S3, S4, A, B, C, D, E, F, F1, F2, F3, F4, F5, F6, F7, F8>. Мощность словаря равна 19.