- •Кафедра «Информатика и программное обеспечение»
- •Построение праволинейной грамматики
- •Переход от праволинейной грамматики к автоматной
- •3. Построение недетерминированного конечного автомата
- •4. Преобразование недетерминированного конечного автомата в детерминированный конечный автомат
- •5. Минимизация автомата
Переход от праволинейной грамматики к автоматной
Автоматные грамматики, или иначе А-грамматики, имеют правила вывода вида
U::=T или U::=TW, где TVT; UVn; WVn.
Перейти от полученной праволинейной грамматики к автоматной можно расширением нетерминального словаря следующим образом : Sc1S1 ; S1c2S2 ; S2с3А и т. д., оставляя в правой части правила один терминальный и один нетерминальный символы или один терминальный.
Выполним преобразование праволинейной грамматики G=(VN, VT, S, R) в автоматную G"=(VN", VT, S, R").
При этом получим следующее множества R правил вывода
-
Sx7S1;
S1x1S2;
S2x0A;
Sx7S3;
S3x6S4;
S4x2B;
Sx7C;
Sx4F;
Ax5D;
Ax2;
Bx5E;
Bx2;
Cx5E;
Cx2;
Dx3S;
Dx7;
Ex3S;
Ex7;
Fx5F1;
F1x4F2;
F2x0F3;
F3x5;
Fx2F4;
F4x4F5;
F5x0F6;
F6x5;
Fx1F7.
F7x4F8;
F8x5;
Следовательно, словарь нетерминальных символов VN будет иметь вид
V"N = {S, S1 , S2, S3, S4, А, В, С, D, E, F, F1, F2, F3, F4, F5, F6, F7, F8,}.
В рассматриваемом примере нетерминальный словарь имеет 19 символов и его мощность V"N равна 19, мощность VT терминального словаря VT равна 8.
3. Построение недетерминированного конечного автомата
Недетерминированный конечный автомат — это пятерка
A=(Q, V, М, S, Z), где
Q - множество (алфавит) внутренних состояний;
V - входной алфавит;
М — функция переходов, представляющая отображение
V*Q P(Q);
P(Q) — множество подмножеств из Q;
S Q — множество начальных состояний;
Z Q — множество заключительных состояний;
SZ.
Недетерминированный конечный автомат (в отличие от детерминированного) может иметь несколько начальных состояний. Отличается он и функциями перехода.
Как правило, недетерминированные конечные автоматы порождаются регулярными грамматиками, которые содержат правила вывода вида
U::=
TW
R::=
TW,
Частичная функция переходов этого случая имеет вид:
M(W,T)={U,R}.
В рассматриваемом примере недетерминированный конечный автомат имеет одно начальное состояние S. Зададим этот автомат следующим образом. Поставим в соответствие символам нетерминального словаря V"N состояния из Q , в том числе нетерминалу S — начальное состояние qo . Добавим заключительное состояние Z, в котором автомат оказывается, если цепочка символов, поступающих на автомат, принадлежит L (G").
Составим табл. 3, в которой нетерминальным символам из множества V"N соответствуют состояния автомата из множества Q.
Таблица 3
S |
S1 |
S2 |
S3 |
S4 |
A |
В |
С |
D |
E |
qo |
q1 |
q2 |
q3 |
q4 |
q5 |
q6 |
q7 |
q8 |
q9 |
F |
F1 |
F2 |
F3 |
F4 |
F5 |
F6 |
F7 |
F8 |
Z |
q10 |
q11 |
q12 |
q13 |
q14 |
q15 |
q16 |
q17 |
q18 |
q19 |
Здесь начальному состоянию S соответствует qo, конечному Z - q19.
Общее количество состояний Q = V "N +1 и равно 20.
Поставим в соответствие правилам вывода переходы автомата.
Так, правилу Аx1D - переход из состояния q5 в состояние q8 под воздействием входного символа x1, а правилу Ех7 — переход из состояния q9 в заключительное состояние q19 при входном символе х7.
Выполнив указанные действия для всех правил R", получаем таблицу переходов (табл. 4) недетерминированного конечного автомата, соответствующего рассматриваемому примеру. Граф переходов, построенный по этой таблице, приведен на рис.1.
Таблица 4
|
Хo |
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
X7 |
q0 |
|
|
|
|
q10 |
|
|
q1 q3 q7 |
q1 |
|
q2 |
|
|
|
|
|
|
q2 |
q5 |
|
|
|
|
|
|
|
q3 |
|
|
|
|
|
|
q4 |
|
q4 |
|
|
q6 |
|
|
|
|
|
q5 |
|
|
q19 |
|
|
q8 |
|
|
q6 |
|
|
q19 |
|
|
q8 |
|
|
q7 |
|
|
q19 |
|
|
q9 |
|
|
q8 |
|
|
|
qo |
|
|
|
q19 |
q9 |
|
|
|
qo |
|
|
|
q19 |
q10 |
|
q17 |
q14 |
|
|
q11 |
|
|
q11 |
|
|
|
|
q12 |
|
|
|
q12 |
q13 |
|
|
|
|
|
|
|
q13 |
|
|
|
|
|
q19 |
|
|
q14 |
|
|
|
|
q15 |
|
|
|
q15 |
q16 |
|
|
|
|
|
|
|
q16 |
|
|
|
|
|
q19 |
|
|
q17 |
|
|
|
|
q18 |
|
|
|
q18 |
|
|
|
|
|
q19 |
|
|
q19 |
|
|
|
|
|
|
|
|
Рис.1
Анализируя полученный граф переходов, можно убедиться, что автомат допускает те и только те цепочки входных символов, которые принадлежат языку L(G"), порождаемому грамматикой G".
