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

Slides:



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

東京工科大学 コンピュータサイエンス学部 亀田弘之
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
プログラミング論 II 電卓,逆ポーランド記法電卓
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
東京工科大学 コンピュータサイエンス学部 亀田弘之
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング論 ファイル入出力
形式言語とオートマトン Formal Languages and Automata 第4日目
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
言語プロセッサ 第7回目 平成27年11月16日.
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー字句解析とオートマトンlexー
FlexとBison+アルファ -実習編-
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
関数の定義.
情報リテラシー2014 part 5/5 (亀田担当分最終回)
東京工科大学 コンピュータサイエンス学部 亀田弘之
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
前回の練習問題.
高度プログラミング演習 (02).
プログラミング論 ファイル入出力
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
知能情報工学演習I 第11回( C言語第5回) 課題の回答
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー字句解析とオートマトンlexー
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
さまざまなプログラミング言語, オンライン開発環境
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月11日
湘南工科大学 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 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

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

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

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

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

言語プロセッサ2015 担当:亀田弘之(東京工科大学) 前回の確認1 正規表現の例 正規表現 具体的な文字列 a b ab a|b a|(a|b) a* (a|b)* a|b* ab* (ab)* { } 言語プロセッサ2015 担当:亀田弘之(東京工科大学)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

言語プロセッサ2015 担当:亀田弘之(東京工科大学) 入力例 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"); } 言語プロセッサ2015 担当:亀田弘之(東京工科大学)

プログラムを解析(字句解析)する プログラムの作成 練習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; 言語プロセッサ2015 担当:亀田弘之(東京工科大学)

言語プロセッサ2015 担当:亀田弘之(東京工科大学) お知らせ(再) 平成27年12月14日(月)は休講。 平成27年12月19日(土)に補講の予定。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)