言語理論とコンパイラ

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

2006年 5月 26日

AGU

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

今日の内容

cygwin の使い方

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

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

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

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

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

flex の使い方 (1)

flex の使い方 (2)

flex の勉強の仕方

flex の入力の形式

flex 専用の指示と C プログラムの一部の部分が両方ある

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

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 用プログラムをファイルに入力して、flex と gcc を使って実効ファイルにして、試してみてください。

flex の演習 2

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

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

flex の演習 3

(flex の入力になる .l のファイルを 6月 2日 (金) 11:00時まで提出。名前、学生番号はコメントとして書く。2ページまでの場合、表と裏に印刷。3ページ以上の場合、ホチキスで止める)

一般の XML ファイルを入力して、その中のものを一行ずつ分かりやすいように書き出す。

例: (入力は <letter>Hello World!</letter> の場合)

開始タグ: <letter>

要素の内容: Hello World!

終了タグ: </letter>

ヒント: