%{ /* 動作記述のなかで用いる関数の定義や宣言をここに書く。 */ /* 次の 2 行は決まり文句 */ #define YY_SKIP_YYWRAP int yywrap(void) { return 1; } %} %option always-interactive %% /* ここに動作記述を書く。*/ /* ECHO はマッチした文字列をそのまま出力するマクロ */ [ \t]+ { putchar('_'); } [0-9]+(\.[0-9]+)?(E[+\-]?[0-9]+)? { printf(""); ECHO; printf(""); } [A-Za-z]([A-Za-z0-9])* { printf(""); ECHO; printf(""); } "." { ECHO; exit(1); } .|\n { ECHO; } /* 上の動作記述では値を返していないが、動作記述の中で return 文を書くと、yylex 関数の戻り値になる。(これが本来の使い方)*/ %% /* その他の関数の定義などをここに書く。*/ int main (void) { return yylex(); } /* この例では lexer 単独で動作させるので main 関数を定義し、 その中で yylex 関数を呼んでいる。*/