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