言語理論とコンパイラ

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

2011 年 4 月 29 日

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

Martin J. Dürst

AGU

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

今日の予定

前々回の宿題

前回の宿題 1

諸事情により削除されました

発展問題 (解答自由): L* の長さ4の語を全て列挙しなさい。

諸事情により削除されました

前回の宿題 2

問題:「導出の例」で使われた文法を使って、4つの (例とお互いと) 異なる語の導出を書きなさい。この文法はどの様な言語を定義しているかを推測して、説明しなさい。

解答例 (一部省略):

諸事情により削除されました

前回の宿題 2 (発展問題)

発展問題 (解答自由): 自分の推測を証明してみなさい。

諸事情により削除されました

補足:

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

(提出なしだが、出来なかった人はノートパソコン持参)
自分のノートパソコンに cygwin をインストール (画像つき詳細)する。インストールの手順で必ず gcc, flex, bisonmake を選ぶ。

flexbisongcc の動作確認

先週の終わり

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

正規言語は字句解析に使用

今週の展望

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

有限オートマトン

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

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

(state transition diagram)

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

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

(state transition table)

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

有限オートマトンの定義

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

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

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

ε 遷移の扱い方

有限オートマトンの例

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 の最小化の一例

線形文法

(linear grammar)

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

左線形文法 (left linear grammar): 左線形規則と定数規則しか含まない文法

右線形文法 (right linear grammar): 右線形規則と定数規則しか含まない文法

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

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

 

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

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

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

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

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

A → aB | bA

B → bA | a | aC

C γ bA | a | aC

 

今週のまとめ

課題: NFA・DFA は遷移表、遷移図、文法で表現可能が、もっとコンパクトな表現は?

宿題

提出期限と場所: 2011 年 5 月 6 日 (金) 10:55 まで O 棟 5 階の O-529 号室の前の箱に投入

形式: A4 一枚 (裏も使ってよい)

  1. 次の右線形文法に相当する NFA の遷移図を作りなさい
    S → εA | bB | cB | cC, A → bC | bB | aD | a, B → aD | aC | bB | a, C →εA | aD | bE | b | a, E→ εD
  2. 1. の NFA と同等の DFA を作りなさい
  3. 2. の DFA を最小化しなさい
  4. flex, bison, gcc, make の動作確認 (提出なしだが、出来なかった場合、必ず次回にノートパソコンを持参すること)