%{ void yyerror(char*); #define YY_SKIP_YYWRAP int yywrap() { return 1; } #include "myparser.h" /* myparser.hは bisonが生成するファイル */ %} delim [ \t] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}{{letter}|{digit}}* number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)? %% {ws} { /* ここでは何もしない */ } {number} { sscanf(yytext, "%lf", &yylval); return NUMBER; } /* NUMBERという終端記号の種類を返す。その値(``属性'')は yylvalという大域変数に代入する。 */ [+\-\*\/\(\)\=] { return yytext[0]; } /* + - * / ( ) =の場合は、マッチした文字をそのまま返す。*/ /* マッチした文字は一般に yytext[0] 〜 yytext[yyleng-1]。*/ "\n" { return EOL; } . { yyerror("不正な文字です。"); return EOL; } %% /* なにもなし */