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

Slides:



Advertisements
Similar presentations
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
Advertisements

文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月17日
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー文脈自由文法とLL構文解析ー
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報科学1(G1) 2016年度.
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月24日
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
形式言語とオートマトン Formal Languages and Automata 第4日目
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
言語プロセッサ 第7回目 平成27年11月16日.
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
FlexとBison+アルファ -実習編-
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ ー第9回目ー 構文解析(続き).
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
情報処理Ⅱ 第2回:2003年10月14日(火).
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
形式言語とオートマトン 中間試験解答例 2016年11月15実施 中島毅.
平成26年4月22日(火) 東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
文法と言語 ー文脈自由文法とLR構文解析ー
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田 弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月11日
形式言語とオートマトン2016 ー有限オートマトンー 第4日目
言語プロセッサ ー第9回目ー 構文解析(続き).
言語プロセッサ ー第7回目ー 構文解析(続き).
東京工科大学 コンピュータサイエンス学部 亀田 弘之
東京工科大学 コンピュータサイエンス学部 亀田 弘之
形式言語とオートマトン Formal Languages and Automata 第5日目
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

東京工科大学 コンピュータサイエンス学部 亀田弘之 言語プロセッサ2007 -No.6- 東京工科大学 コンピュータサイエンス学部 亀田弘之

内容 前回の復習と演習 正規表現のε-NFAへの変換方法 ε-NFAのDFAへの変換方法 Lexの紹介 構文解析(重要)

前回の復習 処理対象を正規表現で記述 正規表現→ε-NFA ε-NFA →DFA DFA→状態数最小DFA  例題:正規表現 (ab|bc)*a(b|c)

確認のための演習 教科書の73ページ問題1 (試験に出す予定)

演習 ただし、d = { 0, 1, 2, 3, …, 9 }, s = { +, - } 次の正規表現αについて答えよ。 簡単化せよ。 αを受理する状態数最少のDFNを作れ。 α = dd* | dd*.dd* | .dd* | | dd*E(s|ε)dd* |E(s|ε)dd* |.dd*E(s|ε)dd* ただし、d = { 0, 1, 2, 3, …, 9 }, s = { +, - }

発展課題 ー 字句解析プログラム ー 教科書p.72~p.73のソースコードを解析せよ。 (典型的なコードですので、一度ゆっくり  解読することをお勧めします。  このあたりは、後日また授業で解説し   ます。)

ここから今日の話

正規表現認識プログラム 例: (a|b)*ab C言語の浮動小数点定数 など

方法 Java, C, Pascalなどで記述することはできるが、以下では、flexを用いる方法を紹介する。 まず、(a|b)*ab について説明する。

例1: (a|b)*ab

手順 Flexのプログラムを書く。 Flexのプログラムをflexにかける。 出力ファイルlex.yy.cをgccでコンパイルする。 出力a.exeを実行する。 さまざまな文字列を入力する。

手順 ライブラリ(fl) Flex Lex.yy.c gcc Flex Program a.exe 文字列入力 出力

(1)flexのプログラムを書く %% [\t ] { } (a|b)*ab { printf(“OK %s\n”,yytext); } . { printf(“NG %s\n”,yytext); } <<注>> sample01.lに格納。

(2)&(3) flexとgccを使用 C:\> flex sample01.l C:\> gcc lex.yy.c –lfl C:\> a.exe それでは、実際にやってみよう。

例2:正負の整数 FIGURE [0-9] %% -{FIGURE}+ {printf("negative integer\n");} \+?{FIGURE}+ {printf("positive integer\n");}

(参考)正負の整数・実数 数 → 整数|実数 整数 → 正整数|負数 正整数 → 符号付正整数|符号なし正整数 負数 → 符号付負数 符号付正整数 → +(0|1|2|…|9)+ 符号なし正整数 → (0|1|2|…|9)+ 符号付負整数 → ー(0|1|2|…|9)+

例3: (C言語の)浮動小数点定数 . Numbers Numbers . f Numbers e + l Numbers Numbers - F L

例3: (C言語の)浮動小数点整数 正規表現は、… ((([0-9]*\.[0-9]+)|([0-9]+\.))|([0-9]+)) ([eE][+-]?[0-9]+)?[flFL]?

例4:学籍番号 学籍番号の構造: [0-9]{2,2}(A|B|C|D|P)[0-9]{3,3}

%% [0-9]{2,2}(A|B|C|D|P)[0-9]{3,3} printf(“%s(Student ID)”,yytext);

練習 前記の各例に対して、flexで処理プログラムを書け。 (試験に出す予定)

東京工科大学 コンピュータサイエンス学部 亀田弘之 言語プロセッサ2007 -No.6(後半)- 東京工科大学 コンピュータサイエンス学部 亀田弘之

字句解析から構文解析へ

キーワード(構文解析) 上向き解析/下向き解析 (bottom up & top down) Backtracking 括りだし(factoring) 左再帰性 First集合/Follow集合  など

上向き解析/下向き解析 数式→数式 演算子 数式 数式→(数式) 数式→-数式 数式→id 演算子→ +|-|*|/ 例: 5 + 3 ( 2 – 1 ) * 7