Presentation is loading. Please wait.

Presentation is loading. Please wait.

形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ

Similar presentations


Presentation on theme: "形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ"— Presentation transcript:

1 形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ
形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ 2017年 1月10日 中島

2 プッシュダウンオートマトン(PDA) チョムスキーの言語の分類 3 階層 文法 受理するオートマトン 正規言語(正規表現) 有限オートマトン
2 文脈自由言語 プッシュダウンオートマトン 1 文脈依存言語 線形拘束オートマトン 句構造言語(自由言語) チューリングマシン

3 プッシュダウンオートマトン(PDA) PDA = 有限オートマトン + プッシュダウンスタック 有限オートマトン 有限状態制御部
入力テープ a b a b b プッシュダウンスタック (スタックメモリ) 読み取りヘッド 読み書きヘッド (スタックポインタ) 有限状態制御部 A B Z PDA は文脈自由文法と同じ言語クラスを表現する

4 記憶装置としてのスタック 「後入れ先出し (LIFO: Last In First Out)」の記憶装置 2つの操作
スタックメモリ 2つの操作 スタック ポインタ (SP) push (X):  Xをスタックに記憶する Y = pop(): スタックから値を取り出しYに入れる 20 10 Z 初期プッシュダウン記号 動作: 後に入れたものが先に出てくる Z

5 記憶装置としてのスタック 「後入れ先出し (LIFO: Last In First Out)」の記憶装置 2つの操作
スタックメモリ 2つの操作 スタック ポインタ (SP) push (X):  Xをスタックに記憶する Y = pop(): スタックから値を取り出しYに入れる 20 10 Z 初期プッシュダウン記号 動作: 後に入れたものが先に出てくる push(10) 10 Z

6 記憶装置としてのスタック 「後入れ先出し (LIFO: Last In First Out)」の記憶装置 2つの操作
スタックメモリ 2つの操作 スタック ポインタ (SP) push (X):  Xをスタックに記憶する Y = pop(): スタックから値を取り出しYに入れる 20 10 Z 初期プッシュダウン記号 動作: 後に入れたものが先に出てくる 20 push(10), push(20) 10 Z

7 記憶装置としてのスタック 「後入れ先出し (LIFO: Last In First Out)」の記憶装置 2つの操作
スタックメモリ 2つの操作 スタック ポインタ (SP) push (X):  Xをスタックに記憶する Y = pop(): スタックから値を取り出しYに入れる 20 10 Z 初期プッシュダウン記号 動作: 後に入れたものが先に出てくる push(10), push(20), Y1=pop() 10 Z Y1=20

8 記憶装置としてのスタック 「後入れ先出し (LIFO: Last In First Out)」の記憶装置 2つの操作
スタックメモリ 2つの操作 スタック ポインタ (SP) push (X):  Xをスタックに記憶する Y = pop(): スタックから値を取り出しYに入れる 20 10 Z 初期プッシュダウン記号 動作: 後に入れたものが先に出てくる push(10), push(20), Y1=pop(), Y2=pop() Z Y1=20 Y2=10

9 プッシュダウンオートマトン(PDA)の定義
PDA M = (Q, Σ, Γ, δ, S, Z) Q: 内部状態の集合 Σ: 入力テープ記号の集合(入力アルファベット) Γ: プッシュダウン記号の集合 δ: 状態遷移関数 δ: Q×(Σ + {ε}) × Γ → Ρ(Q×Γ*) S: 初期状態 S∈Q Z: 初期プッシュダウン記号 Z∈Γ

10 PDAの例: { anbn | n ≧ 1なる整数 } ・・・ 文脈自由文法: S → aSb | ab A3 B3 A2 B2 A1 B1
文脈自由文法:  構文図式が簡略化できない S S → aSb | ab a b S 文 ω = aaabbb に対する導出木 有限オートマトンでは表現できない ・・・ S a b ε A3 B3 S a b ε A2 B2 S a b ε a a a b b b A1 B1

11 (Zをpushで戻し続けてAをpush)
PDAの例: { anbn | n ≧ 1なる整数 } 状態遷移グラフ (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε 状態: q0へ遷移 スタック: Z→AZ (Zをpushで戻し続けてAをpush) {(q0, AA), (q1, A)} {(q1, ε)} δ a b (q0, Z) (q0, A) (q1, Z) (q1, A) {(q0, AZ), (q1, Z)} ø 遷移関数 状態: q1へ遷移 スタック: A→A (Aをpushで戻し現状維持) 状態: q1へ遷移 スタック: A→ε (何もしない結局1つ減る) 状態 スタック読取り結果(1回pop)

12 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b Z (b, Z) / ε
1-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 Z

13 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A Z (b, Z) / ε
1-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A Z

14 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A Z (b, Z) / ε
2-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A Z

15 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A Z (b, Z) / ε
2-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A A Z

16 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A Z (b, Z) / ε
3-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A A Z

17 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A A Z
3-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b A 有限状態制御部 A A Z

18 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A A Z
4-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b A 有限状態制御部 A A Z

19 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A Z (b, Z) / ε
4-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A A Z

20 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A A Z (b, Z) / ε
5-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A A Z

21 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A Z (b, Z) / ε
5-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A Z

22 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b A Z (b, Z) / ε
6-1 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 A Z

23 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b Z (b, Z) / ε
6-2 (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 Z

24 PDAの例: { anbn | n ≧ 1なる整数 } 有限状態制御部 q0 q1 a a a b b b Z (b, Z) / ε
7-E (a, Z) / ZA (b, Z) / ε (a, Z) / Z, (a, A) / A q0 q1 (a, A) / AA (b, A) / ε a a a b b b 有限状態制御部 Z

25 PDAの最後に: 木構造とスタック 数式の記法(構文木)←FA/正規表現でカバーできない 木構造をたどる処理(再帰的な処理)
文脈自由文法 (再帰的な言語の表現) 木構造をたどる処理(再帰的な処理)  → スタックを使って処理できる 例: 逆ポーランド記法の電卓 (スタックによる計算)

26 授業のまとめ

27 正規言語<文脈自由言語<文脈依存言語<句構造言語
形式言語 と オートマトン チョムスキーの言語の分類 制限大 階層 文法 受理するオートマトン 3 正規言語(正規表現) 有限オートマトン 2 文脈自由言語 プッシュダウンオートマトン 1 文脈依存言語 線形拘束オートマトン 句構造言語(自由言語) チューリングマシン 正規言語<文脈自由言語<文脈依存言語<句構造言語 正規表現と有限オートマトンは等価である ほとんどのプログラミング言語は文脈自由文法で定義 文脈依存文法は、自然言語のモデルとして十分強力

28 正規表現と有限オートマトン NFA DFA ε-NFA 正規表現 FAと正規表現は同じ言語クラスを表現するという意味で同等 サブセット構成法
ε動作の除去 DFA 最小化 ε-NFA 正規表現 帰納的構成法 線形再帰方程式 授業:「変換アルゴリズムを示すことで同等である」ことを証明

29 有限オートマトンの応用例: 正規表現による言語処理 要求分析・設計における仕様記述/検証 コンパイラ(文脈自由文法)へつながる 認識技術
自然言語理解 文字認識 セルオートマトン 計算可能性理論 複雑適応系、数理生物学 微小構造モデリング

30 応用例: システムの仕様記述 FAを使って,システムの機能仕様(入力→出力)を記述する 例) 電灯のオンオフ 2つの表現方法 ミーリー機械:
応用例: システムの仕様記述  FAを使って,システムの機能仕様(入力→出力)を記述する 例) 電灯のオンオフ PW 2つの表現方法 PW/ON ミーリー機械:  出力が,入力と現在の  状態から決まる 消灯中 点灯中 PW/OFF ムーア機械: 出力が,遷移先の状態  で決まる PW 消灯中/OFF 点灯中/ON PW

31 応用例: 機械(システム)の仕様記述 例) ストップウォッチ 仕様記述 LB RB LB: 計測開始/停止
例) ストップウォッチ LB RB LB: 計測開始/停止 RB: クリア(停止時)/ラップ(計測時) 仕様記述 RB/LAP追加表示 初期画面 LB 計測中/開始 LB LB 利点 抜けなく正確に記述できる レビューがしやすい RB/クリア 停止中 /停止

32 ■ほぼ機械的にコーディングすることができる!!
状態遷移図からコーディングへ イベント駆動型: イベントに対する動作を状態別に記述 状態駆動型:   状態に対する動作をイベント別に記述 ■ほぼ機械的にコーディングすることができる!!

33 簡潔でしょう? イベント駆動型による 実装例 戻る enum KT_State {初期画面, 計測中, 停止中};
enum KT_Event {LB, RB, 単位時間経過}; int main(void) { int T = 0; /* 表示時間 */ enum KT_State state = 初期画面; while (TRUE) { enum KT_Event event = get_event(); if (event == LB) { if (state == 初期画面 || state == 停止中) state = 計測中; else if (state == 計測中) state = 停止中; } else if (event == RB) { if (state == 計測中) { display_lap(); else if (state == 停止中) { state = 初期画面; T = 0; display_clear(); if (event = 単位時間経過) { if (state == 計測中) { T += unitTime; display_time(T); return 0; イベント駆動型による 実装例 簡潔でしょう? 戻る

34 授業の実施内容 (1/2) 1. 概要 9/20 2. 形式言語と帰納的表現 9/27 3. 順序機械: 10/4
授業の実施内容 (1/2) 1. 概要 9/20   ・オートマトンと言語、チョムスキの4階層 2. 形式言語と帰納的表現 9/27   ・語、言語、クリーネ閉包、スター演算 教科書: pp. pp.32-39 3. 順序機械: 10/4   ・ミーリ機械、ムーア機械 教科書: pp.83-88 4. 有限オートマトン(1) 10/11   ・決定性オートマトン(DFA),言語の受理 教科書: pp.89-95 5. 正規言語 10/18   ・正規表現、線形再帰方程式(DFAからの変換) 教科書: pp 6. 有限オートマトン(2) 10/25   ・非決定性オートマトン(NFA)、DFA化 教科書:pp 7. 有限オートマトン(3) 11/8   ・εNFA、NFA化、 DFAへの変換 教科書:pp 8. 中間テスト、講評 11/15

35 授業の実施内容 (2/2) 9. 有限オートマトン(3) 11/22 10. 有限オートマトン(4) 11/29
授業の実施内容 (2/2) 9. 有限オートマトン(3) 11/22   ・ Myhill-Nerodeの定理、同値類 教科書:pp 10. 有限オートマトン(4) 11/29   ・ 最小化,応用 教科書:pp 11. 有限オートマトン(5) 12/6   ・ 中置、ポーランド、逆ポーランド記法 教科書:pp.41-43,78-80 12. 形式言語とBNF記法: 12/13   ・ メタ言語、構文図式 教科書:pp.43-47 13. 形式言語理論と文脈自由文法 12/20   ・ 形式文法,文脈自由文法,導出木 教科書:pp 14. PDAとまとめ 1/10    教科書:pp 15. テストと解説 1/17 教科書:pp

36 期末試験 教科書のみ持ち込みあり 範囲 数式の文法間変換 構文図式+導出木 順序機械 正規表現による言語処理
正規表現と有限オートマトンの間の変換 (P28のアルゴリズム)

37 文脈自由文法 戻る Basic Visual Basic FORTRAN77 FORTRAN90/95 COBOL65 COBOL言語
(初心者用言語) Visual Basic FORTRAN77 FORTRAN90/95 COBOL65 COBOL言語 (事務処理用言語) COBOL2002 FORTRAN言語 (科学計算用言語) アセンブラ言語 Algol (BNF) BCPL C ANSI C C++ Simula Smalltalk Smalltalk80 Objective-C Java C# Ruby Lisp (関数型言語) Prolog (論理型言語) Lisp1.5 Common Lisp Perl PHP JavaScript awk Python 文脈自由文法 スクリプト型言語 戻る


Download ppt "形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ"

Similar presentations


Ads by Google