• 検索結果がありません。

正則表現から ε-NFA への等価変換

ドキュメント内 _auto (ページ 63-68)

5

任意の正則表現から、その正則表現の言語を受理言語とするε-NFAを作ることができます。

6

変換規則3 rをΣの上の任意の正則表現とします。そのとき、L(r)を受理言語とするε-NFA:

7

M = (Q,Σ,δ, q0, F)を必ず作ることができます。すなわち、記号列uについて、u∈L(r)ならば

8

u∈L(M)であり、u /∈L(r)ならばu /∈L(M)であるようなM が存在し、そのようなM を実際

9

に作ることができます。

10

具体的な変換方法として、正則表現rが、r=a(a∈Σ)、r=ε、r=∅の場合の変換方法を初

11

めに示します。次にr1、r2は正則表現であって、それぞれに対応するε-NFA:M1、M2が既に構

12

成されていると仮定します。このとき、r=r1 |r2、r=r1r2、r=r1、r= (r1)、r=r+1 の形を

13

しているときのオートマトンの構成法を示します。ただし、議論を簡単にするため、この変換規則

14

によって構成される全てのオートマトンでは、

15

1. 最終状態はひとつしか存在せず、

16

2. 最終状態を始点とする枝はなく、

17

3. 初期状態と最終状態は異なる

18

ように構成すると約束します。

19

1. まず、r=a(a∈Σ)ならば、対応するε-NFAを図8.1(1)のように作ります。このε-NFAを

20

5項組Maで示すと、Ma= ({q0, qf},Σ,δa, q0,{qf})です。ただしδa(q0, a) ={qf}とし、そ

21

れ以外のδaの値は全て∅です。

22

2. もしr=εならば、対応するε-NFAを図8.1(2)のように作ります。このε-NFAを5項組Mε

23

で示すと、Mε= ({q0, qf},Σ,δε, q0,{qf})です。ただしδε(q0,ε) ={qf}とし、それ以外の

24

δεの値は全て∅です。

25

q0 a qf

r=a

q0

ϵ

qf

r=ϵ

q0 qf

r=∅

q0 qf

q0 qf

q0 qf

(1) (2) (3)

(4)

q0 qf

ϵ

q0

ϵ ϵ ϵ

ϵ

qf

r=r

1

|r

2

r=r

1

r

2

(5)

r=r

1*

q0 qf

ϵ

q0

ϵ

qf

ϵ

ϵ

(6)

1 1

1 1

1 1

2 2

2 2

図 8.1: 正則表現からε-NFAへの変換

3. もしr=∅ならば、対応するε-NFAを図8.1(3)のように作ります。このε-NFAを5項組M

1

で示すと、M= ({q0, qf},Σ,δ, q0,{qf})です。ただし遷移関数δの値は全て∅です。

2

次に、r1、r2が正則表現であって、それぞれに対応するε-NFA:M1、M2が既に構成されている

3

と仮定します。ここに5項組をM1= (Q1,Σ,δ1, q10,{q1f})、M2= (Q2,Σ,δ2, q02,{qf2})と仮定して

4

おきます。

5

1. もしr=r1|r2ならば、対応するε-NFAを図8.1(4)のように作ります。このε-NFAを5項組

6

MAで示す1と、MA= (Q1∪Q2∪{q0, qf},Σ,δA, q0,{qf})です。ただしδA(q0,ε) ={q01, q20}、

7

δA(qf1,ε) = {qf}、δA(qf2,ε) = {qf}、任意の記号a ∈ ΣについてδA(q0, a) = δA(qf1, a) =

8

δA(qf2, a) =∅です。さらにM1の任意の状態q∈Q1、および任意の記号a∈Σ∪{ε}につい

9

てδA(q, a) =δ1(q, a)、M2の任意の状態q∈Q2、および任意の記号a∈Σ∪{ε}について

10

δA(q, a) =δ2(q, a)とします。

11

2. もしr=r1r2ならば、対応するε-NFAを図8.1(5)のように作ります。このε-NFAを5項組

12

MCで示す2と、MC= (Q1∪Q2,Σ,δC, q01,{qf2})です。ただしδC(qf1,ε) ={q20}です。さら

13

に任意の状態q∈Q1−{q1f}、および任意の記号a∈Σ∪{ε}についてδC(q, a) = δ1(q, a)、

14

任意の状態q∈Q2、および任意の記号a∈Σ∪{ε}についてδC(q, a) =δ2(q, a)とします。

15

3. もしr=r1ならば、対応するε-NFAを図8.1(6)のように作ります。このε-NFAを5項組

16

MKで示す3と、MK = (Q1∪{q0, qf},Σ,δK, q0,{qf})です。ただしδK(q0,ε) ={q10, qf}、

17

δK(qf1,ε) ={q01, qf}です。さらに任意の状態q∈Q1−{q1f}、および任意の記号a∈Σ∪{ε}

18

についてδK(q, a) =δ1(q, a)とします。

19

4. もしr= (r1)ならば、対応するε-NFAはM1と同じです。

20

5. もしr=r+1 ならば、これをr=r1r1またはr=r1r1に変形し、変換を行います。 "

21

例として正則表現(H|F|R)をε-NFAに変換することを考えましょう。まず、三つの正則表現

22

H、F、Rに対応するε-NFAはそれぞれ図8.2 (1)、(2)、(3)です。ただし煩雑ですから、各状態

23

にラベル(q0、qf など)は付けないことにします。次に、正則表現H|Fに対応するε-NFAは、図

24

8.2(1)、(2)の二つのε-NFAをもとに図8.1(4)のように組み上げて、図8.2(4)です。正則表現H|F|R

25

は(H|F)|Rと見なせますから、これに対応するε-NFAは、図8.2(4)、(3)のふたつのε-NFAを図

26

8.1(4)のように組み上げて、図8.2(5)です。そして正則表現(H|F|R)に対応するε-NFAは、図

27

8.2(5)のε-NFAをもとに図8.1(6)のように組み上げて、図8.2(6)です。これが求めるオートマト

28

1添字AAlternation(選択)に由来して付けました。

2添字CConcatenation(連接)に由来して付けました。

3添字KKleene(クリーネ:人名)に由来して付けました。

H

r =H

(1)

(4)

ϵ ϵ ϵ

ϵ

r =H|F

F

r =F

(2)

R

r =R

(3)

F H

(5)

ϵ ϵ ϵ

ϵ

r =(H|F)|R=H|F|R

F H

R

ϵ ϵ

ϵ ϵ

(6)

ϵ ϵ ϵ

ϵ

r =(H|F|R)

*

F H

R

ϵ ϵ

ϵ ϵ ϵ

ϵ

ϵ ϵ

図 8.2: 正則表現(H|F|R)のε-NFAへの変換

ϵ ϵ ϵ

ϵ

F H

R

ϵ ϵ

ϵ ϵ ϵ

ϵ

ϵ ϵ

H

F F

ϵ ϵ

ϵ

ϵ ϵ

ϵ ϵ ϵ

ϵ

F H

ϵ

ϵ ϵ

ϵ

ϵ

ϵ

図 8.3: 正則表現(H|F|R)(H|FF)(H|F)のε-NFAへの変換

ンです。オートマトンを構築していく操作が変換規則3に基づいた全く機械的なものであることに

1

注意してください。

2

同様の機械的な操作を繰り返すことで、正則表現(H|F|R)(H|FF)(H|F)に対応するε-NFAを

3

図8.3のように得ます。

4

ところで、正則表現(H|F|R)(H|FF)(H|F)は缶ジュースが出てくる記号列の集合を表現したも

5

のでした。7章では、そのような記号列の集合を表すε-NFAとして図7.1を示しました。このオー

6

トマトンを変換規則3に基づいて求めた図8.3と比較すると、その形状は相当に異なります。一言

7

で言えば、図8.3の方が多くのε-遷移を含み、

冗長

です。6章の変換規則1、7章の変換

8

規則2もそうでしたが、自動変換して導出されたオートマトンは、人手で求めたオートマトンより

9

も冗長です。冗長ですが、しかし受理言語は同じです。

10

また、図8.3には多くのε-遷移が使用されていますが、それらがオートマトンの部品と部品をつ

1

なぐ役割を果たしている事に気づくでしょう。ε-遷移は、正則表現から有限状態オートマトンへの

2

変換を容易にするために導入されました4

3

変換規則1、変換規則2がそうであったように、変換規則3が等価変換であることも証明せねば

4

なりません。それにはやはり数学的帰納法5を用います。この証明は図8.1からほとんど明らかで

5

あるため、このテキストでは省略します。

6

ドキュメント内 _auto (ページ 63-68)