Transcript 文脈自由文法
形式言語 と オートマト
第9回
鳥取大学工学研究科
情報エレクトロニクス専攻
田中美栄子
前回の授業では
有限オートマトン
正規文法
プッシュダウン
オートマトン
文脈自由文法
形式言語とオートマト
本日の予定
形式言語とオートマト
前回の授業では
有限オートマトンよって受理され
る言語を生成するシステムとして
正規文法や文脈自由文法
を考えた
形式言語とオートマト
今回の授業では
さらに,その文法の制限を緩める
ことにより,有限オートマトンに比べて
能力の高いオートマトンに対応する
形式言語とオートマト
定義 5.1
文
法
G: 文法 G N , , P, S0
N: 非終端記号の有限集合
Σ: 終端 記号の有限集合(アルファベット)
P: 書き換え規則
S: 初期記号 (𝑆 ∈ 𝑁)
形式言語とオートマト
記号 ξ から書き換えを何回か(0回も含む)行う
ことで記号列 η が導出されるとき
ξ ⇒∗ 𝜂
形式言語とオートマト
と表す
書き換え則 𝑝: 𝛼 → 𝛽について、𝜶を左辺、𝜷を右辺という
𝑝: 𝛼 → 𝛽
ξ1 𝛼ξ2 ⇒ ξ1 𝛽ξ2
適用可能な
記号列
適用結果の
記号列
書き換え規則 𝑝: 𝛼 → 𝛽の適用
形式言語とオートマト
文法Gで生成される w および生成される言語𝐿(𝐺)は
次のように定義される
𝑆 ⇒∗ 𝑤, 𝑤 ∈ Σ ∗
𝐿 𝐺 = 𝑤 𝑆 ⇒∗ 𝑤, 𝑤 ∈ Σ∗ }
形式言語とオートマト
文法例1(文脈自由文法)
ノートをとって考えましょう
文法(grammar)
非終端記号(nonterminal)
終端記号(terminal)
生成規則(production rule)
初期記号(initial symbol)
G N, , P, S0
N {S }
{a, b}
P {S aSb, S ab}
S0 S
この文法が生成する言語は?
形式言語とオートマト
文法例1(文脈自由文法)
文法(grammar)
非終端記号(nonterminal)
終端記号(terminal)
生成規則(production rule)
初期記号(initial symbol)
G N, , P, S0
N {S }
{a, b}
P {S aSb,S ab}
S0 S
=導出=
n 1
S aSb aaSbb a Sb a Sb
3
生成される言語:
形式言語とオートマト
3
L {a nb n | n 1}
n 1
a b
n
n
文法例2(文脈自由文法)
ノートをとって考えましょう
言語
L {a b
n 2n
n 1}
を生成する文脈自由文法を構成しなさい
P {S aSb, S ab}
形式言語とオートマト
文法例2(文脈自由文法)
言語
L {a b
n 2n
n 1}
を生成する文脈自由文法を構成しなさい
G N, , P, S0
N {S }
{a, b}
P {S aSbb, S abb}
S0 S
形式言語とオートマト
文法例3(文脈自由文法)
ノートをとって考えましょう
言語
L {a b | 1≦ m ≦ n ≦ 2m}
m n
を生成する文脈自由文法を構成しなさい
先の2例は使えそうだ!
形式言語とオートマト
文法例3(文脈自由文法)
二例の文法の和集合をとる!!
L1 {a b n 1}
n n
G1 N1 , 1 , P1 , S0
N1 {S1}
1 {a, b}
L2 {a b
n
2n
n 1}
G2 N 2 , 2 , P2 , S0
N 2 {S2 }
2 {a, b}
P1 {S1 aS1b,S1 ab} P2 {S2 aS2bb,S2 abb}
S0 S2
S0 S1
形式言語とオートマト
文法例3(文脈自由文法)
言語
L {a b | 1≦ m ≦ n ≦ 2m}
m n
を生成する文脈自由文法を構成しなさい
G G1 G2
P = {S → aSb, S → aSbb, S → ab, S → abb}
解答
形式言語とオートマト
導出例
L {a b | 1≦ m ≦ n ≦ 2m}
m n
P = {S → aSb, S → aSbb, S → ab, S → abb}
S ⇒ aSb ⇒ aaSbb ⇒ aaabbb
S ⇒ aSb ⇒ aaSbbb ⇒ aaabbbb
S ⇒ aSb ⇒ aaSbbb ⇒ aaabbbbb
S ⇒ aSbb ⇒ aaSbbbb ⇒ aaabbbbbb
形式言語とオートマト
形式言語とオートマト
文法例4(文脈自由文法)
言語
L {a b a | i, j, k ≧1, (i j ) ( j k )}
i
j
k
を生成する文脈自由文法を構成しなさい.
生成する文字列は
二通り
形式言語とオートマト
生成する文字列は
二通り
L1 {a b a | i, j, k ≧1, i j}
i
j
k
L2 {a b a | i, j, k ≧1, j k}
i
j
k
分けて考えましょう,まずL1を生成する文脈自由文法を
構成しなさい
形式言語とオートマト
L1 {a b a | i, j, k ≧1, i j}
i
j
k
を生成する文脈自由文法を構成しなさい
G1 N1 , 1 , P1 , S0
G1 : N1 {S1 , T }, {a, b}, P1 {S1 S1a, S1 Ta,
T aTb, T ab}
形式言語とオートマト
L2 {a b a | i, j, k ≧1, j k}
i
j
k
を生成する文脈自由文法を構成しなさい
G2 N 2 , 2 , P2 , S0
G 2 : N 2 {S 2 , T }, {a, b}, P2 {S 2 aS 2 , S 2 aT ,
T bTa, B ba}
形式言語とオートマト
このまま,和集合をとるなら。。。
G1 : N1 {S1 , T }, {a, b}, P1 {S1 S1a, S1 Ta,
T aTb, T ab}
G 2 : N 2 {S 2 , T }, {a, b}, P2 {S 2 aS 2 , S 2 aT ,
T bTa, T ba}
形式言語とオートマト
G : N {S , T }, {a, b},
P {S Sa, S Ta, T aTb, T ab,
S aS , S aT , T bTa, T ba}
を構成し
abaa, aaba, aaaba... などの文字列を生成しまう
形式言語とオートマト
G1 : N1 {S1 , A}, {a, b}, P1 {S1 S1a, S1 Aa,
A aAb, A ab}
G 2 : N 2 {S 2 , B}, {a, b}, P2 {S 2 aS 2 , S 2 aB,
B bBa , B ba}
形式言語とオートマト
G1 : N1 {S1 , A}, {a, b}, P1 {S1 S1a, S1 Aa,
A aAb, A ab}
G 2 : N 2 {S 2 , B}, {a, b}, P2 {S 2 aS 2 , S 2 aB,
B bBa , B ba}
G 5.7 {S} N1 N 2 ,{a, b},
{S S1 , S S 2 } P1 P2 , S
形式言語とオートマト
G 5.7 {S} N1 N 2 ,{a, b},
{S S1 , S S 2 } P1 P2 , S
(i j )
( j k)
L {a b a | i, j, k ≧1, (i j ) ( j k )}
i
j
形式言語とオートマト
k
言語
L {a b a | i, j, k ≧1, (i j ) ( j k )}
i
j
k
を生成する文脈自由文法は:
G 5.7 {S , S1 , S2 , A, B},{a, b},
{S S1 , S S 2 , S1 S1a, S1 Aa, A aAb, A ab,
S 2 aS 2 , S 2 aB, B bBa , B ba}, S
形式言語とオートマト
形式言語とオートマト
お疲れ様
小テストで
す。
形式言語とオートマト