コンパイラ 第3回 字句解析 ― 決定性有限オートマトンの導出 ―

Slides:



Advertisements
Similar presentations
ゲームプログラミング講習 第2章 関数の使い方
Advertisements

サービス管理責任者等研修テキスト 分野別講義    「アセスメントと        支援提供の基本姿勢」 <児童発達支援管理責任者> 平成27年10月1日.
ヒトの思考プロセスの解明を目的とするワーキングメモリの研究
第27講 オームの法則 電気抵抗の役割について知る オームの法則を使えるようにする 抵抗の温度変化を理解する 教科書P.223~226
コラッツ予想の変形について 東邦大学 理学部 情報科 白柳研究室 山中 陽子.
第5章 家計に関する統計 ー 経済統計 ー.
公共財 公共経済論 II no.3 麻生良文.
VTX alignment D2 浅野秀光 2011年12月15日  放射線研ミーティング.
冷却フランシウム原子を用いた 電子の永久電気双極子能率探索のための ルビジウム磁力計の研究
生命情報学 (8) スケールフリーネットワーク
前半戦 「史上最強」風 札上げクイズ.

認知症を理解し 環境の重要性について考える
フッ化ナトリウムによる洗口 2010・9・13 宮崎市郡東諸県郡薬剤師会 学校薬剤師  日高 華代子.
食品の安全性に関わる社会システム:総括 健康弱者 ハイリスク集団 HACCP (食肉処理場・食品工場) 農場でのQAP 一般的衛生管理
規制改革とは? ○規制改革の目的は、経済の活性化と雇用の創出によって、   活力ある経済社会の実現を図ることにあります。
地域保健対策検討会 に関する私見(保健所のあり方)
公共政策大学院 鈴木一人 第8回 専門化する政治 公共政策大学院 鈴木一人
医薬品ネット販売規制について 2012年5月31日 ケンコーコム株式会社.
平成26年8月27日(水) 大阪府 健康医療部 薬務課 医療機器グループ
平成26年度 呼吸器学会からの提案結果 (オレンジ色の部分が承認された提案) 新規提案 既収載の変更 免疫組織化学染色、免疫細胞化学染色
エナジードリンクの危険性 2015年6月23日 経営学部市場戦略学科MR3195稲沢珠依.
自動吸引は 在宅を変えるか 大分協和病院 院長         山本 真.
毎月レポート ビジネスの情報 (2016年7月号).
医療の歴史と将来 医療と医薬品産業 個人的経験 3. 「これからの医療を考える」 (1)医薬品の研究開発 -タクロリムスの歴史-
社会福祉調査論 第4講 2.社会調査の概要 11月2日.
2015年12月28日-2016年3月28日 掲載分.
2010度 民事訴訟法講義 補論 関西大学法学部教授 栗田 隆.
腫瘍学概論 埼玉医科大学国際医療センター 包括的がんセンター 緩和医療科/緩和ケアチーム 奈良林 至
“企業リスクへの考え方に変化を求められています。 トータルなリスクマネジメント・サービスをプロデュースします。“
情報漏えい 経済情報学科 E  西村 諭 E  釣 洋平.
金融班(ミクロ).
第11回 2009年12月16日 今日の資料=A4・4枚+解答用紙 期末試験:2月3日(水)N2教室
【ABL用語集】(あいうえお順) No 用語 解説 12 公正市場価格 13 債権 14 指名債権 15 事業収益資産 16 集合動産 17
基礎理論(3) 情報の非対称性と逆選択 公共政策論II No.3 麻生良文.
浜中 健児 昭和42年3月27日生まれ 東京都在住 株式会社ピー・アール・エフ 代表取締役 (学歴) 高 校:千葉県立東葛飾高校 卒業
COPYRIGHT(C) 2011 KYUSHU UNIVERSITY. ALL RIGHTS RESERVED
Blosxom による CMS 構築と SEO テクニック
記入例 JAWS DAYS 2015 – JOB BOARD 会社名 採用職種 営業職/技術職/その他( ) 仕事内容 待遇 募集数
ネットビジネスの 企業と特性 MR1127 まさ.
Future Technology活用による業務改革
ネットビジネス論(杉浦) 第8回 ネットビジネスと情報技術.
g741001 長谷川 嵩 g740796 迫村 光秋 g741000 西田 健太郎 g741147 小井出 真聡
自然独占 公共経済論 II no.5 麻生良文.
Autonomic Resource Provisioning for Cloud-Based Software
Webショップにおける webデザイン 12/6 08A1022 甲斐 広大.
物理的な位置情報を活用した仮想クラウドの構築
ハイブリッドクラウドを実現させるポイントと SCSKのOSSへの取組み
寺尾 敦 青山学院大学社会情報学部 第12回 情報デザイン(4) 情報の構造化と表現 寺尾 敦 青山学院大学社会情報学部
【1−1.開発計画 – 設計・開発計画】 システム開発計画にはシステム開発を効率的、効果的に実行する根拠(人員と経験、開発手順、開発・導入するシステム・アプリケーション・サービス等)を記述すること。 システム開発の開始から終了までの全体スケジュールを記載すること。 アプリケーション機能配置、ソフトウェア、インフラ構成、ネットワーク構成について概要を示すこと。
6 日本のコーポレート・ガバナンス 2008年度「企業論」 川端 望.
急成長する中国ソフトウェア産業 中国ソフトウェアと情報サービス産業の規模 総売上高は5年間で約5.3倍の成長
米国ユタ州LDS病院胸部心臓外科フェローの経験
公益社団法人日本青年会議所 関東地区埼玉ブロック協議会 JCの情熱(おもい)育成委員会 2011年度第1回全体委員会
次世代大学教育研究会のこれまでの活動 2005年度次世代大学教育研究大会 明治大学駿河台校舎リバティタワー9階1096教室
子どもの本の情報 大阪府内の協力書店の情報 こちらをクリック 大阪府内の公立図書館・図書室の情報
第2回産業調査 小島浩道.
〈起点〉を示す格助詞「を」と「から」の選択について
広東省民弁本科高校日語専業骨幹教師研修会 ①日本語の格助詞の使い分け ②動詞の自他受身の選択について   -日本語教育と中日カルチャーショックの観点から- 名古屋大学 杉村 泰.
■5Ahバッテリー使用報告 事例紹介/東【その1】 ■iphon4S(晴れの昼間/AM8-PM3) ◆約1時間で68%⇒100%
『ワタシが!!』『地域の仲間で!!』 市民が始める自然エネルギー!!
ポイントカードの未来形を形にした「MUJI Passport」
SAP NetWeaver を支える Microsoft テクノロジーの全貌 (Appendix)
ガイダンス(内業) 測量学実習 第1回.
Python超入門 久保 幹雄 東京海洋大学.
熱力学の基礎 丸山 茂夫 東京大学大学院 工学系研究科 機械工学専攻
京都民医連中央病院 CHDF学習推進委員会
資料2-④ ④下水道.
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
コンピュータの構造2 (OSとアプリケーション)
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

トークンの種類 (情報システムプロジェクトIの場合) 記号 区切り記号 ; , ( ) { } [ ] 演算子 比較演算子 = = != < > (<=) (>=) 論理演算子 ! && || 算術演算子 + - * / % 代入演算子 = += -= *= /= ++ -- 名前 変数名 定数 整数 文字 文字列 予約語 main int if while for inputint inputchar outputint outputchar break (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 記号 トークン名 + ADD - SUB * MUL / DIV % MOD 記号 トークン名 = ASSIGN += ASSIGNADD -= ASSIGNSUB *= ASSIGNMUL /= ASSIGNDIV ++ INC -- DEC (※) (※) 単項演算子の - と 二項演算子の - で 共通して使用

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

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

非決定性有限オートマトンへ マイクロ構文 →非決定性有限オートマトン(NFA) 以下の手法で帰納的に ε(空記号列)に対するNFA R1 | R2 に対するNFA R1R2 に対するNFA R* に対するNFA R+ に対するNFA (R1, R2, R : 正規表現)

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

非決定性有限オートマトンへ ε ε R1 i f ε R2 ε ε ε ε i R1 R2 f R1 | R2 に対するNFA

非決定性有限オートマトンへ ε ε ε i R f ε ε ε i R f ε R* (0回以上の繰り返し) に対するNFA

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

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

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

決定性有限オートマトンへ 非決定性有限オートマトン(NFA) →決定性有限オートマトン(DFA) a a a b b 同一の入力で遷移できる状態を1つの状態にまとめる ε ε q8 a ε ε q3 ε q3 q5 a a b ε q2 ε ε q0 q1 q2 q7 q8 q9 b ε ε q4 ε q4 q6 ε q1 からε入力で q2 q3 q4 q8 へ遷移可能 ⇒ q1 q2 q3 q4 q8 をまとめる

決定性有限オートマトンへ NFA N = (QN, Σ, δN, qN0, FN) ⇒ DFA D = (QD, Σ δD, qD0, FD) ε-closure (q) ::= q ∈{QN∪QD} からε遷移できる状態集合 goto (q, a) ::= q ∈{QN∪QD} から a ∈Σで遷移できる状態集合

決定性有限オートマトンへ 1 q3 0, 1 q1 1 q0 q2 1 qF 1 NFA ε ε QN ε-closure (q) q0 1 q2 1 qF NFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 q1 q2 q3 qF {q0, q1} q0 のε-遷移先 {q1} {qF} {q2, q3} {q2}

決定性有限オートマトンへ 1 q3 0, 1 q1 1 q0 q2 1 qF 1 NFA ε ε QN ε-closure (q) 1 - 遷移は ε1 - 遷移 1ε - 遷移 ε1ε - 遷移を含む ε 1 q0 q2 1 qF 1 NFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1} q1 {q1} q2 {q2} q3 {q2, q3} qF {qF} {q0, q1} {q0, q1, q2, q3} {q0, q1}の 0入力遷移先 {q0, q1}の 1入力遷移先

決定性有限オートマトンへ 1 q3 0, 1 q1 1 q0 q2 1 qF 1 NFA ε ε QN ε-closure (q) 1 q0 q2 1 qF 1 NFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1} {q0, q1, q2, q3} q1 {q1} q2 {q2} q3 {q2, q3} qF {qF} {q0, q1} {q2, q3} {qF} φ

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

決定性有限オートマトンへ NFA DFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1, q2, q3} q1 {q1} {q2, q3} q2 {q2} φ {qF} q3 qF DFA QD ε-closure (q) goto (q, 0) goto (q, 1) q0,1 {q0, q1} {q0, q1} {q0, q1, q2, q3} ε-closure ({q0∪q1}) goto ({q0∪q1}, 0) goto ({q0∪q1}, 1)

決定性有限オートマトンへ NFA DFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1, q2, q3} q1 {q1} {q2, q3} q2 {q2} φ {qF} q3 qF DFA 𝑞 0,1 ∈ 𝑄 𝐷 𝑞 0,1,2,3 ∉ 𝑄 𝐷 QD ε-closure (q) goto (q, 0) goto (q, 1) q0,1 {q0, q1} {q0, q1, q2, q3} q0, 1, 2, 3 {q0, q1, q2, q3} {q0, q1} {q0, q1, q2, q3, qF}

決定性有限オートマトンへ NFA DFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1, q2, q3} q1 {q1} {q2, q3} q2 {q2} φ {qF} q3 qF DFA 𝑞 0,1 ∈ 𝑄 𝐷 𝑞 0,1,2,3,𝐹 ∉ 𝑄 𝐷 QD ε-closure (q) goto (q, 0) goto (q, 1) q0,1 {q0, q1} {q0, q1, q2, q3} q0, 1, 2, 3 {q0, q1, q2, q3, qF} q0, 1, 2, 3,F {q0, q1, q2, q3 , qF} {q0, q1, qF} {q0, q1, q2, q3, qF}

決定性有限オートマトンへ NFA DFA QN ε-closure (q) goto (q, 0) goto (q, 1) q0 {q0, q1, q2, q3} q1 {q1} {q2, q3} q2 {q2} φ {qF} q3 qF DFA 𝑞 0,1,𝐹 ∉ 𝑄 D 𝑞 0,1,2,3,𝐹 ∈𝑄 𝐷 QD ε-closure (q) goto (q, 0) goto (q, 1) q0,1 {q0, q1} {q0, q1, q2, q3} q0, 1, 2, 3 {q0, q1, q2, q3, qF} q0, 1, 2, 3,F {q0, q1, q2, q3 , qF} {q0, q1, qF} q0, 1 ,F {q0, q1, qF} {q0, q1, qF} {q0, q1, q2, q3 }

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

決定性有限オートマトンへ q0 0, 1 q1 q2 1 q3 qF NFA DFA 1 ε q0,1 q0,1,2,3 1 q3 qF NFA DFA q0,1 q0,1,2,3 q0,1,2,3,F 1 q0,1,F

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

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

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

状態遷移表を用いた 最小化 b q2 b b a q0 q1 a qF b a a q3 a {q0} {q1, q2, q3} {qF} グループ 状態 遷移先 受理 a b q0 q1 q3 q2 qF ○ a r2 r1 r0 遷移先, 受理で グループ分け {q0} {q1, q2, q3} {qF}

状態遷移表を用いた最小化 {q0} q1, q2 と q3 の {q1, q2} {q3} {qF} グループ 状態 遷移先 遷移先グループ 受理 a b r0 q0 q1 r1 q3 q2 qF r2 ○ r1 r1 r1 r2 {q0} {q1, q2} {q3} {qF} q1, q2 と q3 の b入力遷移先グループが異なる ⇒ r1 を {q1, q2}{q3}に分割

状態遷移表を用いた最小化 {q0} q1, q2 の遷移先グループが全て同じ {q1, q2} {q3} {qF} a b r0 q0 q1 受理 a b r0 q0 q1 r1 q3 q2 r2 qF r3 ○ r2 r1 r3 {q0} {q1, q2} {q3} {qF} q1, q2 の遷移先グループが全て同じ ⇒ 分割終了

状態遷移表を用いた最小化 b r3 b a r0 r1 a b a r2 a a b r0 q0 r1 q1,2 r2 q3 r3 qF ○ グループ 状態 遷移先グループ 受理 a b r0 q0 r1 q1,2 r2 q3 r3 qF ○ b r3 b a r0 r1 a b a r2 a

状態併合表を用いた最小化 Q 受理 a b q0 q1 q3 q2 qF ○ 遷移先 q0とq1が異なる グループなら ×を付ける 最後まで×が 付かなければ 等価

状態併合表を用いた最小化 Q 受理 a b q0 q1 q3 q2 qF ○ × × × 遷移先 遷移先の有無、 受理不受理が 異なる状態対に ×を付ける × × ×

状態併合表を用いた最小化 Q 受理 a b q0 q1 q3 q2 × qF ○ δ(q1, a)δ(q2, a) 遷移先 受理 a b q0 q1 q3 q2 × qF ○ δ(q1, a)δ(q2, a) δ(q1, b)δ(q2, b) 3 3 2 2 3 3 2 F

状態併合表を用いた最小化 Q 遷移先 受理 a b q0 q1 q3 q2 × 3 3 2 2 qF 2 F ○ 同一遷移先なら 判定不要

状態併合表を用いた最小化 Q 受理 a b q0 q1 q3 q2 × qF ○ q2qF は×なので 2 F に×を付ける × 遷移先

状態併合表を用いた最小化 Q 受理 a b q0 q1 q3 q2 × qF ○ {q1,q2} が等価 遷移先 最後まで×が 付かなかった

q0 q1 a q2 b q3 qF 最小化前 最小化後 b r0 r1 r3 r2 b a a b a a

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

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

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

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

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

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