言語理論とコンパイラ

第三回 (2014 年 4 月 25 日)

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

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

Martin J. Dürst

AGU

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

今日の予定

前回の宿題 1

問題: L = { a, cb, ac } の場合、L* の一番短い語 10個を列挙しなさい。

解答:[都合により削除]

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

解答:[都合により削除]

前回の宿題 2

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

解答例:[都合により削除]

前回の宿題 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 の比較表


決定性 (DFA) 非決定性 (NFA)
同時に 一つの状態 複数の状態 (状態の集合)
受理条件 現在の状態が受理状態 現在の状態の一つ以上が受理状態
ε 遷移 なし あり
動作関数の型 δ: Q × ΣQ δ: Q × (Σ ∪ {ε}) → P(Q)

(ε 遷移不可の非決定性有限オートマトンも存在)

DFA と NFA の同等性

NFA から同等の DFA への変換

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

状態遷移表

ε 0 1
→S {A} {} {}
A {} {A,C} {B}
B {} {} {A}
*C {} {} {}

 

線形文法

(linear grammar)

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

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

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

(両方で Sε も特別に可)

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

(左線形規則も右線形規則も含む一般の線形文法は文脈自由文法の一種)

 

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

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

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

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

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

A → aB | bA

B → bA | a | aC

C → bA | a | aC

 

右線形文法と有限オートマトンの変換

オートマトンから文法へ:

文法からオートマトンへ:

今回のまとめ

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

宿題

提出期限と場所: 2014 年 5 月 1 日 (木) 19:00 まで O 棟 5 階の O-529 号室の前の箱に投入

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

  1. 次の右線形文法に相当する NFA の遷移図を作りなさい
    S → εA | bB | cB | cC, A → bC | aD | a | cS, B → aD | aC | bB | a, C →εA | aD | a
    (注: 純粋な (右) 線形文法に ε は不可)
  2. 1. の NFA と同等の DFA を作り、遷移表で表しなさい (状態の書き換えは不要)
  3. 2. の DFA を右線形文法に変換しなさい
  4. flex, bison, gcc, make の動作確認 (提出なし; ただし、不可能な場合、必ず次回にノートパソコンを持参すること)