第五回: 中間テスト、flex の演習
2006年 5月 26日
© 2005 Martin J. Dürst 青山学院大学
ls
: ディレクトリの内容をリストアップmkdir
: 新しいディレクトリを作るcd
: 現在のディレクトリを変更するpwd
: 現在のディレクトリを表示するgcc
: C のプログラムをコンパイルする./a
:
コンパイルしたプログラムを実行するnotepad filename.l &
: cygwin
からメモ帳を直接、しかも並行に使える用に立ち上げるcygwin のインストール先が例えば C:\cygwin
だとすると、cygwin はまずそこの下しか見せない。
ユーザ用のホームディレクトリは
C:\cygwin\home\user1
とかで、pwd
で
/home/user1
として表示される。
C:\cygwin
の下から脱出したい場合には cd
/cygdrive/c
でできます。
(昔は cygdrive
は秘密でしたが、最近は見えるようになりました)
.l
で終わる flex 入力ファイルを作る
(例: test.l)flex test.l
main
から yylex()
関数を一回呼ぶ
構文解析から yylex()
を繰り返し読んで、トーケンを返すようにする
flex 専用の指示と C プログラムの一部の部分が両方ある
主に、二つの %%
で区切られている三つの部分からなる:
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 用プログラムをファイルに入力して、flex と gcc を使って実効ファイルにして、試してみてください。
一般のテキストを XML の要素の内容に入れたい場合には次の変換を行う必要がある。flex でその変換と逆変換を行うプログラムをそれぞろ書け。対応表は以下の通り:
テキスト | XML |
' |
' |
" |
" |
& |
& |
< |
< |
> |
> |
(flex の入力になる .l
のファイルを 6月 2日
(金)
11:00時まで提出。名前、学生番号はコメントとして書く。2ページまでの場合、表と裏に印刷。3ページ以上の場合、ホチキスで止める)
一般の XML ファイルを入力して、その中のものを一行ずつ分かりやすいように書き出す。
例: (入力は <letter>Hello World!</letter> の場合)
開始タグ: <letter>
要素の内容: Hello World!
終了タグ: </letter>
ヒント: