start |
1 |
0 |
|
1 |
|
|
|
|
|
|
S0 |
S1 |
S2 |
S3 |
ε
|
|
0 |
|
|
|
0 |
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S5 |
S6 |
ε |
ε |
S10 |
S11 |
ε |
ε |
S15 |
S16 |
ε |
ε |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
S4 |
|
|
|
S9 |
|
|
S14 |
|
|
|
S19 |
|
|
|
|
|
|
|
|
|
|||
|
|
1 |
|
|
|
1 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
||
ε |
S7 |
S8 |
|
|
S12 |
S13 |
|
|
S17 |
S18 |
ε |
|
|
|
|
ε |
ε |
||||||
|
|
|
|
|
|
|
|
|
|
εε
ε
|
1 |
0 |
1 |
S20 |
S21 |
S22 |
S23 |
Рис. 6.10. Граф переходов недетерминированного конечного автомата, соответствующего регулярному выражению 101((0|1)(0|1)(0|1))+101
Таблица 6.1 Таблица переходов недетерминированного конечного автомата,
соответствующего регулярному выражению 101((0|1)(0|1)(0|1))+101
Исходное |
|
Следующее состояние |
|
|
состояние |
0 |
|
1 |
ε |
S0 |
- |
|
S1 |
- |
S1 |
S2 |
|
- |
- |
S2 |
- |
|
S3 |
- |
S3 |
- |
|
- |
S4 |
S4 |
- |
|
- |
S5, S7 |
S5 |
S6 |
|
- |
- |
S6 |
- |
|
- |
S9 |
S7 |
- |
|
S8 |
- |
S8 |
- |
|
- |
S9 |
S9 |
- |
|
- |
S10, S12 |
S10 |
S11 |
|
- |
- |
S11 |
- |
|
- |
S14 |
S12 |
- |
|
S13 |
- |
S13 |
- |
|
- |
S14 |
S14 |
- |
|
- |
S15,S17 |
S15 |
S16 |
|
- |
- |
S16 |
- |
|
- |
S19 |
S17 |
- |
|
S18 |
- |
S18 |
- |
|
- |
S19 |
S19 |
- |
|
- |
S20 |
S20 |
- |
|
S21 |
- |
S21 |
S22 |
|
- |
- |
S22 |
- |
|
S23 |
- |
S23 |
- |
|
- |
- |
Синтез детерминированного конечного автомата
Рассмотрим синтез детерминированного конечного автомата по алгоритму 6.3.
1.Строим множество zε(S0) = {S0}, ставим ему в соответствие состояние ДКА A, которое будет стартовым (табл. 6.2).
2.Строим множество zε(M0(A)) = Ø, т.е. из A по 0 будет переход
97
в тупиковое состояние. Строим множество zε(M1(A)) = {S2}, ставим ему в соответствие состояние ДКА B. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.3).
Таблица 6.2
Синтез таблицы переходов ДКА (шаг 1)
ДКА |
НКА |
0 |
1 |
|
A |
S0 |
|
|
|
|
|
|
Таблица 6.3 |
|
|
Синтез таблицы переходов ДКА (шаг 2) |
|
|
|
|
|
|
|
|
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B |
S1 |
|
|
|
3. Строим множество zε(M0(B)) = {S2}, ставим ему в соответствие состояние ДКА C. Строим множество zε(M1(B)) = Ø, т.е. из B по 0 будет переход в тупиковое состояние. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.4).
|
|
|
Таблица 6.4 |
|
|
Синтез таблицы переходов ДКА (шаг 3) |
|
|
|
|
|
|
|
|
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B (*) |
S1 |
C |
Ø |
|
C |
S2 |
|
|
|
4.Строим множество zε(M0(C)) = Ø, т.е. из C по 0 будет переход
втупиковое состояние. Строим множество zε(M1(C)) = {S3, S4, S5, S7}, ставим ему в соответствие состояние ДКА D. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.5).
5.Строим множество zε(M0(D)) = {S6, S9, S10, S12}, ставим ему
всоответствие состояние ДКА E. Строим множество zε(M1(D)) =
98
= {S7, S9, S10, S12}, ставим ему в соответствие состояние ДКА F. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.6).
Таблица 6.5
Синтез таблицы переходов ДКА (шаг 4)
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B (*) |
S1 |
C |
Ø |
|
C (*) |
S2 |
Ø |
D |
|
D |
S3, S4, S5, S7 |
|
|
|
|
|
|
Таблица 6.6 |
|
|
Синтез таблицы переходов ДКА (шаг 5) |
|
|
|
|
|
|
|
|
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B (*) |
S1 |
C |
Ø |
|
C (*) |
S2 |
Ø |
D |
|
D (*) |
S3, S4, S5, S7 |
E |
F |
|
E |
S6, S9, S10, S12 |
|
|
|
FS8, S9, S10, S12
6.Строим множество zε(M0(E)) = {S11, S14, S15, S17}, ставим ему в соответствие состояние ДКА G. Строим множество
zε(M1(E)) = {S13, S14, S15, S17}, ставим ему в соответствие состояние ДКА H. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.7).
7.Строим множество zε(M0(F)) = {S11, S14, S15, S17}. Состоя-
ние, соответствующее такому множеству, уже есть в ДКА (G).
Строим множество zε(M1(F)) = {S13, S14, S15, S17}. Состояние, соответствующее такому множеству, также есть в ДКА (H). Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.8).
8.Строим множество zε(M0(G)) = {S4, S5, S7, S16, S19, S20},
ставим ему в соответствие состояние ДКА I. Строим множество
zε(M1(G)) = {S4, S5, S7, S18, S19, S20}, ставим ему в соответствие состояние ДКА J. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.9).
99
|
|
|
Таблица 6.7 |
|
|
Синтез таблицы переходов ДКА (шаг 6) |
|
|
|
|
|
|
|
|
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B (*) |
S1 |
C |
Ø |
|
C (*) |
S2 |
Ø |
D |
|
D (*) |
S3, S4, S5, S7 |
E |
F |
|
E (*) |
S6, S9, S10, S12 |
G |
H |
|
F |
S8, S9, S10, S12 |
|
|
|
G |
S11, S14, S15, S17 |
|
|
|
H |
S13, S14, S15, S17 |
|
|
|
|
|
|
Таблица 6.8 |
|
|
Синтез таблицы переходов ДКА (шаг 7) |
|
|
|
|
|
|
|
|
ДКА |
НКА |
0 |
1 |
|
A (*) |
S0 |
Ø |
B |
|
B (*) |
S1 |
C |
Ø |
|
C (*) |
S2 |
Ø |
D |
|
D (*) |
S3, S4, S5, S7 |
E |
F |
|
E (*) |
S6, S9, S10, S12 |
G |
H |
|
F (*) |
S8, S9, S10, S12 |
G |
H |
|
G |
S11, S14, S15, S17 |
|
|
|
H |
S13, S14, S15, S17 |
|
|
|
9. Строим множество zε(M0(H)) = {S11, S14, S15, S17}. Состоя-
ние, соответствующее такому множеству, уже есть в ДКА (I).
Строим множество zε(M1(H)) = {S4, S5, S7, S18, S19, S20}. Состоя-
ние, соответствующее такому множеству также есть в ДКА (J). Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние (табл. 6.10).
10.Строим множество zε(M0(I)) = {S6, S9, S10, S12}. Состояние, соответствующее такому множеству, уже есть в ДКА (E). Строим множество zε(M1(I)) = {S8, S9, S10, S12, S21}, ставим ему в соответствие состояние ДКА K. Заполняем соответствующим образом таблицу переходов. Помечаем проанализированное состояние
(табл. 6.11).
100