Материал: Ковригин Теория автоматов Лабораторный практикум 2012

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

11. Находим первую пару ближайших скобок на позициях 4 и 8; заменяем пару CF на ·-node (K); C и F – левое и правое поддеревья для K:

РВ

(

1

0

1

(

K

J

)

+

1

0

1

)

№ поз.

0

1

2

3

4

5

6

7

8

9

10

11

12

12.

Заменяем пару KJ на ·-node (L); K и J – левое и правое под-

деревья для L:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

(

1

0

1

(

L

)

+

1

0

1

)

 

 

 

№ поз.

0

1

2

3

4

5

 

6

7

8

9

10

11

 

13.

Заменяем триаду (L) на L:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

(

1

0

1

L

+

1

0

1

)

 

 

 

 

 

№ поз.

0

1

2

3

4

 

5

6

7

8

9

 

 

14.

Находим очередную пару ближайших скобок в позициях 0

и 9; заменяем позиции 2 и 7 на 0-node (M, N), позиции 1, 3, 6 и 8 на

1-node (P, Q, R, S)

 

 

 

РВ

(

P

M

Q

L

+

R

N

S

)

 

 

 

№ поз.

0

 

1

 

2

 

3

 

4

5

6

 

 

7

 

8

9

 

15.

Заменяем пару L+ на +-node (T); L – поддерево для T:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

 

(

 

P

M

Q

T

R

 

N

 

S

 

)

 

 

 

 

 

№ поз.

 

0

 

1

2

3

4

5

 

6

 

7

 

8

 

 

16.

Заменяем пару PM на ·-node (U);

P и M – левое и правое

поддеревья для U:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

 

(

 

U

 

Q

 

T

R

N

 

 

S

 

)

 

 

 

 

 

 

 

№ поз.

0

 

1

 

2

 

3

4

5

 

 

6

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

91

17.

Заменяем пару UQ на ·-node (V);

U и Q – левое и правое

поддеревья для V:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

(

 

V

T

R

N

 

S

 

)

 

 

 

№ поз.

0

 

1

2

3

4

 

5

 

6

 

18.

Заменяем пару VT на ·-node (W); V и T – левое и правое под-

деревья для W:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

 

(

 

 

W

R

 

N

 

S

 

 

)

 

 

 

 

 

№ поз.

0

 

1

 

2

 

3

 

4

 

 

5

 

 

19.

Заменяем пару WR на ·-node (X);

W и R – левое и правое

поддеревья для X:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

(

X

N

S

 

)

 

 

 

 

 

 

 

 

№ поз.

0

1

2

3

 

4

 

 

 

 

20.

Заменяем пару XN на ·-node (Y); X и N – левое и правое под-

деревья для Y:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

 

(

 

Y

S

 

)

 

 

 

 

 

 

 

 

 

 

 

№ поз

0

 

1

 

2

 

3

 

 

 

 

 

 

21.

Заменяем пару YS на ·-node (Z); Y и S – левое и правое под-

деревья для Z:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

(

Z

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

№ поз

0

1

2

 

 

 

 

 

 

 

22.

Заменяем триаду (Z) на Z:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РВ

 

 

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

№ поз.

0

 

 

 

 

 

 

 

 

 

23.

Корнем дерева является Z.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

92

 

 

 

 

 

 

 

 

 

 

 

Построенное дерево приведено на рис. 6.9.

 

 

 

 

 

 

Z(·)

 

 

 

 

 

 

Y(·)

S(1)

 

 

 

 

X(·)

N(0)

 

 

 

 

W(·)

R(1)

 

 

 

V(·)

 

 

T(+)

 

 

 

U(·)

Q(1)

 

L(·)

 

 

P(1)

M(0)

 

K(·)

 

 

J(|)

 

C(|)

 

 

F(|)

G(0)

H(1)

 

A(0)

B(1)

D(0)

E(1)

 

 

Рис. 6.9. Синтаксическое дерево для регулярного выражения

101((0|1)(0|1)(0|1))+101

93

Синтез недетерминированного конечного автомата

Для синтеза недетерминированного автомата воспользуемся рекурсивным обходом дерева в порядке левое поддерево – правое поддерево – корень (post-order), и синтезируем автоматы для посещаемых узлов в соответствии с модифицированным алгоритмом МакНортона–Ямады–Томпосона.

1.От корня спускаемся до узла P, синтезируем автомат N1 по правилу 2.

2.Возвращаемся в узел U, посещаем узел M, синтезируем автомат N2 по правилу 2.

3.Возвращаемся в узел U, синтезируем автомат N3 по правилу 4, объединяя автоматы N1 и N2.

4.Возвращаемся в узел V, посещаем узел Q, синтезируем автомат N4 по правилу 2.

5.Возвращаемся в узел V, синтезируем автомат N5 по правилу 4, объединяя автоматы N3 и N4.

6.Возвращаемся в узел W, спускаемся до узла A, синтезируем автомат N6 по правилу 2.

7.Возвращаемся в узел C, посещаем узел B, синтезируем автомат N7 по правилу 2.

8.Возвращаемся в узел C, синтезируем автомат N8 по правилу 3, объединяя автоматы N6 и N7.

9.Возвращаемся в узел K, спускаемся в узел D, синтезируем автомат N9 по правилу 2.

10.Возвращаемся в узел F, посещаем узел E, синтезируем автомат N10 по правилу 2.

11.Возвращаемся в узел F, синтезируем автомат N11 по правилу 3, объединяя автоматы N9 и N10.

12.Возвращаемся в узел K, синтезируем автомат N12 по правилу 4, объединяя автоматы N7 и N11.

13.Возвращаемся в узел L, спускаемся в узел G, синтезируем автомат N13 по правилу 2.

14.Возвращаемся в узел J, посещаем узел H, синтезируем автомат N14 по правилу 2.

15.Возвращаемся в узел J, синтезируем автомат N15 по правилу 3, объединяя автоматы N13 и N14.

94

16.Возвращаемся в узел L, синтезируем автомат N16 по правилу 4, объединяя автоматы N12 и N15.

17.Возвращаемся в узел T, синтезируем автомат N17 по правилу 6, преобразуя автомат N17.

18.Возвращаемся в узел W, синтезируем автомат N18 по правилу 4, объединяя автоматы N5 и N17.

19.Возвращаемся в узел X, посещаем узел R, синтезируем автомат N19 по правилу 2.

20.Возвращаемся в узел X, синтезируем автомат N20 по правилу 4, объединяя автоматы N18 и N19.

21.Возвращаемся в узел Y, посещаем узел N, синтезируем автомат N21 по правилу 2.

22.Возвращаемся в узел Y, синтезируем автомат N22 по правилу 4, объединяя автоматы N20 и N21.

23.Возвращаемся в узел Z, посещаем узел S, синтезируем автомат N23 по правилу 2.

24.Возвращаемся в узел Z, синтезируем автомат N24 по правилу 4, объединяя автоматы N22 и N23.

25.Так как мы вернулись и обработали корень дерева, то синтез автомата завершен.

Граф переходов автомата приведен на рис. 6.10, таблица переходов приведена в табл. 6.1. Состояние S0 является стартовым, принимающим является состояние S23.

Очевидно, что данный недетерминированный конечный автомат не является единственным, так как благодаря наличию ε-переходов можно построить бесконечное множество автоматов, соответствующих данному регулярному выражению. Данный автомат также не является и минимальным, так как количество состояний в автомате, представленном на рис. 6.10, может быть сокращено. Но в данном сокращении нет необходимости, так как данный автомат в дальнейшем будет преобразован в детерминированный конечный автомат. При этом алгоритм построения недетерминированного конечного автомата, которым мы воспользовались, гарантирует верхнюю границу анализируемых состояний автомата и количество переходов из его состояний, что делает дальнейшие этапы синтеза более предсказуемыми с точки зрения вычислительной сложности.

95

Источник: https://studfile.net/preview/16708773/