システムソフトウェア: 2007年10月17日

q
q
システムソフトウェア
第3回:2007年10月17日(水)
q
q
本日学ぶこと

文法
q
q
q
q
文字と文字列
無限集合
文法とそのクラス
オートマトン
2
文字

文字とは
q
q

文字列を作るもととなる記号のこと.
「0,1」や「a, b, c, …」などが用いられる.
アルファベットとは
q
q
q
q
文字の集合.
空でない有限集合とする.
例
 Σ={0, 1}
 Σ={a, b, c}
 すべてのASCII記号の集合
この授業では,日常使われる意味の「アルファベット」は忘れて
ください.
3
文字列

文字列とは
q
q

文字列の長さとは
q
q
q

あるアルファベットから選ばれた文字の有限列
例
 Σ={0, 1} のとき,01101, 111, 10101010 など
 Σ={a, b, c} のとき,cab, bba, ccccc など
文字列が持つ文字の数(重複は別々に数える)
「文字列が持つ文字の位置の数」という定義もある.
|bba| = 3 のように,絶対値記号で長さを表す.
空文字列とは
q
q
0個の文字からなる文字列のこと.
この授業では,εと表記する.|ε| = 0 である.
4
文字列の集合

アルファベットΣに対して
q
q
q
q
q
q

長さ0の文字列全体からなる集合は,Σ0 = {ε}
長さ1の文字列全体からなる集合は,Σ1 = Σ
長さ2の文字列全体からなる集合は,Σ2 = {xy | x, y∈Σ}
長さnの文字列全体からなる集合は,
Σn = {x1x2…xn | x1, x2, …, xn ∈Σ}
任意の長さの文字列は,Σ* = Σ0 ∪ Σ1 ∪…∪ Σn ∪…
1以上の長さの文字列は,Σ+ = Σ1 ∪ Σ2 ∪…∪ Σn ∪…
注意点
q
q
φ≠ {ε} ( 「文字列がない」と「空文字列のみ」は異なる)
Σ* = {ε} ∪ Σ+ (「*」は0回以上,「+」は1回以上)
5
文字と文字列の注意点



アルファベットは有限集合
文字列は有限長
長さnの文字列全体からなる集合も,有限集合
q

|Σ| = s とすると,|Σn| = sn
任意の長さの文字列全体からなる集合は,無限集合
q
例えばΣ={0, 1}のとき,Σ*の各要素をε,0, 1, 00, 01, 10, 11,
000, …と並べると,これは非負整数全体の集合と一対一の対
応になる.Σが空でない有限集合ならば常に成り立つ.
6
文字列の連接・繰り返し


x と y を文字列としたとき,x のコピーのあとに y のコピーを
つないでできる文字列を,x と y の連接といい,xy で表す.
例
q
q
q



x = abcba, y=bcba のとき,xy = abcbabcba
x = 11, y = 00 のとき,xyx = 110011
x = 0011のとき,x1 = 00111
xε = εx = x.すなわち,任意の文字列と空文字列を連接する
と,空文字列は吸収される(x = εのときにも成り立つ).
|xy| = |x| + |y|.すなわち,連接した文字列の長さは,もとの
長さの和となる.
x を文字列としたとき,x のn回繰り返しを xn と表す.x0=εで
ある.x* = { xn | n≧0 },x+ = { xn | n>0 } と定義する.
7
部分文字列

文字列x, yに対して,y = wxz と表されるならば,x は y の部
分文字列であるという.
q
q
q

x, y, w, z のいずれも,εであってもよい.
「y をw, x, z に分解する」ともいう.
|y| = |w| + |x| + |z|, |w|≦|y|, |x|≦|y|, |z|≦|y|が成り立つ.
例
q
q
101や010は10101の部分文字列であるが,
11や111は10101の部分文字列ではない.
abcbaはabcbaの部分文字列であるが,
abdbaはabcbaの部分文字列ではない.
8
言語


アルファベットΣ,集合Lに対してL⊆Σ*のとき,LをΣ上の言語
という.
言語の例(Σ = {0,1} とする)
q
q



{ε, 01, 0011, 000111, …}
{ε, 10, 11, 101, 111, 1011, 1101, …}
{ε},φ,Σ*も,Σ上の言語である.
Σ上の言語は,有限集合かもしれないし,無限集合かもしれ
ない.
Σが有限集合であっても,「Σ上の言語全体からなる集合」は
(Σ*よりも大きな)無限集合である.
9
「問題」を「言語」で規定する

例1:「わかやまだいがく」は,正規表現パターン「わ.*だい」に
マッチするか?
q
q
q
q

例2:11101を2進数と見たときの数値(29)は素数か?
q

Σ = {わ, か, や, ま, だ, い, が, く} とし,
L1 : 「わ.*だい」にマッチする文字列全体からなる集合
L2 : 「わかやまだいがく」を部分文字列に持つ文字列全体から
なる集合
を求めた上で,L1∩L2 ≠φか否かを判定すればよい.
Σ={0,1} に対して,素数の2進表現全体からなる集合PRIMEを
求め,11101∈PRIMEか否かを判定すればよい.
文字列の集合は無限集合になり得るが,「求める」ことはでき
るの?
10
終端記号と非終端記号(文法の準備として)



アルファベットの各文字は終端記号と呼ばれる.
アルファベットと別に,文字の集合を定義する.そこに属する
各文字は非終端記号と呼ばれる.
文法は,出発記号と呼ばれる非終端記号から,有限回の導
出により,終端記号のみからなる系列(文字列)を求めるた
めのルールを提供する.
01110
S
0S0
01S10
11
文脈自由文法

形式的には,(V, T, P, S)の四字組で表される.ここで,
q
q
q
q

Vは,非終端記号の集合(空でない有限集合)
Tは,終端記号の集合(空でない有限集合)
Pは,「X→α」で記述される生成規則の集合である.ただし,
X∈Vであり,α∈(V∪T)*,すなわちαは終端記号と非終端記号に
よる長さ0以上の系列である.
S∈Vであり,Sは出発記号と呼ばれる.
例:V = {S}, T = {0, 1}, P = {S→ε, S→0, S→1, S→0S0,
S→1S1}.
12
文脈自由文法における導出

先ほどの例({S}, {0, 1}, {S→ε, S→0, S→1, S→0S0,
S→1S1}, S) に対して,
q
q
q
q


S⇒0S0⇒01S10⇒01110
S⇒0S0⇒01S10⇒01ε10 = 0110
S⇒1
S⇒ε
のようにして,S から01110,0110,1,εなどを導出すること
ができる.
文脈自由文法G=(V, T, P, S)に対して,Sから導出できる(非
終端記号のみからなる)文字列全体の集合を L(G) と書き,
文法Gの言語という.
q
上の例で得られる言語は,アルファベット {0, 1} での回文(先頭
から見ても,末尾から見ても同じになる文字列)である.
13
文法

形式的には,(V, T, P, S)の四字組で表される.ここで,
q
q
q
q

Vは,非終端記号の集合(Variable)
Tは,終端記号の集合(Terminal)
Pは,「α→β」で記述される生成規則の集合である.ただし,
α∈(V∪T)* - T*,β∈(V∪T)* である.(Production Rule)
S∈V であり,Sは出発記号と呼ばれる.(Start Symbol)
文脈自由文法は,上で定義した「文法」のうち,生成規則に
制限を加えたものである.
q
q
文法により導出できる言語の集合は,文脈自由文法のそれより
も真に大きい.
ある文法(≠文脈自由文法)から導出できる言語があるとき,そ
れを導出できる文脈自由文法が存在するかもしれない.
14
正規文法

文法の4字組(V, T, P, S)と,V, T, Sはこれまでと同じ.
Pは,「X→a」または「X→aY」で記述される生成規則の集合
である.ただし,X, Y∈V, a∈T である.

正規表現 "(01)+" に対応する正規文法

q
q
q
q
V = {S, A}
T = {0, 1}
P = {S→0A, A→1, A→1S}
導出の例
 S⇒0A⇒01
 S⇒0A⇒01S ⇒010A⇒0101
15
文脈依存文法,句構造文法

文脈依存文法
q
q

文法の4字組(V, T, P, S)と,V, T, Sはこれまでと同じ.
Pは, 「αXβ→αγβ」で記述される生成規則の集合である.ただ
し,X ∈V,α, β, γ∈(V∪T)*
 直感的には,αとβではさまれた「文脈(context)」のもとで,X
をγに書き換える.
句構造文法
q
前述の「文法」のこと.
16
チョムスキー階層(1)
言語
文法
正規言語
正規文法
文脈自由言語
文脈自由文法
プッシュダウンオー コンパイラ構成の
理論的基礎
トマトン(スタック)
文脈依存言語
文脈依存文法
線形拘束オートマト
ン(制限有りのメモリ)
句構造言語
句構造文法
機械
有限オートマトン
(記憶装置がない)
チューリングマシン
(無限長のメモリ)
備考
正規表現(後方参
照なし)
メモリの制約を除い
て,現在の計算機
と同等の計算能力
17
チョムスキー階層(2)
言語全体
句構造言語
文脈依存言語
文脈自由言語
正規言語
18
クラス

集合の集合を,「集合族」または「集合のクラス」という.
q

集合を分類(classify)したいときに,「クラス」が好まれる.
例:文脈自由言語全体の集合をLcf,回文全体からなる言語
をLとすると,
q
L∈ Lcf (L⊆ Lcf ではない)
q
11∈L
19
オートマトン


入力に対して内部の状態に応じた処理を行う,仮想的な自
動機械.計算機の数学的なモデルである.有限個の「状態」
と,状態と入力によって次の状態が決まる「関数」を持つ.
オートマトンの例
q

有限オートマトン,プッシュダウンオートマトン,チューリングマシ
ン,セルオートマトン
英語
q
q
automaton.複数形はautomata
「自動化」は,automation
20
有限オートマトン




内部にいくつか(有限個)の状態を持つ.任意の時点で,そ
の中の一つの状態にいる.
外界からの入力に応じて,今いる状態から次の状態へと遷
移する.
一つの開始状態と,一つ以上の終了状態を持つ.
形式的には,5字組 (Q,Σ, δ, q0, F)で表現される(詳細は省
略).
21
有限オートマトンの例(1)

スイッチの状態
押す
開始
オフ
オン
押す

"int" の認識
開始

""
i
"i"
n
t
"in"
"int"
正規表現 10+1(0|1)*
q0
1
q1
0
1
q2
0
1
q2
0
22
有限オートマトンの例(2)

「偶数個の0と偶数個の1を持つ文字列」全体に対応する有
限オートマトンは?
1
q偶偶
q偶奇
1
0
0
0
0
1
q奇偶
q奇奇
1
ホップクロフト,モトワニ,ウルマン著,野崎昭弘,高橋正子,町田元,山崎秀記訳
『オートマトン 言語理論 計算論Ⅰ [第2版]』, p.56
23
まとめ

形式言語理論により,プログラミングをしたり,アルゴリズム
を考えたりする際の「文字」「文字列」「言語(文字列のある集
合)」の扱いが明確になる.
q

有限集合か無限集合かは常に注意する.
「言語」と
「言語を導出する形式的なルール(文法)」と
「言語を受理する理論的な機械(オートマトン)」には
対応関係や階層関係がある.
24