言語理論とコンパイラ

第三回: 有限オートマトンと線形文法

2008年 4月25日

http://www.sw.it.aoyama.ac.jp/2008/Compiler/lecture3.html

Martin J. Dürst

duerst@it.aoyama.ac.jp, O 棟 529号室

AGU

© 2005-8 Martin J. Dürst 青山学院大学

今日の予定

先週の宿題 1

[都合により削除]

先週の宿題 2

[都合により削除]

Cygwin のダウンロード、インストール

(提出なしだが、出来なかった人は次回にノートパソコンを持ってきて下さい。)
自分のノートパソコンに cygwin をダウンロードインストールする。インストールの手順で必ず gcc, flexbison を選ぶ。(家にダイアルアップ回線しかなかったら学校でやった方がよい。)

flex と bison の動作確認

先週の終わり

文法 Type 言語 オートマトン
句構造文法 0 句構造言語 チューリング機械
文脈依存文法 1 文脈依存言語 線形拘束オートマトン
文脈自由文法 2 文脈自由言語 プッシュダウンオートマトン
正規文法 3 正規言語 有限オートマトン

正規言語は字句解析の時に使う。

今週の展望

これらは全て同じ力を持って、正規言語を定義・受理する

有限オートマトン

(automaton はギリシア語で、複数は automata)

有限オートマトンの状態遷移図

有限オートマトンの状態遷移図

有限オートマトンの遷移表

(≈動作関数=状態遷移関数)

a b
→A B A
B C A
*C C A

有限オートマトンに必要な物

有限オートマトンは (Q, Σ, δ, q0, F) の五字組で定義できる。

決定性と非決定性有限オートマトン

決定性 非決定性
同時に 一つの状態 複数の状態
受理条件 状態が受理状態 状態の一つ以上が受理状態
ε 遷移 不可 可能
動作関数の型 δ: Q × ΣQ δ: Q × (Σ ∪ {ε}) → 2Q

(決定性) 有限オートマトンの例

NFA から同等の DFA への変換

アルゴリズムの原理:

全ての DFA は NFA でもある。全ての NFA は同等の DFA に変換できる。

よって、DFA と NFA の受理能力が等しい。

実装は DFA の方が簡単が、テーブルは大きくなる可能性がある。

NFA から同等の DFA への変換の一例

動作関数
ε 0 1
S {A} {} {}
A {} {A,C} {B}
B {} {} {A}
C {} {} {}

NFA から同等の DFA への変換: 注意点

ε 遷移の扱い方

DFA の最小化

ある DFA から同等の最小の DFA を次の通りに作れる:

  1. 状態を受理状態と非受理状態の二つの集合に分ける
  2. それそれの状態からどの記号でどの集合に遷移するかを調べる
  3. 現在の集合を、どの記号でも同じ集合に遷移する状態の部分集合に分ける
  4. 3. で変更がない時まで 2. から繰り返す

最小化によって効率よい実装ができるし、二つの有限オートマトンが同等であるかどうかも簡単に調べられる。

DFA の最小化の一例

今週のまとめ