Lex文件如下:
%{
#include "cal.tab.h"
%}
%option noyywrap
integer [0-9]+
dreal ([0-9]*"."[0-9]+)
ereal ([0-9]*"."[0-9]+[EedD][+-]?[0-9]+)
real {dreal}|{ereal}
nl /n
plus "+"
minus "-"
times "*"
divide "/"
lp "("
rp ")"
module "%"
power "^"
%%
[ /t] ; /*skip any blanks */
{integer} { sscanf(yytext, "%d", &yylval.integer);
return INTEGER;
}
{real} { sscanf(yytext, "%lf", &yylval.real);/*yylval = atof(yytext); it doesn't work under MSVSC*/
return REAL;
}
{plus} { return PLUS;}
{minus} { return MINUS;}
{times} { return TIMES;}
{divide} { return DIVIDE;}
{module} { return MODULE;}
{power} { return POWER;}
{lp} { return LP;}
{rp} { return RP;}
{nl} { return NL;}
. { return yytext[0];}
%%
以上是Lex文件的代码(cal.l),lex是用来得到token。