文脈自由文法

Download Report

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 
形式言語とオートマト
形式言語とオートマト
お疲れ様
小テストで
す。
形式言語とオートマト