Flexをやってみる
深くやるつもりはないが,少し気になったのでやってみた.参考にしたページはWikipeida.
flexのコードを書く
以下,Wikipediaに記述してあるコード.flex_sampleという名前で保存する.
/* * flex用字句解析 例 * * 数値(整数値)を入力を取り出す. */ /*** Definition section ***/ %{ /* * C コードにはCの標準I/O ライブラリを使うものがある. * %{と %} で囲まれた部分はそのまま生成ファイルに * 取り込まれる. */ #include <stdio.h> %} /* マクロ; 正規表現 */ DIGIT [0-9] INTEGER {DIGIT}+ /* これはflexに入力ファイルが一つであることを示す. */ %option noyywrap %% /* * 規則領域 * * コメントはインデントしなければならない. * そうしないと正規表現と誤認識してしまう. */ {INTEGER} { /* * この規則は入力から整数を表示する. * yytextには一致した文字列が含まれる. */ printf("Saw an integer: %s\n", yytext); } . { /* それ以外の文字は無視. */ } %% /*** Cコード領域 ***/ /* * メインプログラム. * * 字句解析を呼び出し、処理が済むと終了する. */ int main(void) { /* yyin はlexが読むファイルでここでは標準入力になっている. */ FILE *yyin = stdin; /* 字句解析の呼び出し. */ yylex(); return 0; }
コンパイル(?)と実行
$ flex flex_sample $ gcc lec.yy.c $ ./a.out lex123sample456lex789_a1b2c3c4 # 入力 Saw an integer: 123 Saw an integer: 456 Saw an integer: 789 Saw an integer: 1 Saw an integer: 2 Saw an integer: 3 Saw an integer: 4