東京工科大学 コンピュータサイエンス学部 亀田弘之

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月17日
形式言語とオートマトン2013 第1回目 -Formal Languages & Automata-
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月15日
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ2015 Language Processors 2015
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
形式言語とオートマトン2011 第1回目 -Formal Languages & Automata-
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
形式言語とオートマトン Formal Languages and Automata 第4日目
形式言語とオートマトン2008 ー有限オートマトンー
言語プロセッサ2016 Language Processors 2016
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第3回 BNF記法について(演習付き)
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー字句解析とオートマトンlexー
FlexとBison+アルファ -実習編-
東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I 正則表現 火曜3校時 大月 美佳 平成16年6月8日 佐賀大学知能情報システム学科.
計算の理論 I ー 正則表現(今度こそ) ー 月曜3校時 大月 美佳.
計算の理論 I 正則表現 月曜3校時 大月 美佳 平成15年6月9日 佐賀大学知能情報システム学科.
計算の理論 I ー 正則表現 ー 月曜3校時 大月 美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 II 前期の復習 -有限オートマトン-
計算の理論 I ε-動作を含むNFA 月曜3校時 大月 美佳.
東京工科大学 コンピュータサイエンス学部 担当教員:亀田弘之
計算の理論 I ε-動作を含むNFA 月曜3校時 大月 美佳 平成15年6月2日 佐賀大学知能情報システム学科.
計算の理論 I 正則表現とFAとの等価性 月曜3校時 大月 美佳 平成15年6月16日 佐賀大学知能情報システム学科.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
2007年度 情報数理学.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
形式言語とオートマトン 中間試験解答例 2016年11月15実施 中島毅.
平成26年4月22日(火) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
計算の理論 I 非決定性有限オートマトン(NFA)
計算の理論 I ー正則表現とFAの等価性ー 月曜3校時 大月 美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I -数学的概念と記法- 月曜3校時 大月 美佳.
文法と言語 ー字句解析とオートマトンlexー
計算の理論 I NFAとDFAの等価性 火曜3校時 大月 美佳 平成16年5月18日 佐賀大学理工学部知能情報システム学科.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I ー 正則表現 ー 月曜3校時 大月 美佳.
コンパイラ 2012年10月11日
形式言語とオートマトン2016 ー有限オートマトンー 第4日目
計算の理論 I ε-動作を含むNFAと等価なDFA
計算の理論 I ε-動作を含むNFA 火曜3校時 大月 美佳 平成16年5月25日 佐賀大学知能情報システム学科.
形式言語とオートマトン Formal Languages and Automata 第5日目
東京工科大学 コンピュータサイエンス学部 亀田弘之
Presentation transcript:

東京工科大学 コンピュータサイエンス学部 亀田弘之 言語プロセッサ2015 -No.2- 平成26年10月5日 東京工科大学 コンピュータサイエンス学部 亀田弘之

復習から

数式の解析 kingaku = teika + teika * shouhizei

数式の解析 読み込み(文字列として) “kingaku = teika + teika * shouhizei” 要素(token)の切り出し “kingaku”, “=“, “teika”, “+”, “*”, “shouhizei” 要素の相互関係の分析 = kingaku teika + shouhizei *

分析 合成 ソース言語 読み込み 字句解析 構文解析 中間語生成 コード生成 目的言語 #include <stdio.h> main(){ float kingaku = 0, teika = 100; float shouhizei = 0.10; kingaku = teika + teika*shouhizei; printf("kingaku=%f\n", kingaku); } 読み込み 字句解析 分析 構文解析 .file "test2.c" .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr"LC3: .ascii "kingaku=%f\12\0" .text.globl _main .def _main; .scl 2; .type 32; .endef_main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $32, %esp call ___main movl $0x00000000, %eax movl %eax, 28(%esp) movl $0x42c80000, %eax movl %eax, 24(%esp) movl $0x3dcccccd, %eax movl %eax, 20(%esp) flds 24(%esp) fmuls 20(%esp) fadds 24(%esp) fstps 28(%esp) flds 28(%esp) fstpl 4(%esp) movl $LC3, (%esp) call _printf leave ret .def _printf; .scl 2; .type 32; .endef 中間語生成 合成 コード生成 目的言語

ソース言語 読み込み 字句解析 分析 構文解析 中間語生成 合成 コード生成 目的言語

数式の解析 読み込み(文字列として) “kingaku = teika + teika * shouhizei” 要素(token)の切り出し “kingaku”, “=“, “teika”, “+”, “*”, “shouhizei” 要素の相互関係の分析 = kingaku teika + shouhizei *

数式の解析 読み込み(文字列として) “kingaku = teika + teika * shouhizei” 要素(token)の切り出し “kingaku”, “=“, “teika”, “+”, “*”, “shouhizei” 要素の相互関係の分析 = kingaku teika + shouhizei *

数式の解析 読み込み(文字列として) “kingaku = teika + teika * shouhizei” 要素(token)の切り出し “kingaku”, “=“, “teika”, “+”, “*”, “shouhizei” 要素の相互関係の分析 = kingaku teika + shouhizei *

数式の解析 読み込み(文字列として) 読み込み “kingaku = teika + teika * shouhizei” 要素(token)の切り出し  字句解析 “kingaku”, “=“, “teika”, “+”, “*”, “shouhizei” 要素の相互関係の分析 構文解析 = kingaku teika + shouhizei *

数式の解析 読み込み 字句解析 構文解析 ファイルからの入力技法 有限オートマトンの理論 正規文法 正規表現 線形有界オートマトン理論 文脈自由文法

前提知識 言語理論とオートマトン プログラミング技法 前期科目「言語理論とオートマトン」 抽象的・論理的な思考への慣れ (特に、正規表現と有限オートマトン) プログラミング技法 今までいろいろと習ってきましたよね! 基本的な知識があれば一応OK ファイルの入出力が難しい人もいるかも…

学んで得られるもの 言語理論とオートマトン プログラミング技法 抽象的・論理的な思考への慣れ ソフトウェア分野における基本的概念 正規表現 etc. プログラミング言語へのより深い理解 プログラミング技法 プログラミング力(知識)アップ 洗練されたアルゴリズムの理解  などなど

言語プロセッサ関連は、コンピュータサイエンスの英知が集積されている! この授業を取った人は先見の明がある!

今日の内容 正規表現 (regular expressions; re) オートマトン (automaton, pl. automata) 正規表現とオートマトンとの関係 オートマトンのシミュレータ デモ

今日の学習目標 正規表現が使える。 オートマトンを理解し,作れる。

1.正規表現 正規表現とは? 聞いたことのある人は? ① 使ったことのある人は? ② 使い方説明できる人は? ③ 聞いたことのある人は? ① 使ったことのある人は? ② 使い方説明できる人は? ③ どんな時に正規表現を使うのか?

正規表現とは 文字列のパターンを表現するためのもの 例: パターンが見つかりましたか? { a, aa, aaa, aaaa, aaaaa, ...} { 1, 01, 001, 0001, 00001, ...} { aab, bab } { 2, 4, 6, 8, 10, ...} ( = 正の偶数全体の集合 )                                  など パターンが見つかりましたか?

練習 いま current directory に以下のような (名前の)ファイルがあるとする。 問1 proで始まるファイル名のものは? program62 procedure71 profileV7 prototype52 parser infile2010 filedummy777 outfile777 file256 fixer8 問1 proで始まるファイル名のものは? 問2 fileを含むものは? 問3 末尾に数字がありそれが偶数のものは?

正規表現(定義) アルファベットVの上の正規表現とは以下の ものである。 εは正規表現 a∈Vならば、aは正規表現 rとsが正規表現ならば rs は正規表現 rとsが正規表現ならば r | s は正規表現 rが正規表現ならば r* は正規表現 以上のものだけが正規表現 アルファベット(字母, alphabet):1つの言語を考えるとき、その言語で使われているすべての文字からなる集合のこと。

正規表現の例 正規表現 具体的な文字列 a b ab a|b a|(a|b) a* (a|b)* a|b* ab* (ab)* { }

有限オートマトンの定義 FA = ( K, Σ, δ, q0, F ) ただし、 K : 状態の集合( Kは有限集合) Σ : 入力アルファベット(Σは有限集合) δ : 状態遷移関数 δ: K×Σ∋( qi , a ) → qj ∈ K q0 : 初期状態 F : 最終状態の集合 ( F ⊆ K ) そうなのですね

オートマトンのイメージ 遷移条件 (出力) 内部状態 内部状態 初期状態 最終状態 など

オートマトンの例 ゲーム人工知能 PackMan RPG (Role Playing Games) など

Packmanの観察 次のサイトに行って実際にPackmanを 今日の演習1 次のサイトに行って実際にPackmanを 体験してみよう。 (参考: http://j-game.net/packman.html) 【課題】 どのような内部状態が存在するか? 内部状態を書き出す。 内部状態同士の遷移関係を表す矢印を引く。 遷移の条件およびそのときの動作を書き込む。 オートマトンとしての解釈を考える。

次の話題 オートマトンと正規表現の関係 (有限)オートマトンと正規表現とは対応関係にある。 つまり、(有限)オートマトンは正規表現で書き表せるとともに、正規表現は(有限)オートマトンで書き表せる。

練習 問 正規表現 b(a|b)a を考える。 この正規表現が表わす文字列をすべて求めよ。 今日の演習2 問 正規表現 b(a|b)a を考える。 この正規表現が表わす文字列をすべて求めよ。 この正規表現の表わす文字列をすべて、かつ、それらだけを受理するオートマトンを作れ。

もっと練習 問 次の正規表現と等価なオートマトンを作れ。 ab a* 01(10|01)*11

オートマトンのシミュレータ s = s0; c = nextChar( ); while( c != eof ) { s = move( s, c ); } if(sがFに含まれる) return “yes”; else return “no”; 積極的に理解しよう!

字句解析プログラムは、オートマトン理論を知っていればスマートに作成できる。

Flexを使った例 正規表現 a(a|b)*c を受理するオートマトンをシミュレートするプログラムの自動生成が可能。

デモ (詳しくは後日)

次回までの予習(準備) 自分が普段使っているテキストエディタでは、正規表現を扱えるか確認しなさい。 使えない場合は、正規表現が使えるエディタを探し、インストールしなさい。 本授業としては、復習をしっかりやすことをお勧めします。