Download presentation
Presentation is loading. Please wait.
1
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
言語プロセッサ2015 第3回目 東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
2
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
今日の学習目標 Flex(Fast LEXical analyzer generator)で 簡単な処理が書ける(分かる)。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
3
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
本資料の内容 復習 正規表現 Flexでのプログラミング その他 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
4
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
(復習1)正規表現 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
5
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
前回の確認1 正規表現の例 正規表現 具体的な文字列 a b ab a|b a|(a|b) a* (a|b)* a|b* ab* (ab)* { } 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
6
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
大切なのはこの逆 プログラムの変数名(alphanumeric) 英文字で始まり、その後ろに 英文字か数字か空文字列が続く 正規表現でどう表現する? プログラムの整数型数値 正規表現でどう表現する? 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
7
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
大切なのはこの逆(その2) プログラムの変数名(alphanumeric) 英文字で始まり、その後ろに 英文字か数字か空文字列が続く 正規表現でどう表現する? [a-zA-Z][a-zA-Z0-9]* プログラムの整数型数値 正規表現でどう表現する? [0-9]+ 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
8
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
(復習2)Flex まずはやってみよう! 手習い: プログラムから変数名を切り出す。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
9
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
参考 Flexによる処理手順 ライブラリ(-lfl or -ll) flex lex.yy.c gcc Flex program a.exe 文字列入力 出力 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
10
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
実際の手順 C:\> flex sample01.l C:\> gcc lex.yy.c –lfl (注) Unixでは -ll C:\> a.exe それでは、実際にやってみよう。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
11
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
参考 Flexのインストールについて Adobe Flex と間違わないこと! Fast Lexical analyzer generator の Flex です。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
12
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
練習1 仕様 入力:英文テキストファイル 出力:小文字 a をスペースに置き換える。 例: 入力 int main( ) { char x = ‘A’; printf(“x=%c\n”, x); } 出力 int m in( ) { ch r x = ‘A’; 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
13
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
練習2 テキストファイルの行数を数える 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
14
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
テキストファイルの行数を数える CUI(コマンドライン入力) テキストファイルを読み込む (OSのリダイレクト機能を利用) 動作例 $ ./a.exe < infile.txt キーボード入力 行数=48 計算結果(出力) $ 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
15
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
実装例 %{ int c = 0; /* 大域変数の定義 初期値 = 0 */ %} %% “\n” { c = c + 1; /* printf("c=%d\n", c);*/ } . { } main(){ yylex(); printf("C=%i\n", c); } 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
16
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
練習3 英文中の単語数を数える 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
17
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
英文中の単語数を数える CUI(コマンドライン入力) テキストファイルを読み込む (OSのリダイレクト機能を利用) 動作例 $ ./a.exe < infile.txt キーボード入力 単語数=273 計算結果(出力) $ 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
18
言語プロセッサ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 担当:亀田弘之(東京工科大学)
19
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
宿題(提出の必要なし) 今日の練習問題1~3を,自力でもう一度 やってみる。 次回の授業でこの件に関して口頭で質問します。 自分の言葉で説明できるように。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
20
数式を解析(字句解析)する プログラムの作成
練習4 数式を解析(字句解析)する プログラムの作成 動作仕様 入力されたプログラム(数式列)から、 トークンだけを切り出す 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
21
プログラムを解析(字句解析)する プログラムの作成
練習5 プログラムを解析(字句解析)する プログラムの作成 例えば,“Hello World” を出力するプログラムに対し て,字句解析するプログラムを作成する. 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
22
言語プロセッサ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 担当:亀田弘之(東京工科大学)
23
プログラムを解析(字句解析)する プログラムの作成
練習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 担当:亀田弘之(東京工科大学)
24
言語プロセッサ2015 担当:亀田弘之(東京工科大学)
お知らせ(再) 平成27年12月14日(月)は休講。 平成27年12月19日(土)に補講の予定。 言語プロセッサ2015 担当:亀田弘之(東京工科大学)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.