Upload
allayna
View
77
Download
2
Embed Size (px)
DESCRIPTION
形式言語とオートマトン 講義資料 . ver.1.8 b(2013/4/24). 教科書. オートマトン 言語理論 計算論 Ⅰ (第2版) J. ホップクロフト・ R. モトワニ・ J. ウルマン. 授業資料. http://thales.philos.k.hosei.ac.jp/automaton/. 何をする学問分野か?. 次の 1 ~3のための 統一的な枠組み 1. 言語理論として: プログラミング言語、通信プロトコル、知識表現 2. 計算論として: 計算の限界、計算の量 3. オートマトンとして: アルゴリズムとその表現. 他の科目との関係. - PowerPoint PPT Presentation
Citation preview
形式言語とオートマトン 講義資料
ver.1.8 b(2013/4/24)
教科書
オートマトン 言語理論 計算論 Ⅰ (第2版)J. ホップクロフト・ R. モトワニ・ J. ウルマン
授業資料
http://thales.philos.k.hosei.ac.jp/automaton/
何をする学問分野か?
次の 1 ~3のための統一的な枠組み1. 言語理論として:プログラミング言語、通信プロトコル、知
識表現2. 計算論として: 計算の限界、計算の量3. オートマトンとして:アルゴリズムとその表現
他の科目との関係
• 計算量の理論( 2 年後期)• コンパイラ( 3 年前期)
– 形式言語の応用分野• コンパイラ演習( 3 年前期)
– コンパイラ作成• プログラミング言語理論・設計( 3 年後
期)– プログラミング言語の基礎理論
学習の目標
• オートマトンの概念を理解する(今日)• 簡単なオートマトンが設計できる• 正則表現が書ける• 文法が表す言語が判る
以上に加えて、• コンピュータに関する理論のトレーニング• 情報・計算システムについて語るためのリテ
ラシー
例題
狼と山羊とキャベツをもった男が川の左岸から右岸に舟で渡ろうとしている。
• 舟は小さいので3つのうち1つしか積めない。
• 男が見張っていないと…– 狼は山羊を食べる– 山羊はキャベツを食べる
3つの品物を右岸に運べるか?YES ならどうやって? NO ならなぜ?
システムの記述男 M, 狼 W, 山羊 G, キャベツ C を川の左右の
岸に応じてハイフン ー の左右に書く。 はじめ: MWGC ー 男が山羊を右岸に運ぶと、
WC ー MG
と変わる。この状態が変化する様子を次のように表す
MWGC ー WC ー MG
g
可能な遷移すべてを図示=状態遷移図
MWGC ー WC ー MG MWC ー G
C ー MWG W ー MGC
g
g m
mc
c
ww
状態遷移図の性質
• 状態の数は有限• 矢印(のラベル)の種類は有限
– (例の場合、 g, m, w, c )• したがって図全体として有限 (有限状態系)• ゴールに至るラベルの列が答え (一通りとは限らない!)
例からわかったこと
• 問題の答えは状態遷移図を描けば経路(の存在)としてわかる。
• 与えられた手順(行為の列)が答えか否かはそのとおり状態遷移図をたどっていけるか否かでわかる。(解か否かを認識できる)– 例: gmwwcgwmg は解か?
上のように状態遷移図を認識装置とみなしたものを(有限)オートマトンという。
レポート問題1
白石○3つと黒石●2つを横一直線にならべる。
真ん中の石を左、右の端に移動させる操作 l , r によって並べ替えることを考える。
○○○●● から始めて、白黒の色の並びが左右対称になるように並べ替えたい。
1. 操作回数が最小の手順は何か?2. rlllrrlrrl は解か?
言語との関係
• 解となる記号列全体はどのような集合か?
• 逆に、与えられた(有限とは限らない)集合の要素だけを認識する方法は何か?– C 言語の正しいプログラムかどうかは有限
オートマトンで判定できるか否か?
記号列の集合=(形式)言語
言語とオートマトン
オートマトンで認識できる言語の集合
有限オートマトンの集合
言語を認識するオートマトンは?
オートマトンが認識する言語は?
通信プロトコルへの応用
“RFC793”
TCP接続状態遷移図
これからの内容
• 有限オートマトンと言語を取り扱うための数学の準備– 論理、集合、関係、グラフ、帰納法
• オートマトンと正則言語の等価性と変換方法
• オートマトンで認識できない言語• もっと表現力豊かな言語~文法で表され
る言語
数学的準備
• 記号列• 集合• グラフ• 帰納的定義• 構造帰納法• 論理• 関係と関数
記号列• 記号 (symbol) ― 定義なしで用いる対象• 記号列 (string) ― 記号の有限個の並び .
語 (word) ともいう。例 a, b, c が記号のとき abbac は記号列• 記号列 w を構成する記号の数を w の長さといい |w| であらわす。例 記号列 w が abbac であるとき |w|=5• 長さが 0 である(記号がひとつもない)記号列の
ことを と書き、空語 (empty word) と呼ぶ。 | |=0
接頭語と接尾語• 記号列 w の先頭のいくつかの記号の並びからなる
語を w の接頭語 (prefix) という。 w そのものと空語ももも w の接頭語である。
例 abb は abbac の接頭語。 abc は abbac の接頭語ではない• 同様に、記号列 w の末尾のいくつかの記号の並びか
らなる語を w の接尾語 (postfix) という。 w そのものと空語ももも w の接尾語である。
• w の接頭語で w とは異なるものを w の真の (proper)接尾語という
問 記号列 abbac の接頭語をすべて挙げよ。
連接• 2つの記号列 u,v をこの順に繋げてできる新しい
記号列 w を u と v の連接( concatenation )といいuv であらわす。
例 hot と dog の連接は hotdog
(空白をあけてはいけない) 注:記号列 w と空語の連接は w (は連接の単位元)
w = w = w• 記号列 w の n個の連接 ww … w を wn とかく w0 = と定義する
n個
言語
• 記号の有限集合をアルファベット (alphabet) という。
例 {a,b,…z}, {0,1} はそれぞれアルファベット• あるアルファベットに属する記号の列の集合
を言語 (language) と呼ぶ。注:空集合φもまたひとつの言語である。 {} (空語1つだけからなる言語)と区別
せよ• アルファベットもももも記号のすべての列の集合
をとかく。
言語の例 - 回文
• 前から読んでも後ろから読んでも同じになる言葉を回文 (palindrome) という。
例 たけやぶやけたわたしまけましたわ• 語 w の記号の順序を逆にした wR であらわ
す。• アルファベット上の回文とは、 ももも w で wR w となるももも{0,1} 上の回文ももももももももも
集合• 集合 (set) 特定の性質をもつものの集まり• x が集合 A の要素 (element) であることを x∈A 、そ
うでないないことは x∈A とかく• 集合 B の要素がすべて集合 A に含まれるとき、 B は A の部分集合 (subset) であるといい、 B ⊆A と
かく。• 「 x について命題 P が成り立つ」ことを P(x) とかく• P(x) となる x 全体の集合を {x|P(x)}また集合 A の要素 x で P(x) となるもの全体の集合を{x∈A |P(x)} のように書く。例 {w∈| wR w} 上の回文全体• {f(x1,…, xn)|P(x1,…, xn)} P(x1,…, xn) となる x1,…, xn から
つくられる f(x1,…, xn) 全体の集合
/
集合に対する演算A と B を集合とするA∪B={x | x∈A または x∈B}( A と B の和 , union )A- B={x | x∈A かつ x∈B} ( A と B の差 ,
difference )A∩B={x | x∈A かつ x∈B}
( A と B の共通部分 , intersection )A×B ={(x, y)| x∈A, y∈B}
( A と B の直積 , Cartesian product )2A ={X|X⊆A} ( A のべき集合 , power set )問 A ={1, 2}, B={2, 3} として上の集合を求めよ。
/
言語に対する演算A,B,C を言語とするAB={xy | x∈A, y∈B} ( A と B の連接)ABC= A(BC) = (AB)C
An = AA…A (n個 , n>0)
A0 ={}
A*= A0 ∪ A1 ∪…= ∪ Ai ( A の閉包)
問 A ={0, 1}, B={2}, C={2} として上の言語を求めよ。
i=0
∞
グラフ• グラフ G は頂点( vertexまたは node )の有限集合 V と頂点の対で表される辺( edge )の有限集合 E の組であって G=(V,E) で表される。
例 V={1,2,3,4,5}, E={(1,3), (3,4), (2,5), (2,2)}
のときグラフ (V,E) は1
3
425
• グラフの頂点の列 v1,v2,…vk が道 (path) であるとは (v1,v2),(v2,v3),…(vk-1,vk) が辺であること。
有向グラフ• 有向グラフはグラフの辺の向きを考慮したもので
やはり G=(V,E) で表す。辺の代わりに有向辺 (arc)といい、 u→v のように書く。
• 有向グラフの頂点の列 v1,v2,…,vk が道であるとはv1→v2, v2→v3,…vk-1→vk が有向辺であること。
問 有向グラフ ({x∈N|0<x<5},{i→j | i<j}) を図示せよ。 ( Nは自然数の集合)
• v1,v2,…,vk が ( 有向 ) グラフ G の道であって v1=vk であるとき、道 v1,v2,…,vk は閉路 (cycle) であるという。
1. a,b,c を記号とする。記号列 x,y,z をそれぞれabc, bb, abcab とするとき、 |xyz|,|xxx|,|xyz|,|xjykzl| はいくらか?
2. a,b,c,d を記号とし、 A={a,b}, B={b,c,d} とするとき、 次の言語の要素を書き下せ。
① AAB② {w∈A* | |w| < 5}
3. V={0,1,2,3,4,5,6,7}, E={i→j | i, j ∈ V, j = i2%8 } とするとき、
G= 〈 V, E 〉を図示せよ。 ( m%n は m を n で割った余りを表す。)
レポート問題3
帰納的定義 (inductive definition)
例 自然数の定義
• 0 は自然数 [ 基礎 (base)]
• 自然数 n に 1 を加えたもの n+1 は自然数 [帰納ステップ (inductive step)]
• 上のようにして得られたものだけが自然数
木の帰納的定義
• 基礎 : 頂点 1個だけで有向辺を持たない有向グラフは木であり、その根はその唯一の頂点。
• 帰納ステップ:1個の頂点 r と、( r を頂点とせず、また互いに頂点を共有しない)有限個の木 T1,…,Tk の根は r1,rk を k本の有向辺 r→r1, …,r →rk で繋いで合成した有向グラフ Tree(T1,…,Tk) は木で根は r
• 上のようにして構成した有向グラフだけが木
r
r1
r
rk
… r1
rk
…
…ならば
T1 Tk
Tree(T1,…,Tk)
T0
帰納法
数学的帰納法:すべての自然数 n に対して命題 P(n) がなりたつこ
とを証明する方法1. P(0) がなりたつ。2. P(k) がなりたつと仮定すれば(帰納法の仮定)、 P(k+1) がなりたつ。1,2 から「すべての自然数 n に対して P(n) がなり
たつ」ことが推論できる。
構造帰納法• すべての木で「頂点の数は有向辺の数より1つ多い」こ
とを証明する。木 T について上の「…」が成り立つことを P(T) と書く。木 T の頂点の数を n(T) 、有向辺の数を e(T) と書く。帰納法による証明基礎: P(T0) (∵ n(T0)=1, e(T0)=0 )帰納ステップ: P(T1), P(T2), …, P(Tk) ならば P(Tree(T1,…,Tk))
(∵ e(Tree(T1,…,Tk))= e(T1) +…+ e(Tk) + k
n(Tree(T1,…,Tk))= n(T1) +…+ n(Tk) + 1
= (e(T1) + 1) +…+ (e(Tk) + 1) + 1 (帰納法の仮定 )
= e(T1) +…+ e(Tk) + k+ 1これらからすべての木 T に対して P(T) と推論してよい。
={0,1} のとき、言語 L を次のように帰納的に定義する1. , 01, 10 は L の要素2. x, y が L の要素のとき、 xy は L の要素
L の要素はすべて 0 と 1 の数が同じであることを
構造帰納法で示せ。
レポート問題4
をアルファベットとする言語 L を次のように帰納的に定義する1. ∈L
2. a∈ も x∈L のとき、 ax は L の要素
ももももも L= もももももももももももももも L⊆ ももももももももももももももももももも
レポート問題5
論理
∀x.P(x) 「すべての x について P(x) 」∃x.P(x) 「ある x について P(x) 」あるいは、∀x∈A.P(x) 「 A のすべての要素 x について
P(x)」などと書く。 ∀を全称限量子 (universal quantifier)
∃を存在限量子 (existential quantifier) という。
関係• 集合 A と B の間の( 2項)関係とは A と
B の直積 A×B の部分集合のこと。• A 上の関係、というときは A と A の間の
関係 R⊆A2 のことを指す。• R が集合 A と B の間の関係であるとき、
(a, b)∈R であることを、(記号R を演算子のように用いて) aRb のように書く。
関数集合 A と B の間の関係 f は次の 2条件を満たすときA から Bへの関数(写像)であるといい、 f : A → B と書く。(存在) ∀ x∈A.∃y∈B. xfy(唯一) ∀ x∈A.∀y1∈B . ∀ y2∈B . xfy1∧ xfy2 ⇒y1=y2
f : A → B であるとき、 afb のかわりに f: a |→ b と書く。 afb となるただ一つの b∈B を f (b) で表す。 集合 A を f の定義域、 B を f の値域と呼ぶ。
関数 f : A→B は値域 B が明らかであるか、もしくは度外視する場合は単に A 上の関数という。
すすんだ用語:関数 f : A → B において、集合 X⊆A に対して、 {f (x)| x∈X} ⊆B を X の f による像 (image) といい f [X] で表す。とくに定義域 A の像 f [A] のことを Im(f) と書く。(上の定義と異なり、 Im(f) のことを値域と呼び、 B を終域と呼んで区別する立場
もある。)関数の定義から ( 存在 ) の条件を除いたものを部分関数(写像)と呼ぶ。部分関数では { x∈A | ∃y∈B. xfy } を定義域 , A を始域と呼んで区別する。
もも f :A → B を集合 (⊆A×B) として帰納的に定義することをいう。
大抵の場合、 A の帰納的定義における A の要素の定義と同時にf によって対応づけられる値を定義するように変更すればよい。
例: 記号列に対してその長さを対応づける関数 f : → Nは次のように帰納的に定義される。[ 基礎 ] (∈であって、) f() = 0
[帰納ステップ ] a∈ x∈ のとき、 ( ax∈ であって、) f(ax) = f(x)+1
関数の帰納的定義
={0,1} のとき、 もも w を引数とし、2進数と解釈したときの値を返す関数 :→ を帰納的に定義せよ。( 0 以外で先頭の 0 は無視し、 に対する値は 0とする。)
( 0 以外に 0 から始まる語はない)正しい2進数およびその値を定義するように上を修正せよ。 も除外のこと。
レポート問題6
有限オートマトン決定性有限オートマトン(DFA) M は次の5
つ組で定義される。M=<Q, , q0, , F>
Q : 状態 (state) の有限集合 : 入力アルファベットq0 : 開始状態(初期状態とも) (∈ Q ) : Q×→ Q 遷移関数 (q, a) =p は状態 q のとき a を読んだとき
次の状態が p であることを表すF : 最終状態(受理状態とも)の集合 (⊆ Q
)
遷移表
0 1
→ q0 q2 q0
* q1 q1 q1
q2 q2 q1
遷移関数を表で表したものを遷移表という。
→は開始状態、*は最終状態を表す
上の遷移表が表す遷移関数を図で表せ。
遷移関数
(q, a) =p を図で表す。
q
p
a
状態遷移図
q0
q2
0
開始q1
1
1
0
0,1
q0
オートマトンが受理する言語
DFAが受理する言語の直観的な説明入力記号列を w=001001 とする
0
q0
q2
0
開始q1
1
1
0
0,1
0 1 0 0 1
q2 q2 q1 q1 q1 q1
受理状態に導く語全体の集合をDFA M の受理する言語と定義する。
遷移関数の拡張
ももももももももももももももももももももももももも ˆ: Q×→ Q を次のように帰納的に定義する。 (☞ もももももももももももも帰納法 )
(基礎) ˆq, =q
(帰納ステップ) ˆq, xa = ˆq, x, aただし a∈, x∈ とする。
拡張された遷移関数の計算ˆ(q0, 001001) = ˆq0, 00100, 1
= ˆq0, 0010, 0, 1= ˆq0, 001, 0, 0, 1
…
= ˆq0, 0, 0, 1, 0, 0, 1= ˆq0, ), 0, 0, 1, 0, 0,
1= q0, 0, 0, 1, 0, 0, 1= q2, 0, 1, 0, 0, 1…= q1
受理言語の定義
DFA A=<Q, , , q0, F>が受理する言語 L(A) は次で定義される。
L(A) ={w∈*|ˆ(q0, w)∈F}
(受理状態に導く入力記号列全体の集合 )
また言語 L は、ある DFA A を用いて L = L(A) とかけるとき正則( regular )であるという。正則な言語を正則言語( regular language )と呼
ぶ
正則言語の例接頭語 01 を持つ語(∈ {0,1}* )全体の集合は
正則か? ヒント:定義より当該言語を受理する DFA が存在すれば正則。
q2
0
開始q1
1
1
0
0,1
q3
q0
0,1
次の言語を受理するDFAを設計せよ。1. 0 と1が交互に並ぶ語全体。ただし、 ,
0,1 もこの言語の語であるものとする。2. 1がちょうど3回現れる語全体3. 2進数とみなせる列全体4. (やや難)3で割り切れる2進数全体
レポート問題7
正則言語の例その2
接尾語 01 を持つ語全体の集合は正則か?
q0
q2
0
開始q1
1
0,1
これは DFA ではない!
非決定性
DFA を変更して同じ入力記号に対して( 0個を含む)複数の状態のいずれかに遷移可能になるようにする。
このように変更された有限オートマトンを非決定性有限オートマトン( Nondeterministic FA, NFA )と呼ぶ。NFA の状態遷移図では同一ラベルの辺が複数出てよい。
q
pa
ra
NFA の定義
DFA からの変更点は遷移関数のみ : Q×→ 2Q (q, a) =P (⊆ Q )は状態 q で a を読んだと
き 次の状態が P の任意の要素 p になり得ることを表す。
言い換えれば、 (q, a) は状態 q で a読んだときに遷移できる行き先全体の集合
NFA の例M=<{q0, q1, q2}, {0, 1}, , q0, {q2}>
q0
q1
0
開始q2
1
0,1
0 1
→ q0 {q0 , q1} {q0}
q1 φ {q2}
* q2 φ φ
NFA が受理する言語
直観的な説明NFA は入力記号を読むたびに可能な遷移の
うちどれか 1 つを選んで遷移する。うまく選んで、入力記号列を読み終わった
直後に受理状態に居るようにできればその入力は受理される。受理される記号列全体の集合をその NFA の受理する言語という。
NFA が受理する言語の例末尾が 01 であるような語全体を受理する NFA
この NFA が w=1001 を受理することを確かめよ。
q0
q2
0
開始q1
1
0,1
遷移関数の拡張( NFA 版)
ももももももももももももももももももももももももも ˆ: Q×*→ 2Q を次のように帰納的に定義する。 (☞ もももももももももももも帰納法 )
(基礎) ˆq, ={q}
(帰納ステップ) ˆq, xa = ∪ p, aももももももp∈ˆq, x
ただし a∈, x∈ とする。
拡張された遷移関数の意味 : 2Q×→ 2Q を P, a =∪ p, a
p∈P
で定義すると、(帰納ステップ)の右辺は
∪ p, aˆq, x, ap∈ˆq, x
のように書ける。 問1 DFA 版のものと比較せよ。
問2 ˆq, x={p1, …, pn} のとき上の式を p1, …, pn を用いて表せ。
NFA が受理する言語厳密な定義NFA A=<Q, , , q0, F>が受理する言語 L(A) は次で定義される。
L(A) ={w∈*|ˆ(q0, w)∩F≠φ}
平たく言えば…
ˆ(q0, w) は、 w を読んで行ける状態全ての集合。L(A) は「各ステップで遷移先をうまく選べば受
理状態に行ける入力記号列全体の集合」
問 例の NFA について ˆ(q0, 1001)∩F≠φを確かめよ
NFA と DFA の等価性• オートマトンの2つのクラスは片方のク
ラスに属すオートマトンの受理言語が他方に属すオートマトンでも受理できるとき、等価である、という。 以下で NFAと DFA が等価であることを示す。
NFA DFA
MN
MDL(MN)=L(MD )
サブセット構成サブセット構成 (subset construction):NFA N=<QN, , N, q0, FN> が与えられたときL(N) を受理する DFA D=<QD, , D, {q0}, FD>を次のようにして構成する。QD は QN の部分集合全体( QN のべき集合)FD は QN の部分集合 S で S∩FN≠φを満たすもの
全体の集合S (⊆ QN )と a∈ に対して、
D(S, a)=∪ Np, aもももp∈S
サブセット構成の例題次を繰り返す。1. 左欄が空でない行について表を埋める2. 左欄にない集合が出たら左欄に追加
0 1
→{q0} {q0, q1}
q0
q10
開始q2
1
0,1
サブセット構成で得られる遷移図
• ノードのラベル(名前)として集合を使うと構成過程がわかりやすいが最終的には必要ない。
• ラベルを通常の記号に付け替えて遷移図を完成せよ。
サブセット構成の正当性サブセット構成によって NFA N=<QN, , N, q0, FN> か
ら DFA D=<QD, , D, {q0}, FD> を構成したときL(D) =L(N) が成り立つ。[証明 ] ˆD ({q0},w) = ˆN (q0, w) を示す|w| に関する帰納法:( 基礎 ) ˆD({q0},) = ˆN(q0, ) = {q0}
(帰納 ) ˆD({q0},xa) = DˆD{q0}, x, a ˆD ももも= DˆNq0, x, a もももももも
もももも=∪ Np, aD ももももももももももももp∈ˆNq0, x
= ˆN (q0, w) ˆN ももも
等価性
• 言語 L がある DFA で受理されるための必要十分条件は L がある NFA で受理されること。
[証明 ]ある DFA で受理⇒ある NFA で受理だけ言えばよい。次のように D から N を構
成D (q,a) =p のとき N (q,a) = {p}
問い 受理状態について確認せよ。
+-符号つき 10進数 (整数 ) を受理する NFA
符号がない場合もあるとすると
これをもっと簡単に書きたい。
NFA の拡張:動作
+ ,-
1, …, 9 0, 1, …, 9
0
開始
+ ,-
1, …, 9 0, 1, …, 9
0
開始
0
1, …, 9
動作を含む NFA 動作を含む NFA(-NFA) A=<Q, , q0, , F>は NFA の遷移関数を次のように変更して定義
される。変更前 : Q×→ 2Q
変更後 : Q×(∪→ 2Q
遷移図では が許される。
この図が表す遷移を - 遷移という。
-NFA の例
符号がない場合もありうる+-符号つき 10進数 (整数 ) を受理する -NFA
+ , - ,
1, …, 9 0, 1, …, 9
0
開始
遷移関数を拡張するための準備
q∈Q の -閉包( -closure ) ECLOSE(q)⊆Qを
次のように帰納的に定義する。基礎: q ECLOSE(∈ q)
帰納: p ECLOSE(∈ q) かつ r∈ (p, ) ならば r ECLOSE(∈ q)
ECLOSE(q) は q から - 遷移だけをたどって到達できる状態すべての集合である。
-閉包の例
ECLOSE(1)={1,2,3,4,6}
ECLOSE(2)={2,3,6}
ECLOSE(4)={4}
2 3 6
4 5 7
1
a
b
遷移関数の拡張( -NFA 版)ˆ: Q×→ 2Q を次のように帰納的に定義する
(基礎) ˆq, = ECLOSE(q)
(帰納ステップ) ˆq, xa = ∪ ECLOSE(r)
もももももr∈∪p, a
p∈ˆq, x
ただし a∈, x∈ とする。上の定義でたとえば
ˆq, x={p1, …, pk},∪ki=1(pi,a)={r1,…,rm}
とすると、帰納ステップの右辺は∪ mj=1ECLOSE(rj)
(参考 ) 見通しをよくする記法
NFA のときと同様に : 2Q×∪→ 2Q
を P, a =∪ p, a p∈P
と定義し、さらに、
ECLOSE(R)=∪ECLOSE(r) r∈R
のように書くことにすると、帰納ステップの右辺は
ECLOSE(((q, x), a))
-NFA の受理する言語
-NFA A=<Q, , , q0, F> が受理する言語は
L(A) ={w∈|ˆ(q0, w)∩F≠φ}
で定義される。
(無しの) NFA との相違点は ˆ が -
NFA 版の拡張された遷移関数 ˆ: Q×(∪→ 2Q である点のみ。
-NFA と DFA の等価性-NFA E=<QE, , E, q0, FE> が与えられたとき ,E が受理する言語 L(E) と同じ言語を受理する DFA D=<QD, , D, qD, FD> を次のようにして構成する。QD は QE の部分集合 S のうち S=∪ECLOSE(p) なるもの全
体 p∈S
qD=ECLOSE(q0)FD は QE の部分集合 S で S∩FE≠φを満たすもの全体の集合S (⊆ QE )と a∈ に対して、
D(S, a)=∪ ECLOSE(r) r∈∪ Ep, a
もも p∈S
(S の要素から出発して a で遷移した後 ,- 遷移だ けで到達できる状態全体の集合 )
(参考)問 前ページの記法で右辺を書き直せ。
-NFA と DFA の等価性 (1/2)-NFA E=<QE, , E, q0, FE> から前頁にしたがってDFA D=<QD, , D, ECLOSE(q0), FD> を構成したときL(D) =L(E) が成り立つ。
[証明 ] ˆD (ECLOSE(q0),w) = ˆE (q0, w) を示す|w| に関する帰納法:( 基礎 ) ˆD(ECLOSE(q0),) = ˆE(q0, ) = ECLOSE(q0)
(帰納 ) ˆD(ECLOSE(q0),xa) = DˆDECLOSE(q0), x, a = DˆEq0, x, a もももももも
もももも=∪ECLOSE(r) D ももも r∈∪ Ep, aももももも もも
p∈ˆEq0, x
= ˆE (q0, xa) ˆE ももも
-NFA と DFA の等価性 (2/2)
DFA D=<Q, , D, q0, F> に対して同じ言語を受理する -NFA E が存在する。
[証明 ] E=<Q, , E, q0, F> ただし
E(q, a) = {D(q, a)} ( a∈ も
E(q, ) = φ
とすればよい。
-NFA から DFA を構成する方法
NFA から構成する方法(サブセット構成)で得られる遷移先集合の各要素の -閉包の和集合を遷移表エントリとして表を埋めていく。
a
ECLOSE(q0) … …
… … …
{p1, …, pk} {s1, …, sn}
(p1, a)∪…∪(pk, a)
={r1, …, rm}
ECLOSE(r1)∪… ECLOSE(∪ rm)
={s1, …, sn}
-NFA→DFA構成の例
下の -NFA と等価な DFA を求めよ。
0
1
2
1
1,
1, 開始
1
0
0 1
オートマトンの利用法:字句認識
符号つきの整数および小数を認識する -NFA
( 0 から始まる整数は 0だけ。符号なしも可)
問 入力ファイルが上記の数を含むか否かを調べる C プログラムを作成せよ。
正則表現正則表現(または正規表現ともいう。 regular
expression, RegExp )はオートマトンが受理する言語を簡便に表す方法(一種の言語)であり、以下の性質をもつ。(証明はあとで。)
1. オートマトンが受理する言語はすべて正則表現で表すことができる。
2. 逆に、正則表現で表した言語はオートマトンで受理することができる。
以下で正則表現 E の表す言語を L(E) と書く。
正則表現の定義正則表現とその表す言語は次のように帰納的に定義さ
れる。基礎: 1. 定数 , φは正則表現で、 L()={}, L(φ)=φ2. a が記号のとき、 aは正則表現で L(a)={a}
帰納:1. E, F が正則表現のとき、 E+F は正則表現で
L(E+F)=L(E)∪L(F)
2. E, F が正則表現のとき、 EF は正則表現でL(EF)=L(E)L(F)
3. E が正則表現のとき、 E* は正則表現で L(E*)=L(E)*
4. E が正則表現のとき、 (E) は正則表現で L((E))=L(E)
演算子の結合順位帰納的定義に現れる演算子の結合は *, 連接 , +の順に強い。例えば、
L(E+FG*) = L(E+(F(G*))) = L(E)∪L(F)L(G)*
注:集合および言語の演算子の結合順位は上から強い順に、1. *, べき2. 連接3. ∪, ∩, -
正則表現定義の早見表
演算子の結合は上から弱い順(+が最も弱く、 * が最も強い。)
正則表現 E L(E)
{}
φ φ
a {a}
E+F L(E)∪L(F)
EF L(E)L(F)
E* L(E)*
(E) L(E)
正則表現が表す言語の例
01*+1 が表す言語L(01*+1)=L(01*)∪L(1)
=L(0)L(1*)∪L(1)
=L(0)L(1)*∪L(1)
={0}{1}* {1}∪={0}{,1,11,111,…} {1}∪={0,01,011,0111,…} {1}∪
「 1個の 0 の後に 1だけが 0個以上続く語および 1」
レポート問題8
次の条件を満たす語全体からなる言語をそれぞれ正則表現で表せ。( ={0,1} )
• 0 がちょうど 3回現れる。• 条件なし。(すべての語)• 0 が 3回以上現れる。• 同じ記号が 3 つ以上連続しない。
正則表現の略記法
E? = + E (0回か 1回 )
問 前頁の正則表現を略記法で書け。
有限オートマトンと正則表現の等価性
有限オートマトンが受理する言語のクラスと正則表現で表わされる言語のクラスは等しい。
クラス A の任意の言語がクラス B に属すことを
のように記すと、-NFA NFA
DFARegExp
A B
DFA が受理する言語は正則表現で表される(証明) DFA A の状態を {1, 2, …, n} とする。
k より大きい状態を経由せずに状態 i から状態 j に至る経路に沿ってラベルをつなげたもの全体を表す正規表現 Rij
(k) は次のように帰納的に定義できる。(経路の両端 ij は k を越えてもよい。)
[ 基礎 ] (i≠j の場合 )1. Rij
(0)= (辺 i→j がないとき )
2. Rij(0)=a (辺 i→j は a をラベルとするものだけ )
3. Rij(0)=a1+a2+…+am(辺 i→j のラベルは a1, …, am)
(i=j の場合 )1. Rij
(0)= (辺 i→i がないとき )
2. Rij(0)=+a (辺 i→i は a をラベルとするものだけ )
3. Rij(0)=+a1+a2+…+am(辺 i→j のラベルは a1, …, am)
(証明つづき)[帰納 ] Rij
(k)=Rij(k-1)+Rik
(k-1)(Rkk(k-1))*Rkj
(k-1)
i jRik
(k-1) Rkj(k-1)
Rkk(k-1)
Rij(k-1)
これをもちいて、受理言語を表す正則表現は
R1f1(n)+…+R1fp
(n)
と書ける。ただし { f1, …, fp} は受理状態の集合
k k…
状態消去法(1 / 3)
pmqk
p1q1
s
Rk1Rkm
R1mR11
Qk
Q1P1
Pm
S .....
.....
状態消去法(2 / 3)
pmqk
p1q1
R11+Q1S*P1
.....
.....
Rkm+QkS*Pm
R1m+Q1S*PmRk1+QkS*P1
状態消去法(3 / 3)すべての受理状態 q について q と開始状態
以外を消去する。
開始
開始R*
(R+SU*T)*SU*
R S
T
R
U
得られた正規表現をすべて+でつなぐ。
状態消去法の適用例
次の DFA が受理する言語を正則表現で表せ。
1開始
3
2
41
00
1
1
0
0
1
1
3
2
41
00
1
1
0
0
1
1
3
4
00
1
0
2
1 1
3
1 1
01
1 1
3
10*1
10*1
10*1
10*1
1
3
4
00
1
0z
z=10*1
z4
3
1
3
0
1
0
33
01 1
00
1
30z
z+0100
(z+0(00)*(z+01))*0(00)*
1
3
4
00
1
0z
z3
1 1
4
0 z
004
44
0z 1
00
1
000z
14
1+0z
z+0z
0000
(z+0z+00(00)*(1+0z))*00(00)*
z=10*1, y=0(00)* として以上をまとめると、
(z+y(z+01))*y+(z+0z+0y(1+0z))*0y
McNaughton-Yamada の構成法 (1/2)
正則表現から -NFA を構成する方法N(R)
– 正則表現 R があらわす言語を受理し、– 受理状態が一つだけで、開始状態へ入る辺、最終状態から出る辺がないもの。
N(R)
McNaughton-Yamada の構成法 (2/2)
N(R) の帰納的定義1. N()
2. N()
3. N(a)a
N(R)
N(S)
N(R)
4. N(R+S)
5. N(RS)
6. N(R*)
N(R) N(S)
山田先生の業績• McNaughton-Yamada construction(1960)
– オートマトン理論の基礎理論
• Real-Time computation(1962)– 計算量理論を創始
• Tessellation automata(1971)– セル構造オートマトン初期の研究
• T-code (1980’s)– 無連想打鍵方式による日本語入力の発明 山田 尚勇
(1930-2008)
適用例
(10+01)* であらわされる言語を受理する -NFA を構成せよ。
正則表現の応用1:字句解析生成系
lex, flexdelim [ \t]ws {delim}+letter [A-Za-z]digit [0-9]id {letter}({letter}|{digit})*number {digit}+(\.{digit}+)?(E[+|-]?{digit}
+)?%%{ws} {}if {return(IF);}then {return(THEN);}else {return(ELSE);}{id} {yylval=install_id();return(ID);}{number}
{ sscanf(yytext,"%d",&yylval);return(NUM);}
"<" {yylval=LT;return(RELOP);}"<=" {yylval=LE;return(RELOP);}"=" {yylval=EQ;return(RELOP);}"<>"
{yylval=NE;return(RELOP);}">" {yylval=GT;return(RELOP);}">="
{yylval=GE;return(RELOP);}
%%int install_id(){ /* 変数名を記号表に登録して表のエントリへのポインタを返す */
/* ここにコードを書け *//* 注)この関数が呼び出されたとき、 字句の先頭は yytext 、字句の長さは yyleng
に入っている。(ここではこの変数で参照でき
る。)number {digit}+(\.{digit}+)?(E[+|-]?{digit}
+)?number {digit}+
*/
return 0;}int install_num(){ sscanf(yytext,"%d",&yylval);}
正則表現の応用2:検索コマンド
egrep ‘ 正則表現’ ファイル名
% egrep ‘yy+|return’ foo.l
正則言語の性質
1. 言語が正則でないことの証明方法:反復補題
2. 最小のオートマトン: Myhill-Nerode の定理
正則言語でないこと
L01={0n1n| n 1}≧
L01 が状態数 k の DFA A で受理されると仮定する。入力が 0n1n (n>k) のとき、 n個の 0 を読むうち
に2度訪れる状態が少なくとも1つある。( i個目と j個目とする。 i≠j )
0i1i と 0j1i を考える。 0i を読み終えた状態と 0j を読み終えた状態は同じなのでその後の入力 1i
が同じなら到達する状態も同じ。これは矛盾。
反復補題
反復補題(ポンプの補題、 pumping lemma )L を正則言語とする。このとき、 L に依存する定数 n で次の条件を満たすものが存在する。条件 : |w|≧n を満たす任意の記号列 w∈L は次の
(1) ~ (3) を満たす 3個の部分列の連接 w=xyzに分解できる。
(1) y≠(2) |xy|≦n(3) ∀ k 0 ≧ に対して、 xykz∈L
反復補題の証明L が状態数 n の DFA A で受理されると仮定する。w を長さ n 以上の任意の文字列∈L とする。 w=a1a2…am
(m≧n) とする。 i=0,…,m に対して記号を i個読み終えた時の状態を pi と書くことにする。すなわち、
pi=ˆ(q0, a1a2…ai) (i=1,…,m).
p0=ˆ(q0, ) (i=0).
状態は全部で n個だったから p0,…,pm のうちには同じものが少なくとも 2 つある。これらを pi,pj とする。(pi=pj) 。
x=a1a2…ai
y=ai+1…aj
z=aj+1…am
とせよ。これらは条件 (1) ~ (3) を満たす。(示せ。)
条件を満たすこと(ヒント)
p0=q0 pi=pj pmp1
a1
x=a1a2…ai
y=ai+1…aj
z=aj+1…am
反復補題の応用L01={0m1m| m 1}≧ は正則でない[反復補題を用いた別証 ]
L01 が正則言語であると仮定する。反復補題中の条件を満たす数を n とする。
w=0n1n とすると |w|=2n≧n であり、かつ L01 の要素であるから |xy|≦n, y≠ となる x,y によって
w=xyz と分解できて、∀ k 0 ≧ に対して xykz∈L01
となるはず。ところが、 |xy|≦n, y≠ であるならば y=0l (l>0) 。このとき xy2z は 0 の方個数が l個多くなり矛盾。
同値関係集合 A 上の関係~⊆ A×A は次を満たすとき、同値関係であるという。
( a ~ b ⇔ (a,b)∈ ~)1. (反射律) a ~ a2. (対称律) a ~ b ならば b ~ a3. (推移律) a ~ b かつ b ~ c ならば a ~ c
同値関係~によって a ~ b であるとき、 a とb は同値である、あるいは、 a は b と同値であるという。
同値類と同値類集合~が集合 A 上の同値関係であるとき a∈A に対して、
a と同値であるもの全体の集合を a の属する同値類といい、 [a] と書く。すなわち、
[a]={b∈A|a ~ b}A のすべての要素 a にわたって [a] を集めてできる集合を A の~による同値類集合あるいは A の~による商(集合)いい、 A/ ~と書く。すなわち、
A/ ~ ={[b]|b∈A}同値類の個数すなわち同値類集合の要素数を同値関
係~の指数( index )という。集合 A 上の同値関係 R,Q について R の各同値類が Q
の同値類に含まれるとき(部分集合であるとき) R は Q の細分である、という。
同値類の性質
~が集合 A 上の同値関係であるとき , a,b∈A に対して次が成り立つ。(もももも
• a ~ b ならば [a]=[b]
• a ~ b でないならば [a]∩[b]=
状態集合上の同値関係1 つの DFA の状態集合上の同値関係≡を次で定義する。p≡q ⇔
すべての入力列 w に対して ˆ(p, w) と ˆ(q, w) はどちらも受理状態であるかどちらも受理状態でない。
(関係≡が実際に同値関係であることを確かめよ。)同値でない状態の対は区別可能であるという。w が (p, q) が区別可能であることの証拠であるとき、
すなわち、 ˆ(p, w) 、 ˆ(q, w) の片方だけが受理状態であるとき、 w は (p, q) を区別するという。
同値な状態の例
A B C D
E F G H
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
開始
対 (C,G), (A,G),(A,E) について区別可能性を調べよ。
区別可能性の特徴づけ
DFA A=<Q, , , q0, F> における区別可能な対をすべて見つける再帰アルゴリズムの基礎
基礎:状態 p が受理状態で状態 q が受理状態でないならば対 (p, q) は区別可能
再帰:ある入力文字 a対して r=(p, a) と s=(q, a) が区別可能ならば対 (p, q) は区別可能
問 上の基礎、再帰について対 (p, q) を区別する記号列は何か?
穴埋めアルゴリズム
状態の対の表について、区別可能な対に ×印をつけるアルゴリズム
1. 片方だけが受理状態の欄に × 印をつける。2. × 印がついた対の状態の各々に同じ記号
で入る矢印を逆にたどってそれぞれ p, qに行けば (p, q) に × 印をつける。
×
穴埋めアルゴリズムの実行
B
C
D
E
F
G
H
A B C D E F G
×: 第 0 ステップ
×
×
×
×
×
×
×
×
× ×
×: 第 1 ステップ
×
×
×
×
×
×
× × × ×
×
×
×
×× ××: 第 2 ステップ
穴埋めアルゴリズムの正当性定理: 穴埋めアルゴリズムで × 印がつかない状態の対
は同値。(区別可能なものはすべて × 印がつく。)[証明 ]区別可能であるにもかかわらず × 印がつかない対
が存在すると仮定する。列 w=a1a2…an をそのような対のどれかを区別する列で長さ最小のものとし、 w が区別する対を (p, q) とする。
w はではあり得ない。 ˆ(p, )=p, ˆ(q, )=q のどちらかだけが受理状態なら基礎で × 印がつけられたはず。)ゆえ n 1≧
a2…an は (r, s)=(ˆ(p, a1), ˆ(q, a1)) を区別する。(示せ。) a2…an は w よりも短いので (r, s) は × 印されている。
(r, s) が × 印されていればアルゴリズムの次の再帰ステップで (p, q) が × 印されていなければならない。これは矛盾。
穴埋めアルゴリズムの改良(p,a)=r, (q,a)=s,r≠s のとき
のように矢印を書いておく。
O(n2) で穴埋めできる。
B
C
D
E
F
G
H
A B C D E F G
(r,s)
(p,q)
× ×
×
DFA の等価性
二つの DFA A,B の状態遷移図を合成したものについて、 A,B それぞれの開始状態 p,q の区別可能性を調べる。区別可能でない(同値)ならば A,B は等価。す
なわち、 L(A)=L(B)
A Bqp開始開始
等価性決定手順の実行例
E
C D1
0
0
0
1
1
1A
0
B
0
1
開始
開始
B
C
D
E
A B C D
DFA の最小化
DFA A=<Q, , , q0, F> の最小化はB=<Q/≡, , , [q0], {[s]| s∈F}>で与えられる。ここで :Q/≡×→ Q/≡([q], a)=[(q, a)] も定義可能であること:p≡q であるとき [(p, a)]=[(q, a)] を背理法で
示す。 w も (p, a),(q, a) を区別すると仮定すると、 aw は p,q を区別するので p≡q に反する。(矛盾)
最小化の例
1
0
1
B,H G
A,E
D,FC
0
1
1
0
開始1
00
最小化の正当性M を最小化で得られた DFA とする。N を , M と等価で状態数が M より少ない DFA とする。
M N
開始開始
p qa1a2…ak
a1a2…ak
M と N の合成で状態の区別可能性を調べると、M の任意の状態 p は N のある状態 q と区別不能。M の状態のほうが多いから、 N の状態のうち少なく
とも1つ q1 は M の 2 状態 p1,p2 と区別不能。最小化ではすべての状態は互いに区別可能のはずであり、矛盾。
語の同値関係と右不変性言語 L に対して * 上の同値関係 RL を次で定義する。
xRLy ⇔ どんな z∈* に対しても xz と yz はどちらも L に 属すかどちらも属さない。また、 DFA M=<Q, , , q0, F> に対して * 上の同値関係
RM を次で定義する。(「同じ状態に導く」という関係。)
xRMy ⇔ ˆ(q0, x) = ˆ(q0, y)
* 上の同値関係 R はxRy ⇒ xzRyz
を満たすとき、(連接に関して)右不変であるという。RM, RL は右不変 ( 示せ ) 。
同値類と細分
集合 A 上の同値関係 R,Q についてR のどの同値類も、 Q の同値類のいずれかに含まれるとき、 R は Q の細分であるという。
主張: 集合 A 上の同値関係 R,Q について R が Q の細分すなわち、∀ a∃b. [a]R ⊆ [b]Q ⇔ R⊆Q証明:(⇒)左 ⇒∀ a∃b. ( [a]R ⊆ [b]Q ∧ a∈[b]Q ) ⇒∀a∃b. ( [a]R ⊆ [b]Q ∧ aQb ) ⇒∀a∃b. ( [a]R ⊆ [b]Q ∧ [a] Q= [b] Q ) (同値類の性質 )
⇒∀ a . [a]R ⊆ [a]Q
このとき、 xRy ⇒ y ∈[x]R ⇒ y ∈ [x]Q ⇒ xQy
( )任意の⇐ a に対してx∈[a]R ⇒ xRa⇒ (x,a) ∈R ⇒ (x,a) ∈ Q ⇒ xQa ⇒ x ∈[a]Q ゆえ、 [a]R ⊆ [a]Q したがって、 b として a自体を選べばよい。
Myhill-Nerode の定理
[定理 ] ( Myhill-Nerode )つぎの1~3は同値。
1. L∈* は有限オートマトンの受理集合である。
2. L は右不変で有限の指数を持つ同値関係のいくつかの同値類の和に等しい。
3. RL の指数は有限。
Myhill-Nerode の定理の証明( 1⇒2 )
DFA M=<Q, , , q0, F> が L を受理するとする。
2つの語について「同じ状態に導く」という関係 RM は右不変な同値関係である。
L は F属する状態 f に導く同値類の和である。
Myhill-Nerode の定理の証明( 2⇒3 )
E を右不変で指数有限の同値関係とし、 L が Eの同値類の和であるとする。 E が RL の細分であることを示す。すなわち、 xEy⇒xRLy をいう。(細分の指数の方が大きいからこれがいえれば RL の指数有限がいえたことになる。)
xEy と仮定する。 E は右不変であるから任意のz∈* について xzEyz となる。
ところで L が E の同値類の和であるから xzEyzならば xz,yz はいずれも L に属す( [w]∈L のとき)かいずれも属さない(それ以外)。
以上により、 xRLy
Myhill-Nerode の定理の証明( 3⇒1 )
M=<Q’, , ’, q0’, F’> を次のように定める。
Q’ は L の RL による同値類集合 L/RL とする。すなわち、
Q’=L/RL
’: Q’×*→ Q’ は次で定義する。(定義が矛盾ないことは RL の右不変性から。)’([x], a)=[xa]
q0’=[],F’={[x]|x∈L} とする。このとき
’([], w)∈F’ ⇔ w∈L (確かめよ)すなわち L=L(M)
Myhill-Nerode の定理の応用:正則でないこと
L={w {0,1}∈ *|w は同数の 0,1 からなる }[証明 ]z を固定したとき、 wz が L に属すか否かは w 中
の 0,1 の個数の差だけで決まる。したがって RL
による同値類は 0,1 の個数の差が同じものである。
RL による同値類集合はつぎのものからなる。…,[1i],…,[11],[1],[],[0],[00],[000],…,[0i],…
これらは互いに異なる類であって RL の指数は有限ではない。よって Myhill-Nerode の定理により L は正則でない。
文脈自由文法文脈自由文法 (context free grammar, CFG)G は 4 つ
組 < V,T,P,S> で規定されるここで、1. V は変数(あるいは非終端記号)の集合:
変数は記号列の集合に対応する。(後述)2. T は終端記号の集合
定義される言語に現れる記号の集合3. S∈V は開始記号4. P は生成規則の集合
生成規則は変数 A∈V と記号(∈ V∪T )の列 X1X1…Xn の組で A→X1X1…Xn
のように書く。通例文法といえば文脈自由文法を指す。
文法の例
P → P → 0
P → 1
P → 0P0
P → 1P1
G=<{P}, {0,1}, A, P>
A の要素は次の 5 つ
文法が生成する言語文法 G=< V,T,P,S> において記号列に現れる非終端記号 A (∈ V )1つをある規
則 A→X1X2…Xn を用いて X1X2…Xn に置き換えてを得る操作を導出とよび⇒と書く。
から始めて、導出を繰り返してが得られるときも⇒* と書く。(0回含む)S から始めて導出を繰り返して得られる終端記号の列
w 全体の集合を文法 G が生成する言語といい、 L(G)で表す。すなわち
L(G)={w∈T*|S ⇒*w}文脈自由文法が生成する言語は文脈自由言語とよばれ
る。もももももももももももももももももももももも S⇒*ももももも文形式もももも
文法が生成する言語の例
前述の文法 G=<{P}, {0,1}, A, P> でP⇒0P0⇒01P10⇒010P010⇒0100010
により0100010∈L(G)
L(G) は {0,1} 上の回文全体
文法の略記法規則の左辺(→記号の左側)が同じ規則が複
数ある場合、たとえば、 i を記号列としてA → 1
A → 2
…A → n
がある場合これらをまとめてA → 1 | 2 | … | n
のように書く。問 回文の文法を上の略記法で書け。
最左 ( 右 )導出
• 導出の各書き換えステップで一番左(右)の非終端記号の書き換えのみをおこなう導出を最左(右)導出という。
• 最左導出で 1 からの 2 の導出ができるときももも 1 ⇒*
lm 2
などとかく。• S ⇒*
lm ももももももももももももももももももももももももも
最左導出の例1桁の数 0, 1 と2種類の変数 x, y のみの和お
よび積でつくる式全体は次の文法で生成される。
E → I | E+E| E*E | (E)
I → x | y | 0 | 1
E ⇒lm E+E⇒lm E*E+E ⇒lm I*E+E ⇒lm x*E+E ⇒lm x*I+E ⇒lm x*y+E ⇒lm x*y+I ⇒lm x*y+1
構文木• 導出を、どの非終端記号を書き換えるかの順序を捨象して木であらわしたものを構文木という。
• 構文木の各節点は非終端記号、葉は終端記号、根は開始記号。
• 各節点の子の並びはその節の非終端記号の書き換えにもちいた生成規則の右辺。
構文木の例
yx
*+
1
E E
E
I
I
I
E E
曖昧さ2 つ以上の構文木をもつ文を生成する文法
は曖昧であるという。注 文が構文木を2つ持つことは最左
(右)導出が 2 つあることと同じ。問 前述の式の文法で x*y+1 の構文木をも
う1つ作れ。
応用1:括弧のバランス開いた括弧が必ず閉じるとき、また閉じる括弧には必ず開く括弧が対応するとき、括弧のバランスが取れているという。
括弧だけからなる文で括弧のバランスが取れたものは次の文法 Gbal で表される。
Gbal : B→BB | (B) |
問い ()((())()) の導出を求めよ。
応用2:パーサー生成器プログラム言語などの言語の構文を解析して構文木に翻訳することを構文解析という。構文解析器( parser )を1から作成することは労力を要するが文法から自動的に parser を生成する技術がある。
YACC プログラムは文法を入力としコンパイラの一部である parser の C コードを出力する。
YACC のように言語仕様(文法など)を入力としコンパイラ(の一部)を得るプログラムはコンパイラ・コンパイラと呼ばれる。
主要なプログラミング言語で使えるコンパイラ・コンパイラが開発されている。( ml-yacc, javacc など)
YACCyacc の構文• →のかわりに : を使う。• 左辺は必ずまとめて右辺を | でつなぐ。• 各変数ごとの規則は ; で区切る。• 終端記号は ’ で囲む。• そのほか詳細は例を参考にせよ。yacc& lex(flex) の使い方
lex 、 yacc のソースを格納したファイルをそれぞれ calc.l, calc.yとする。シェルから
C:\> flex calc.lC:\> yacc calc.lC:\> cc y.tab.c –lfl宿題 http://thales.philos.k.hosei.ac.jp/automaton/calcから
上のファイルをダウンロードして上の作業を行い、生成されたプログラムの動作を確かめよ。
応用3: XML/DTD
XML ( Extensible Markup Language )は意味内容を記述する。
XML の一部である DTD ( Document-Type Definition, 文書型定義)は意味が了解された語をもとに表現形式( CFL )を定義する。
DTD の形式• DTD は次の形式である。<!DOCTYPE DTD の名前 [要素の定義のリスト(並び)
]>• 要素の定義は次の形式である。<!ELEMENT 要素の名前 (要素の記述 )>• 要素の記述は要素の名前と特別の項 \
#PCDATA を記号とする正則表現で和( | )、連接 (,) 、および繰り返し( *,+,? )が使える。
DTD の例<!DOCTYPE PcSpec [
<!ELEMENT PCS (PC*)><!ELEMENT PC (MODEL,PRICE,CPU,RAM,DISK+)><!ELEMENT MODEL (\#PCDATA)><!ELEMENT PRICE (\#PCDATA)><!ELEMENT CPU (MANF,MODEL,SPEED)><!ELEMENT MANF (\#PCDATA)><!ELEMENT SPEED (\#PCDATA)><!ELEMENT RAM (\#PCDATA)><!ELEMENT DISK (HARDDSK | CD | DVD)><!ELEMENT HARDDISK ()><!ELEMENT SIZE (\#PCDATA)><!ELEMENT CD (SPEED)><!ELEMENT DVD (SPEED)>
]>
PcSpec に従う XML 文書<PCS><PC>
<MODEL>4560</MODEL><PRICE>$2295</PRICE><CPU>
<MANF>Intel</MANF><MODEL>Pentium</MODEL><SPEED>800MHz</SPEED>
</CPU><RAM>256</RAM><DISK><HARDDISK>
<MANF>Maxtor</MANF><MODEL>Diamond</MODEL><SIZE>30.5Gb</SIZE>
</HARDDISK></DISK><DISK><CD>
<SPEED>32x</SPEED></CD></DISK>
</PC><PC> …</PC>
</PCS>
言語と機械
言語 表現 受理機械正則言語 正則表現
( RegExp )有限オートマトン(FA)
文脈自由言語(CFL)
文脈自由文法(CFG)
プッシュダウンオートマトン( PDA )
プッシュダウンオートマトンプッシュダウンオートマトン (Pushdown
Automaton, PDA) は次で定義される。P=<Q,,,,q0,Z0,F>:
Q: 状態の集合: 入力記号の集合 : スタック記号の集合: Q×(∪{})×→2Q×* 遷移関数p, ∈q, a, X の意味
状態は p に遷移し、スタックの上端の記号 X をに置き換えてよい。 YZ なら Z が Y の下。
q0: 開始状態∈QZ0: 開始記号(底記号)F: 受理状態の集合⊆ Q
遷移にともなうスタック操作の図
p, YZ∈q, a, X による遷移 :
q, aw, Xp, w, YZ
a…
qX
a…
pYZ
Z0
Z0
PDA の受理言語
P=<Q,,,,q0,Z0,F> を PDA とする。
{w|∃q∈F (q0,w,Z0) |-* (q,,) }
を P が最終状態で受理する言語と呼び、 L(P) と書く。{w| (q0,w,Z0) |-* (q,,) }
を P が空スタックで受理する言語と呼び、 N(P) と書く
受理言語の等価性
定理L=L(P) ならば L=N(P1) となる PDA P1 が存
在する。逆にL=N(P) ならば L=L(P2) となる PDA P2 が存
在する。
PDA と CFG の等価性
定理任意の PDA P に対して L(P)=L(G) とな
る CFG G が存在する。定理任意の CFG G に対して L(G) を受理する
PDA が存在する。
発展科目
• 計算量の理論( 2 年後期)– 一般の計算モデル
• コンパイラ( 3 年前期)– 言語の字句を正則表現、構文を文法で記述
• コンパイラ演習( 3 年前期)– コンパイラ作成:オートマトン設計、構文解析
• プログラミング言語理論・設計( 3 年後期)– 論理と計算の基礎的素養をもっていることが望ましい。