計算の理論 II
文脈自由文法と
プッシュダウンオートマトン
月曜4校時
大月美佳
講義の前に
 前回の失敗:消し忘れ
δ
0,1
0
q0
開始
0,1
q0
開始
0
0
1
[q0]
[q0,q1]
[q0]
[q0,q1]
[q0,q1 ,q2]
[q0]
1
[q0,q1 ,q2]
[q0,q1 ,q2]
[q0,q2]
正
[q0,q2]
[q0,q1 ,q2]
[q0,q2]
q1
q1
1
誤
0
0
1,0
q2
1,0
q2
M=(Q, Σ, δ, [q0], F)
Q={[q0], [q0,q1],
[q0,q1,q2], [q0,q2]}
Σ={0, 1}
δ:左表
F={[q0,q1,q2], [q0,q2]}
→ {[q0], [q0,q1], [q0 ,q1,q2], [q0,q2]}
最小化の変化
 全て同値になる
よって求めるDFAは、
M=(Q, Σ, δ, [q0], F)
Q={q1, q2, q3}
Σ={0, 1}、δ:左表
F={q3}
– 全状態が最終状態だから
– q0≡q1, q0≡q2 , q0≡q3 , q0≡q4 , q2≡q3 , q2≡q4 ,
q3≡q4
 よって求めるDFAは、
M=(Q, Σ, δ, q0, F)
Q={q0}、Σ={0, 1}、δ(q0, 0)=q0, δ(q0, 0)=q0
F={q0}
今日の講義内容
 文脈自由文法
– 定義
– 文脈自由言語(クラスCFL)
– 構文木と最左導出
 プッシュダウンオートマトン
– 構成と定義
– 計算状況(動作、ε動作)
– 決定性、非決定性
文脈自由文法の定義
 文脈自由文法(context-free grammar)
– 非終端アルファベットN (有限集合)
• 要素 x ∈N 非終端記号(non-terminal symbol)
– 終端アルファベットΣ (有限集合)
• 要素 x ∈ Σ 終端記号(terminal symbol)
– 開始記号(start symbol) S∈Q
– 生成規則(production) P⊆N×(N∪Σ)*
• A→αと書く (α=εのときε生成規則)
• A→α1|…| αn = A→α1,…, A→αn
→ G = (N, Σ, P, S)
文脈自由文法の例
1. G=(N, Σ, P, S)を
N={S}, Σ={a, b}, P={S→ab, S→aSb}
とするとき、Gは文脈自由文法
2. G=(N, Σ, P, S)を
N={S, A, B}, Σ={x, 0, 1},
P={S→xA, A→0|1B, B→ε|0B|1B}
とするとき、Gは文脈自由文法
⇒G
 G=(N, Σ, P, S)に対して、V=N∪Nとする。
 u, vが次の(1), (2)を満たすときu⇒Gvと書
くことにする。
(1) u=xAy, v=xαy (x, y, α∈V*, A∈N)。
(2) A→αはGの生成規則。
導出
(derive)
*
 ⇒G
⇒Gの反射的かつ推移的閉包
 V*の要素の列w0, …, wnが
w0⇒Gw1⇒G …⇒Gwn
となっているとき、
w0からwnが導出されるといい、
n
*
w0 ⇒Gwn または w0 ⇒Gwn
n
*
と書く。(Gは省略可: ⇒、⇒、⇒)
文脈自由言語
(context-free language)
 Gの生成する語w
開始記号Sより
終端アルファベットΣ上の記号列wが
Gの生成規則によって導出されるとき
 Σ上の言語L∈Σ*に対して
1. GがLを生成する: L=L(G)となるとき。
2. 文脈自由言語: Lを生成する文脈自由文法
が存在する。
文脈自由言語の例 その1
1. Gを例1の文脈自由文法としたとき、
S⇒aSb⇒aaSbb⇒…⇒an-1Sbn-1⇒anbn
となり、
L(G)={anbn |n≧1}
である。
2. Gを例2の文脈自由文法としたとき、
S⇒xA⇒x0
S⇒xA⇒x1B⇒x10B⇒x10
となり、
L(G)={xu|u=1v, v∈{0, 1}*またはu=0}
文脈自由言語の例 その2
1. G=(N, Σ, P, S)を
N={S}, Σ={), (}, P={S→SS, S→(S), S→()}
とすると、言語L(G)はかっこの入れ子構造
2. G=(N, Σ, P, S)を
N={S}, Σ={0, 1, Φ, +, *, ), (},
P={S→Φ|0|1|(S+S)|SS|S*}
とすると、言語L(G)は{0, 1}上の正規表現全体
文脈自由文法のクラス
 文脈自由文法のクラスをCFLと書く
 CFL
={L|L=L(G)となる文脈自由文法Gがあ
る}
構文木
(parse tree)
 文脈自由文法G=(N, Σ, P, S)に対して、構
文木を帰納的に定義する。
 ここで、V=N∪Σとする。
構文木の定義(1)
(1) 各A∈Vに対して、記号Aをラベルとする1
つの頂点のみからなる木
A
は構文木である。
構文木の定義(2)
(2) A→εに対して、
A
ε
は構文木である。
構文木の定義(3)
(3) T1, …Tnを根のラベルが、A1, …, An∈Vである
構文木とする。Gの生成規則A→A1…Anに対
して、Aを根とする木
A
A1
T1
は構文木である。
…
An
Tn
構文木の定義(4)
(4) 上の(1)~(3)の規則を使って定義される
有限の木のみを構文木という。
構文木の例
G=(N, Σ, P, S)を
0110010110
N={S}, Σ={a, b}, P={S→ab, S→aSb}
としたとき、構文木は右図。
S
S
S
a
a
a
b
b
b
最左導出
(leftmost derivation)
*
 導出u⇒vの各ステップにおいて一番左
にある非終端記号が置き換えられてい
るとき、その導出は最左導出である。
–
G=(N, Σ, P, S)を
N={S}, Σ={), (}, P={S→SS, S→(S), S→()}
とすると、
S⇒(S)⇒((S))⇒((SS))⇒((()S)⇒((()()))
は最左導出。
走査
(traverse)
 根から始めてどのように走査するか
*
A⇒u
最左導出
→左側順走査
S
S
(preorder traverse)
S
S
(
(
(
S
)(
)
)
)
補題
 G=(N, Σ, P, S)を文脈自由文法とする。導出u⇒v
があるならば、uからvへの最左導出がある。
証明
u=w1A1w2…wkAkwk+1(Ai∈N, wj∈Σ*)とする。
このとき、vの分解v= w1v1w2…wkvkwk+1があって、
Ai ⇒vi (1≦i≦k)となる。
そこで、 Ai ⇒viに対する構文木を取り、その左側順走査を
考えれば、 Aiからviへの最左導出が得られる。
それらの最左導出を、非終端記号の順に適用していけば
求める最左導出が得られる。
プッシュダウンオートマトン
(pushdown automaton)
ヘッド
PDA=FA+プッシュダウンストア
 プッシュダウンストア(スタック)
– 記号列を記憶している
A
B
A
B
A
– プッシュダウンヘッドが一番上の記号を指す
– 一番上の記号(トップ記号)のみ読める
– 2つの操作
• プッシュ(push): 新たな記号列を積む
• ポップ(pop): トップ記号を取り除く
PDAの定義
 プッシュダウンオートマトン
(pushdown automaton (pda))
M=(Q, Σ, Γ, δ, q0, Z0, F)
Q: 状態の有限集合。
Σ:入力アルファベット。
Γ: プッシュダウンストアのアルファベット
δ: 遷移関係=遷移の集合
Q×(Σ∪{ε})×Γ×Q×Γ*の有限部分集合。
(q, a, Z, p, α) ∈δのとき、(p, α) ∈δ(q, a, Z)と書く。
q0: 初期状態、q0∈Q
Z0: 初期記号、 Z0∈Γ
F: 最終状態の集合、 F⊆Q
PDAの模式図
入力
0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0
アルファベット
A, BΓ
Z0
初期記号
A
B
A
B
A
アルファベット
0, 1Σ
有限
制御部
遷移関数δ
最終状態の集合
qx
F
有限状態系 q0, qx, qf
qf
Q
q0
初期状態
状態の集合
計算状態
(configuration)
 計算状態とは、
PDA M=(Q, Σ, Γ, δ, q0, Z0, F)に対して、
状態q∈Q, 入力w∈Σ*, 記号列α∈Γ*
から成る組 (q, w, α)
読み残し
w=0110011010
0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0
プッシュダウン
ストアの内容
α=ABAAA
A
B
A
A
A
有限
制御部
q
├M
 ├M の定義
Q×Σ*×Γ*からQ×Σ*×Γ*への関係
(q, ax, Zα) ├M (p, x, βα)
⇔
(p, β)∈δ(q, a, Z)
p, q∈Q, a∈Σ∪{ε}, Z∈Γ, α,β∈Γ*
読み方:
遷移(p, β)∈δ(q, a, Z)によって、
計算状態(q, ax, Zα) から(p, x, βα)に動作する。
ε動作
(ε-move)
 遷移(p, β)∈δ(q, a, Z)において、a=εのとき、
入力記号を読み込まずに動作すること。
(q, x, Zα) ├M (p, x, βα)
– Zがポップされ、βがプッシュされる。
– プッシュダウンストアが空のときは動作は起
こらない。
PDAの例
PDA
M=(Q, Σ, Γ, δ, q0,
Z0, F)
Q={q0, q1, q2},
Σ={0, 1}, Γ={Z0,
0, 1}, F={q2}
δを右表とする。
q
a
Z
δ(q, a, Z)
q0
0
Z0
{(q0, 0Z0), (q1, 0Z0)}
q0
1
Z0
{(q0, 1Z0), (q1, 1Z0)}
q0
0
0
{(q0, 00), (q1, 00)}
q0
0
1
{(q0, 01), (q1, 01)}
q0
1
0
{(q0, 10), (q1, 10)}
q0
1
1
{(q0, 11), (q1, 11)}
q1
0
0
{(q1, ε)}
q1
1
1
{(q1, ε)}
q1
ε
Z0
{(q2, ε)}
例の動作
(q0, 0100101, Z0) ├M (q0, 100101, 0Z0)
├M (q0, 00101, 10Z0)
q a Z
δ(q, a, Z)
q 0 Z
{(q , 0Z ), (q ,
├M (q1, 0101, 010Z0)
0Z )}
q 1 Z
{(q , 1Z ), (q ,
1Z )}
├M (q1, 101, 10Z0)
q 0 0
{(q , 00), (q , 00)}
├M (q1, 01, 0Z0)
q 0 1
{(q , 01), (q , 01)}
q 1 0
{(q , 10), (q , 10)} ├M (q1, 1, Z0)
q 1 1
{(q , 11), (q , 11)}
├M (q2, 1, ε)
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
1
0
1
0
1
0
0
0
0
q
0
0
{(q1, ε)}
1
1
{(q1, ε)}
1
q
t
*
├M、 ├M
 ├*M
=├M の反射的かつ推移的閉包
t
 ├M
=(p0, w0, α0 )├M (p1, w1, α1 )├M …├M (pt, wt, αt )
t: 計算のステップ数
 省略形
t
*
├、 ├
2種類の受理
1. 最終状態によって受理
入力wに対して、q∈Qとγ∈Γ*が存在して
(q0, w, Z0)├M (q, ε, γ)
L(M): 最終状態によって受理される記号列の集合
2. 最終状態と空ストアによって受理
入力wに対して、q∈Qが存在して
(q0, w, Z0)├M (q, ε, ε)
N(M): 最終状態と空ストアによって受理される記号列
の集合
受理の例
q
q
0
q
0
q
0
q
0
q
(q0, 0110, Z0) ├M (q0, 110, 0Z0)
a Z
δ(q, a, Z)
├
M (q1, 10, 10Z0)
0 Z
{(q , 0Z ), (q ,
0Z )}
├M (q1, 0, 0Z0)
1 Z
{(q , 1Z ), (q ,
1Z )}
0 0
{(q , 00), (q , 00)} ├M (q1, ε, Z0)
0 1
{(q , 01), (q , 01)} ├
M (q2, ε, ε)
0
0
0
1
0
1
0
0
0
0
0
1
0
1
1
0
{(q0, 10), (q1, 10)}
1
1
{(q0, 11), (q1, 11)}
0
0
{(q1, ε)}
0110∈L(M)かつ0110∈N(M)
L(M)=N(M)={wwR|w∈{0,1}*}
{(q1, ε)}
wRはwの反転
0
q
0
q
1
q
1
1
1
2つの受理は同値
言語L⊆Σ*に対して、次の(1)(2)は同値
(1) あるPDA Mに対してL=L(M)となる。
(2) あるPDA Mに対してL=N(M)となる。
証明:
次回
最後に
開始
 ミニテストを提出してから帰ること
 次回は、
– 文脈自由文法とプッシュダウンオートマトンの
等価性
ダウンロード

文脈自由文法