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

Slides:



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

文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月17日
東京工科大学 コンピュータサイエンス学部 亀田弘之
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング論 II 電卓,逆ポーランド記法電卓
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月15日
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング論 ファイル入出力
形式言語とオートマトン Formal Languages and Automata 第4日目
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ 第7回目 平成27年11月16日.
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第3回 BNF記法について(演習付き)
文法と言語 ー字句解析とオートマトンlexー
文法と言語 ー字句解析とオートマトンlexー
FlexとBison+アルファ -実習編-
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
計算の理論 I ー 正則表現 ー 月曜3校時 大月 美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
前回の練習問題.
高度プログラミング演習 (02).
プログラミング論 ファイル入出力
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
知能情報工学演習I 第11回( C言語第5回) 課題の回答
プログラミング入門 電卓を作ろう・パートI!!.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
さまざまなプログラミング言語, オンライン開発環境
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月11日
形式言語とオートマトン Formal Languages and Automata 第5日目
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第5回 配列 変数宣言、初期化について
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

東京工科大学 コンピュータサイエンス学部 担当 亀田弘之 言語プロセッサ2016 第3回目 東京工科大学 コンピュータサイエンス学部 担当 亀田弘之

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 今日の学習目標 Flex(Fast LEXical analyzer generator)で 簡単な処理が書ける(分かる)。 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 本資料の内容 復習 正規表現 Flexでのプログラミング その他 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) (復習1)正規表現 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

正規表現の例 a { a } b { b } ab { ab } a|b { a, b } a|(a|b) a* 前回の確認1 正規表現の例 正規表現 具体的な文字列 a b ab a|b a|(a|b) a* (a|b)* a|b* ab* (ab)* { a } { b } { ab } { a, b } { ε, a, aa, aaa, ・・・ } { ε, a, b, aa, ab,ba, bb, ・・・ } { ε, a, b, bb, bbb, ・・・ } { a, ab, abb, abbb, ・・・ } { ε, ab, abab, ababab, ・・・ }

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 大切なのはこの逆 プログラムの変数名(alphanumeric)  英文字で始まり、その後ろに        英文字か数字か空文字列が続く  正規表現でどう表現する? プログラムの整数型数値  正規表現でどう表現する? 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 大切なのはこの逆(その2) プログラムの変数名(alphanumeric)  英文字で始まり、その後ろに        英文字か数字か空文字列が続く  正規表現でどう表現する?  [a-zA-Z][a-zA-Z0-9]* プログラムの整数型数値  正規表現でどう表現する?  [0-9]+ 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) Flex (導入部) まずはデモから! 手習い: 正規表現文字列を切り出す プログラムの作成をしてみよう。 練習0 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 参考 Flexによる処理手順 ライブラリ(-lfl or -ll) flex lex.yy.c gcc Flex program a.exe 文字列入力 出力 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 実際の手順 C:\> flex sample01.l C:\> gcc lex.yy.c –lfl (注) Unixでは -ll C:\> a.exe それでは、実際にやってみよう。 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 参考 Flexのインストールについて Adobe Flex と間違わないこと! Fast Lexical analyzer generator の Flex です。 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) Flex (お試し) まずはやってみよう! 手習い: プログラムから変数名を切り出す プログラムの作成。 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 練習1 仕様 入力:英文テキストファイル 出力:小文字 a をスペースに置き換える。 例: 入力 int main( ) { char x = ‘A’; printf(“x=%c\n”, x); } 出力 int m in( ) { ch r x = ‘A’; 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 練習2 テキストファイルの行数を数える 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) テキストファイルの行数を数える CUI(コマンドライン入力) テキストファイルを読み込む (OSのリダイレクト機能を利用) 動作例 $ ./a.exe < infile.txt  キーボード入力 行数=48  計算結果(出力) $ 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 実装例 %{ int c = 0; /* 大域変数の定義 初期値 = 0 */ %} %% “\n” { c = c + 1; /* printf("c=%d\n", c);*/ } . { } main(){ yylex(); printf("C=%i\n", c); } 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 練習3 英文中の単語数を数える 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 英文中の単語数を数える CUI(コマンドライン入力) テキストファイルを読み込む (OSのリダイレクト機能を利用) 動作例 $ ./a.exe < infile.txt  キーボード入力 単語数=273  計算結果(出力) $ 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 実装例 %{ int wc = 0; %} %% [a-zA-Z][a-zA-Z0-9]* { wc++; } "\n" { } . { } int main(void){ yylex(); printf("wc=%i\n", wc); return 0; } 課題:左のプログラムに ついて説明せよ. 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

数式を解析(字句解析)する プログラムの作成 練習4 数式を解析(字句解析)する プログラムの作成 動作仕様    入力されたプログラム(数式列)から、    トークンだけを切り出す 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

プログラムを解析(字句解析)する プログラムの作成 練習5 プログラムを解析(字句解析)する プログラムの作成 例えば,“Hello World” を出力するプログラムに対し て,字句解析するプログラムを作成する. 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 入力例 Java言語 public class hello { public static void main( String[ ] args ){ System.out.println("Hello, Mr. Java!"); } C言語 #include <stdio.h> int main(void){ printf("Hello!\n"); } 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

プログラムを解析(字句解析)する プログラムの作成 練習7 プログラムを解析(字句解析)する プログラムの作成 入力例1 入力例2 #include <stdio.h> int main(void) { int S, i; S = 0; for(i = 1; i <= 10; i++){ S = S + i; } printf("%d\n", S); return 0; int max(int a, int b){ if(a >= b){ return a; } else { return b; 言語プロセッサ2016 担当:亀田弘之(東京工科大学)

言語プロセッサ2016 担当:亀田弘之(東京工科大学) 今日の宿題(提出の必要なし) 上記の練習問題    を,自力でもう一度 やってみる。 次回の授業で、この件に関して口頭で質問します。 自分の言葉で説明できるように。 練習0 言語プロセッサ2016 担当:亀田弘之(東京工科大学)