Microsoft PowerPoint - Compiler03.pptx

Similar documents
Microsoft PowerPoint - Compiler03note.pptx

Microsoft PowerPoint - Compiler04note.ppt [互換モード]

Microsoft PowerPoint - Compiler04note.ppt [互換モード]

Microsoft PowerPoint - Compiler04note.ppt [互換モード]

Microsoft Word - Javacc.docx

PowerPoint プレゼンテーション

Microsoft PowerPoint - Compiler05note.pptx

Microsoft PowerPoint - Compiler05.pptx

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

文法と言語 ー文脈自由文法とLR構文解析2ー

Microsoft PowerPoint - Compiler06.pptx

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - Compiler06note.pptx

Microsoft PowerPoint - 03BNFScanner.ppt [互換モード]

Java講座

Microsoft PowerPoint - 3.ppt [互換モード]

オートマトンと言語

情報工学実験 C コンパイラ第 2 回説明資料 (2018 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint ppt

Microsoft PowerPoint - Compiler01note.pptx

ポインタ変数

Microsoft PowerPoint - 03BNFScanner-print.ppt

C8

Microsoft PowerPoint - 09re.ppt [互換モード]

オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語

Microsoft PowerPoint L03-Syntex and Semantics-1-students ( )

新版 明解C++入門編

プログラミングA

情報数理学

プログラミングA

Microsoft PowerPoint - 1.ppt [互換モード]

PowerPoint プレゼンテーション

Microsoft PowerPoint - Compiler10note.pptx

ex04_2012.ppt

言語プロセッサ2005

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

PowerPoint プレゼンテーション

kantan_C_1_iro3.indd

ポインタ変数

プログラミング入門1

18/12/06 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 その 3 yacc の構造 定義部 %% 定義部の終了 規則部 %% 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1

Microsoft PowerPoint ppt

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

プログラミング基礎

プログラミング基礎

Microsoft Word - problem3.doc

JavaプログラミングⅠ

Microsoft Word - CompA-Ex doc

Javaによるアルゴリズムとデータ構造

情報処理Ⅰ

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

情報実習Ⅱ

Taro-Basicの基礎・条件分岐(公

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

基礎プログラミング2015

PowerPoint プレゼンテーション

シェルプログラミング コマンドをパイプでつなげるだけでは済まないような ある程度まとまった処理を複数のコマンドを制御構文を用いたりしてファイルとしたものを ( シェル ) スクリプトと呼ぶ シェルプログラム バッチなどともいう.bash_profile もシェルスクリプトなので このファイルを解読し

Microsoft PowerPoint - enshu4.ppt [äº™æ‘łã…¢ã…¼ã…›]

Microsoft Word - problem5.doc

Microsoft PowerPoint - ruby_instruction.ppt

PowerPoint Presentation

解きながら学ぶC++入門編

メソッドのまとめ

Microsoft PowerPoint - アルデIII 10回目12月09日

kiso2-03.key

Microsoft PowerPoint - Compiler15note.ppt [互換モード]

Microsoft Word - DF-Salford解説09.doc

Cプログラミング1(再) 第2回

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft Word - VBA基礎(3).docx

第10回 モジュール

JavaプログラミングⅠ

プログラミング基礎

オートマトン 形式言語及び演習 4. 正規言語の性質 酒井正彦 正規言語の性質 反復補題正規言語が満たす性質 ある与えられた言語が正規言語でないことを証明するために その言語が正規言語であると

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

ExcelVBA

kiso2-09.key

sinfI2005_VBA.doc

Microsoft PowerPoint - 5.ppt [互換モード]

スライド 1

PowerPoint プレゼンテーション

ポインタ変数

Microsoft PowerPoint - 13Kadai.pptx

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

yacc.dvi


プレポスト【解説】

kiso2-06.key

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ

変数を使えるようにする arithr.y を拡張して変数を使えるようにする 変数はアルファベット小文字一文字だけからなるものとする 変数の数はたかだか 26 なので,26 個の要素をもつ配列 vbltable に格納する 一行だけで計算が終わるのではなく数式を連続で計算できるようにし,$ が入力され

Taro-ファイル処理(公開版).jtd

プログラミング実習I

デジタル表現論・第4回

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

生命情報学

Transcription:

コンパイラ 第 3 回字句解析 決定性有限オートマトンの導出 http://www.info.kindi.c.jp/compiler 38 号館 4 階 N-411 内線 5459 tksi-i@info.kindi.c.jp

コンパイラの構造 字句解析系 構文解析系 制約検査系 中間コード生成系 最適化系 目的コード生成系

処理の流れ 情報システムプロジェクト I の場合 write (); 字句解析系 マイクロ構文の文法に従い解析 write ( 変数名 ) ; 構文解析系 マクロ構文の文法に従い解析 <write_sttement> ::= write ( <exp> ) ; コード生成系 VSM アセンブラの文法に従い生成 1. PUSH 2. OUTPUT

字句解析系 (lexicl nlyzer, scnner) 字句解析系 空白 コメントを読み飛ばす 単語 (token) に区切る マイクロ構文エラーを検出 if (ns >= 123 ) /* ns の値で分岐 */ ( 改行 ) ( 空白 )print ( 1 ) ; 予約語 if 左括弧 ( 変数 ns 不等号 >= 整数 123 右括弧 ) 予約語 print :

単語への分割 英語の場合 School of Science nd Engineering Kinki University 単語間に空白があるので区切るのは簡単日本語の場合 きんきだいがくりこうがくぶ きんき : だいがく : りこうがくぶきんきだ : いがくり : こうが : くぶ 近畿大学理工学部近畿だイガ栗黄河九分 区切り方を正しく決定するのは困難 計算機言語の場合は?

単語への分割 計算機言語の場合 区切り記号で単語を判別できる min () { int i, j, k; : min( 区切り記号 ( が来たので min で区切ると判別

マイクロ構文 ( 情報システムプロジェクト I の場合 ) マイクロ構文 (EBNF 記法で定義 ) または 0 回以上の繰り返し K-Progrm ::= { Token W-Spce } 0 ( ファイル末 ) 変数名整数 Token( 単語 ) ::= NAME INTEGER CHARACTER STRING 文字列文字 KEYWORD OPERATOR DELIMITER 予約語演算子区切り記号 W-Spce( 空白 ) ::= ( スペース ) t ( タブ ) n ( 改行 ) Comment ( コメントは拡張課題 ) コメント

マイクロ構文 ( 変数名, 整数, 文字 ) マイクロ構文 NAME( 変数名 ) ::= Alph { Alph Dec } INTEGER( 整数 ) ::= 0 Pdec { Dec } 0 x Xdec { Xdec } CHARACER( 文字 ) ::= ( シングルクォート ) Chrcter Alph {,,, z, A, B,, Z, _( アンダーバー )} Pdec {1, 2,, 9} Dec {0, 1, 2,, 9} Xdec {0, 1, 2,, 9, A, B,, F} Chrcter ::= ( 任意の文字 )

マイクロ構文 ( 予約語 ) マイクロ構文 KEYWORD( 予約語 ) ::= r e k f o r i f i n t i n p u t c h r i n p u t i n t m i n o u t p u t c h r o u t p u t i n t w h i l e 予約語は変数名では使用不可拡張課題では e l s e 等も予約語

マイクロ構文 ( 演算子, 区切り記号 ) マイクロ構文 OPERATOR( 演算子 ) ::= = =! = < > & &! + - * / % = + = - = * = / = + + - - DELIMITER( 区切り記号 ) ::= ;, ( ) { } [ ]

トークン トークンの種類 ( 情報システムプロジェクト I の場合 ) 記号 区切り記号 ;, ( ) { } [ ] 演比較演算子 ==!= < > (<=) (>=) 算論理演算子! && 子算術演算子 + - * / % 代入演算子 = += -= *= /= ++ -- 名前変数名定数整数文字文字列 min int if while for inputint inputchr 予約語 outputint outputchr rek (else) (do) (continue)

トークン名 区切り記号 記号トークン名 ; SEMICOLON, COMMA ( LPAREN ) RPAREM { LBRACE } RBRACE [ LBRACKET ] RBRACKET 比較演算子 記号トークン名 == EQUAL!= NOTEQ < LESS > GREAT 論理演算子 記号トークン名 && AND OR! NOT

トークン名 算術演算子 記号 トークン名 + ADD - SUB * MUL / DIV % MOD ( ) 単項演算子の - と二項演算子の - で共通して使用 ( ) 代入演算子 記号トークン名 = ASSIGN += ASSIGNADD -= ASSIGNSUB *= ASSIGNMUL /= ASSIGNDIV ++ INC -- DEC

トークン名 定数, 変数名, 予約語 文字列種別トークン名 数字の並び整数 INTEGER ( 任意の 1 文字 ) 文字 CHARACTER 英字の並び変数名 NAME min 予約語 MAIN int 予約語 INT if 予約語 IF while 予約語 WHILE inputint 予約語 INPUTINT : : : INTEGER と INT の違いに注意

字句解析の手順 字句解析 決定性有限オートマトンで解析 ( 最小の ) 決定性有限オートマトンを導出する必要があるマイクロ構文 非決定性有限オートマトン 決定性有限オートマトン 状態最小化 字句解析系

非決定性有限オートマトンへ マイクロ構文 非決定性有限オートマトン (NFA) 以下の手法で帰納的に 1. ( 空記号列 ) に対するNFA 2. φ( 空遷移関数集合 ) に対するNFA 3. Σ に対するNFA 4. R 1 R 2 に対するNFA 5. R 1 R 2 に対するNFA 6. R* に対するNFA 7. R + に対するNFA (R 1, R 2, R : 正規表現 )

非決定性有限オートマトンへ 1. ( 空記号列 ) に対する NFA i f 入力が無くても状態遷移 2. φ( 空遷移関数集合 ) に対する NFA i 3. Σ に対する NFA i f f 状態遷移無し 入力 で状態遷移

非決定性有限オートマトンへ 4. R 1 R 2 に対する NFA i 5. R 1 R 2 に対する NFA R 1 R 2 f i R 1 R 2 f (R 1, R 2 : 正規表現 )

非決定性有限オートマトンへ 6. R* (0 回以上の繰り返し ) に対する NFA i R 7. R + (1 回以上の繰り返し ) に対する NFA i R f f (R : 正規表現 )

非決定性オートマトンへ r ::= ( )* ( )*

非決定性オートマトンへ r ::= ( )*

非決定性有限オートマトンの 問題点 非決定性有限オートマトン 同一入力に対する状態遷移が複数存在 複数の遷移を全て解析する必要がある 決定性有限オートマトンに変形する

決定性有限オートマトンへ q 0 非決定性有限オートマトン (NFA) 決定性有限オートマトン (DFA) 同一の入力で遷移できる状態を 1 つの状態にまとめる q 3 q 1 q 2 q 4 q 4 q 5 q 8 q 7 q 8 q 9 q 6 q 1 から 入力で q 2 q 3 q 4 q 8 q 1 q 2 q 3 q 4 q 8 をまとめる へ遷移可能

決定性有限オートマトンへ NFA N = (Q N, Σ, δ N, q N0, F N ) DFA D = (Q D, Σ δ D, q D0, F D ) -closure (q) ::= q {Q N Q D } から 遷移できる状態集合 goto (q, ) ::= q {Q N Q D } から Σで遷移できる状態集合

NFA 決定性有限オートマトンへ 0, 1 q 0 0 1 q 1 q 2 1 q 3 1 1 q F 0 Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } q 0 の- 遷移先 {q 1 } q 1 q 2 q 3 q F {q 2 } {q 2, q 3 } {q F }

NFA 決定性有限オートマトンへ 0, 1 q 0 0 1 q 1 q 2 Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q q 2 {q 2 } 0, q 1 } の {q 0, q 1 } の 0 入力遷移先 1 入力遷移先 q 3 {q 2, q 3 } q F {q F } 1 1 q 3 1 q F 1 - 遷移は 1 - 遷移 1 - 遷移 1 - 遷移を含む 0

NFA 決定性有限オートマトンへ 0, 1 q 0 0 1 q 1 q 2 Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q 0, q 1 } {q 2, q 3 } q 2 {q 2 } φ {q F } q 3 {q 2, q 3 } φ {q F } q F {q F } {q F } φ 1 1 q 3 1 q F 0

決定性有限オートマトンへ NFA DFA アルゴリズム Q D := {-closure (q N0 ) }; /* Q D の初期入力 */ for ech q Q D { /* Q D 内の未実行の要素に対して実行 */ for ech Σ { r := -closure (goto (q, )); if (r Q D ) /* r はQ D の中に無いか? */ } } Q D := Q D r; /* r を Q D に加える */ δ D (q, ) := r;

NFA 決定性有限オートマトンへ Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q 0, q 1 } {q 2, q 3 } q 2 {q 2 } φ {q F } q 3 {q 2, q 3 } φ {q F } q F {q F } {q F } φ DFA Q D -closure (q) goto (q, 0) goto (q, 1) q 0,1 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } -closure ({q 0 q 1 }) goto ({q 0 q 1 }, 0) goto ({q 0 q 1 }, 1)

NFA Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q 0, q 1 } {q 2, q 3 } q 2 {q 2 } φ {q F } q 3 {q 2, q 3 } φ {q F } q F {q F } {q F } φ DFA 決定性有限オートマトンへ q 0,1 QD,,,, Q D -closure (q) goto (q, 0) goto (q, 1) q 0,1 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 0, 1, 2, 3 {q 0, q 1, q 2, q 3 } {q 0, q 1 } {q 0, q 1, q 2, q 3, q F }

NFA Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q 0, q 1 } {q 2, q 3 } q 2 {q 2 } φ {q F } q 3 {q 2, q 3 } φ {q F } q F {q F } {q F } φ DFA 決定性有限オートマトンへ,,,,, Q D -closure (q) goto (q, 0) goto (q, 1) q 0,1 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 0, 1, 2, 3 {q 0, q 1, q 2, q 3 } {q 0, q 1 } {q 0, q 1, q 2, q 3, q F } q 0, 1, 2, 3,F {q 0, q 1, q 2, q 3, q F } {q 0, q 1, q F } {q 0, q 1, q 2, q 3, q F }

NFA Q N -closure (q) goto (q, 0) goto (q, 1) q 0 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 1 {q 1 } {q 0, q 1 } {q 2, q 3 } q 2 {q 2 } φ {q F } q 3 {q 2, q 3 } φ {q F } q F {q F } {q F } φ DFA 決定性有限オートマトンへ,,,,,, Q D -closure (q) goto (q, 0) goto (q, 1) q 0,1 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 0, 1, 2, 3 {q 0, q 1, q 2, q 3 } {q 0, q 1 } {q 0, q 1, q 2, q 3, q F } q 0, 1, 2, 3,F {q 0, q 1, q 2, q 3, q F } {q 0, q 1, q F } {q 0, q 1, q 2, q 3, q F } q 0, 1,F {q 0, q 1, q F } {q 0, q 1, q F } {q 0, q 1, q 2, q 3 }

DFA 決定性有限オートマトンへ Q D -closure (q) goto (q, 0) goto (q, 1) q 0,1 {q 0, q 1 } {q 0, q 1 } {q 0, q 1, q 2, q 3 } q 0, 1, 2, 3 {q 0, q 1, q 2, q 3 } {q 0, q 1 } {q 0, q 1, q 2, q 3, q F } q 0, 1, 2, 3, F {q 0, q 1, q 2, q 3, q F } {q 0, q 1, q 2, q 3, q F } {q 0, q 1, q 2, q 3, q F } q 0, 1,F {q 0, q 1, q F } {q 0, q 1, q F } {q 0, q 1, q 2, q 3 } は自分自身への遷移のみ 0 1 q 0,1 q 0,1,2,3 0 q 0,1,F 1 0 1 0 q 0,1,2,3,F q F を含めば受理状態 1

決定性有限オートマトンへ NFA 0, 1 q 0 0 1 q 1 q 2 1 q 3 1 1 q F 0 DFA 0 1 q 0,1 q 0,1,2,3 q 0,1,2,3,F 1 0 q 0,1,F 0 1 0 1

決定性有限オートマトンの 問題点 導出で得られた有限オートマトン 状態数が最小とは限らない 状態数の最小化を行う

状態最小化 状態最小化 状態の等価性を用いて DFA を最適化 状態の等価性 状態 p と状態 q に対して同一の入力列を与えたとき その出力 ( 受理, 不受理 ) が全て同じ 状態 p と状態 q が等価である (p q) ( ) 等価性についての詳細は 論理回路 第 13 回講義を参照

状態数最小化の手順 手法 1 状態遷移表の分割 1. 異なる出力を生成する状態対をグループに分割 2. 以下を分割できなくなるまで繰り返す 同一の入力に対し 遷移先の状態が異なるグループに属すればその状態対をグループに分割 3. グループごとに 1 つの状態に併合 手法 2 状態併合表 1. 異なる出力を持つ状態対に を付ける 2. 遷移先の状態対を記入 3. 以下を が付かなくなくなるまで繰り返す 遷移先に が付いていればその状態対に を付ける 4. 等価な状態対を決定

グループ r 0 r 1 r 1 r 1 r 2 状態遷移表を用いた 最小化 状態 遷移先 q 0 q 1 受理 q 0 q 1 q 1 q 3 q 2 q 2 q 3 q 2 q 3 q 3 q F q F q 3 q 2 q 2 q 3 q F 遷移先, 受理でグループ分け {q 0 } {q 1, q 2, q 3 } {q F }

状態遷移表を用いた最小化 グループ 状態 遷移先 遷移先グループ 受理 r 0 q 0 q 1 q 1 q 3 q 2 r 1 q 2 q 3 q 2 r 1 r 1 q 3 q 3 q F r 1 r 2 r 2 q F q 3 q 2 q 1, q 2 と q 3 の 入力遷移先グループが異なる r 1 を {q 1, q 2 }{q 3 } に分割 r 1 r 1 r 1 r 1 r 1 {q 0 } {q 1, q 2 } {q 3 } {q F }

状態遷移表を用いた最小化 グループ 状態 遷移先 遷移先グループ 受理 r 0 q 0 q 1 r 1 q 1 q 3 q 2 q 2 q 3 q 2 r 1 r 2 r 2 r 1 r 1 r 2 q 3 q 3 q F r 3 q F q 3 q 2 q 1, q 2 の遷移先グループが全て同じ 分割終了 r 2 r 2 r 3 r 1 {q 0 } {q 1, q 2 } {q 3 } {q F }

状態遷移表を用いた最小化 グループ 状態 遷移先グループ 受理 r 0 q 0 r 1 r 1 q 1,2 r 2 r 1 r 2 q 3 r 2 r 3 r 3 q F r 2 r 1 r 0 r 3 r 1 r 2

状態併合表を用いた最小化 Q 遷移先 q 0 q 1 q 0 受理 q 0 とq 1 が異なるグループなら を付ける q 1 q 3 q 2 q 1 最後まで が付かなければ等価 q 2 q 3 q 2 q 2 q 3 q 3 q F q 3 q F q 3 q 2

状態併合表を用いた最小化 Q 遷移先 受理 q 0 q 1 q 0 遷移先の有無 受理不受理が異なる状態対に を付ける q 1 q 3 q 2 q 1 q 2 q 3 q 2 q 2 q 3 q 3 q F q 3 q F q 3 q 2

状態併合表を用いた最小化 Q 遷移先 受理 q 0 q 1 q 0 δ(q 1, )δ(q 2, ) δ(q 1, )δ(q 2, ) q 1 q 3 q 2 q 1 3 3 q 2 q 3 q 2 q 2 2 2 3 3 q 3 q 3 q F q 3 2 F 3 3 2 F q F q 3 q 2

状態併合表を用いた最小化 Q 遷移先 受理 q 0 q 1 q 0 同一遷移先なら判定不要 q 1 q 3 q 2 q 1 q 2 q 3 q 2 3 3 2 2 q 3 q 3 q F 3 3 2 F q 2 3 3 2 F q 3 q F q 3 q 2

状態併合表を用いた最小化 Q 遷移先 受理 q 0 q 1 q 0 q 2 q F は なので 2 F に を付ける q 1 q 3 q 2 q 1 q 2 q 3 q 2 q 2 q 3 q 3 q F 2 F 2 F q 3 q F q 3 q 2

状態併合表を用いた最小化 Q 遷移先 q 0 q 1 q 0 受理 最後まで が付かなかった {q 1,q 2 } が等価 q 1 q 3 q 2 q 1 q 2 q 3 q 2 q 2 q 3 q 3 q F 2 F 2 F q 3 q F q 3 q 2

最小化前 q 0 q 1 最小化後 q 2 q 3 r 3 r 0 r 1 r 2 q F

決定性有限オートマトンの作成 情報システムプロジェクト I の場合 マイクロ構文 OPERATOR( 一部 ) ::= + - + = - = + + - - + - = + - =

非決定性オートマトンへ + - + = - = + + - - 11 21 + 12-22 0 31 41 + 32 = 33 - = 42 43 F 51 61 + 52 + 53-62 - 63

決定性オートマトンへ Q N + - = Q N + - = 0 11 12 21 22 31 32 33 0,11,21,31, 41,51,61 11 12,F 21 22,F 31 32 33,F 12,F 32 22,F 33,F 41 42 43 51 52 53 61 62 63 41 42 43,F 51 52 53,F 61 62 63,F 52 53,F 42 62 63,F 43,F

決定性オートマトンへ Q D + - = 0,11,21,31, 41,51,61 0,11,21,31, 41,51,61 12,32, 52,F 22,42, 62,F 12,32,52,F 12,32,52,F 53,F 33,F 22,42,62,F 22,42,62,F 63,F 43,F 33,F 43,F 53,F 63,F 33,F 43,F 53,F 63,F

決定性オートマトン + + = + += ++ - - = - -= -- 状態数最小化は不要

決定性有限オートマトン ( 一部 ) A Z z _ ; ; 名前 = += + + ++ + = = = == 0 A Z z _ 0 9 1 9 整数 整数 0 9