言語理論とコンパイラ

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

2009 年 5 月 1 日

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

Martin J. Dürst

AGU

© 2005-9 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 への変換

アルゴリズムの原理:

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

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

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

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

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

DFA の最小化

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

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

最小化で:

DFA の最小化の一例

線形文法

文法の簡単な書換規則
規則の形 名称
AaB 右線形規則
ABa 左線形規則
Aa (又は Aε) 定数規則

左線形文法: 左線形規則と定数規則しか含まない文法

右線形文法: 右線形規則と定数規則しか含まない文法

左・右線形文法はともに正規文法と言う

(一般の線形文法は文脈自由文法の一種)

(右) 線形文法と有限オートマトン

右線形文法と NFA の対応 (ε が考慮外):

左線形文法も同様 (語を右から読み込むと考えられる)

右線形文法と有限オートマトンの一例

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

A → aB | bA

B → bA | a | aC

C → bA | a | aC

今週のまとめ