言語理論とコンパイラ

第五回: 中間テスト、flex の演習

2008年 5月 9日

http://www.sw.it.aoyama.ac.jp/2008/Compiler/lecture5.html

Martin J. Dürst

duerst@it.aoyama.ac.jp, O 棟 529号室

AGU

© 2005-8 Martin J. Dürst 青山学院大学

今日の内容

cygwin の使い方

cygwin がハードディスクをどう見ているか

cygwin のインストール先が例えば C:\cygwin だとすると、cygwin はまずそこの下しか見せない。

ユーザ用のホームディレクトリは C:\cygwin\home\user1 とかで、pwd/home/user1 として表示される。

C:\cygwin の下から脱出したい場合には cd /cygdrive/c でできます。

(昔は cygdrive は秘密でしたが、最近は見えるようになりました)

flex の概要

flex の動作

flex の使い方

  1. 独自のファイル処理に使う (正規表現によるファイルの一部の認識・変更):

    main から yylex() 関数を一回呼ぶ

  2. 構文解析から使う:

    構文解析から yylex() を繰り返し読んで、トークンを返すようにする

flex の勉強の仕方

flex の入力の形式

flex 専用の指示と C プログラムの一部分が混在

主に、二つの %% で区切られている三つの部分からなる:

  1. 前文 (変数の定義と初期化、良く使う字句の定義など)
  2. 字句規則とその場合に実行するプログラムの部分
  3. そのほかの関数など

その三つの部分の間に区切りとして %% がある

flex の入力の形式の一例

        int num_lines = 0, num_chars = 0;
%%
\n      ++num_lines; ++num_chars;
.       ++num_chars;
%%
main()
{
        yylex();
        printf( "# of lines = %d, # of chars = %d\n",
                num_lines, num_chars );
}

int yywrap () { return 1; }

flex の演習 1

前のスライドの flex 用プログラムをファイルに入力して、flexgcc を使って実行ファイルにして、試してみる。

flex の演習 2

一般のテキストを XML の要素の内容に入れたい場合には次の表に示される変換を行う必要がある。flex でその変換と逆変換を行うプログラムをそれぞろ書く。

テキスト XML
' '
" "
& &
< &lt;
> &gt;

flex の演習 3

提出期限と場所: 2008年5月22日 (木) 19:00 まで O棟5階のO529 号室の前の箱に投入

提出形式: flex の入力になる .l のファイルを A4 の紙一枚 (必要になれば両面印刷; もっと長くなる場合はホチキス止め)名前、学生番号はコメントとして書く。

入力ファイルに含まれる整数と浮動小数点数をカッチし、整数の場合に +10、浮動小数点数の場合に *100 にして、残りの文字をそのまま出力する。浮動小数点数の文法は C のものにする。

発展問題: C のコメントのようなものの中の文字を全て @ にする。