言語理論とコンパイラ

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

2007年 5月 18日

AGU

© 2005-7 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

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

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

C のプログラムの構文解析をするプログラムを作る。出力は授業で使った形式にし、適宜読みすいようにスペースや改行をいれる。

処理するトークンは以下の通り:

発展問題 (追加点): 追加のトークン類: 文字列定数、コメント