%option yylineno %{ void yyerror(char*); #define YY_SKIP_YYWRAP #define YYSTYPE double /* トークンの属性の型を宣言 */ int yywrap() { return 1; } #include "myparser.h" /* myparser.h は bison が生成するファイル */ %} %option always-interactive %% [ \t]+ { /* ここでは何もしない */ } [0-9]+(\.[0-9]+)?(E[+\-]?[0-9]+)? { /* NUMBER というトークンを返す。その値(``属性'')は yylval という大域変数に代入する。 */ sscanf(yytext, "%lf", &yylval); return NUMBER; } [+\-*/()=\n] { /* + - * / ( ) = \n の場合は、マッチした文字をそのまま返す。*/ /* マッチした文字は一般に yytext[0] 〜 yytext[yyleng-1]。*/ return yytext[0]; } "*+" { /* 複数のルールにマッチする場合は,長い方が優先される */ return FOO; } . { yyerror("不正な文字です。"); return '\n'; } %% /* なにもなし */