%{ #define YYSTYPE double #include "parse.h" int number(void); /* see below - converts string to double */ extern int fileno(FILE *); /* to avoid gcc warning */ %} %option always-interactive D [0-9] E [Ee][+\-]?{D}+ %% [ \t\r\v\f] { /* ignore whitespace */ } [*+()\n] { return yytext[0]; /* operators and newline */ } {D}+({E})? { return number(); } {D}*"."{D}+({E})? { return number(); } {D}+"."{D}*({E})? { return number(); } . { return yytext[0]; /* bad token */ } %% void (*jj_junk)(int,char *) = yyunput; /* avoids gcc warnings */ int (*jj2_junk)(void) = input; void yyerror( const char *msg) /* called for parser syntax error */ { printf( "error: %s, yytext: %s\n", msg, yytext); } int yywrap( void) /* called at EOF */ { return 1; } int number( void) { /* Consider using strtod(), can check for overflow. */ if( sscanf( yytext, "%lf", &yylval ) != 1 ) return 0; else return NUMBER; }